From 08c7ad08aafe36b3756dc7262c0e5874ed0e43c1 Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Wed, 14 Oct 2026 18:02:06 +0000 Subject: [PATCH 01/19] Undertale: the engine's start (rooms cut from the wiki's maps, Frisk walking, doors, text) A new big game, built from public material: the Undertale Wiki's maps of every area (each room one pixel for one), its sprites, and the free demo's own sprite files from undertale.com. tools/fetch.py gathers them, tools/pack.py cuts the Ruins' 46 rooms into 20-pixel tiles with a collision map each. The renderer draws the game's 320 x 240 in bands; Frisk walks the rooms and their doors. --- games/undertale/.gitignore | 2 + games/undertale/Makefile | 79 ++ games/undertale/src/battle.c | 9 + games/undertale/src/battle.h | 13 + games/undertale/src/bullets.c | 2 + games/undertale/src/data.S | 19 + games/undertale/src/data.h | 112 +++ games/undertale/src/event.c | 48 ++ games/undertale/src/event.h | 43 + games/undertale/src/events.c | 10 + games/undertale/src/events.h | 9 + games/undertale/src/flags.h | 55 ++ games/undertale/src/game.c | 136 ++++ games/undertale/src/game.h | 66 ++ games/undertale/src/gfx.c | 475 +++++++++++ games/undertale/src/gfx.h | 61 ++ games/undertale/src/items.c | 98 +++ games/undertale/src/items.h | 35 + games/undertale/src/lzma/7zTypes.h | 374 +++++++++ games/undertale/src/lzma/LzmaDec.c | 1185 ++++++++++++++++++++++++++++ games/undertale/src/lzma/LzmaDec.h | 234 ++++++ games/undertale/src/lzma/Precomp.h | 5 + games/undertale/src/main.c | 48 ++ games/undertale/src/menu.c | 8 + games/undertale/src/menu.h | 11 + games/undertale/src/plat.h | 40 + games/undertale/src/plat_eadk.c | 42 + games/undertale/src/plat_host.c | 76 ++ games/undertale/src/res.c | 77 ++ games/undertale/src/res.h | 62 ++ games/undertale/src/rooms.c | 14 + games/undertale/src/save.c | 8 + games/undertale/src/save.h | 11 + games/undertale/src/text.c | 301 +++++++ games/undertale/src/text.h | 56 ++ games/undertale/src/world.c | 335 ++++++++ games/undertale/src/world.h | 74 ++ games/undertale/tests/play.c | 215 +++++ games/undertale/tools/fetch.py | 134 ++++ games/undertale/tools/pack.py | 468 +++++++++++ games/undertale/tools/rooms.py | 102 +++ games/undertale/tools/sprites.py | 43 + 42 files changed, 5195 insertions(+) create mode 100644 games/undertale/.gitignore create mode 100644 games/undertale/Makefile create mode 100644 games/undertale/src/battle.c create mode 100644 games/undertale/src/battle.h create mode 100644 games/undertale/src/bullets.c create mode 100644 games/undertale/src/data.S create mode 100644 games/undertale/src/data.h create mode 100644 games/undertale/src/event.c create mode 100644 games/undertale/src/event.h create mode 100644 games/undertale/src/events.c create mode 100644 games/undertale/src/events.h create mode 100644 games/undertale/src/flags.h create mode 100644 games/undertale/src/game.c create mode 100644 games/undertale/src/game.h create mode 100644 games/undertale/src/gfx.c create mode 100644 games/undertale/src/gfx.h create mode 100644 games/undertale/src/items.c create mode 100644 games/undertale/src/items.h create mode 100644 games/undertale/src/lzma/7zTypes.h create mode 100644 games/undertale/src/lzma/LzmaDec.c create mode 100644 games/undertale/src/lzma/LzmaDec.h create mode 100644 games/undertale/src/lzma/Precomp.h create mode 100644 games/undertale/src/main.c create mode 100644 games/undertale/src/menu.c create mode 100644 games/undertale/src/menu.h create mode 100644 games/undertale/src/plat.h create mode 100644 games/undertale/src/plat_eadk.c create mode 100644 games/undertale/src/plat_host.c create mode 100644 games/undertale/src/res.c create mode 100644 games/undertale/src/res.h create mode 100644 games/undertale/src/rooms.c create mode 100644 games/undertale/src/save.c create mode 100644 games/undertale/src/save.h create mode 100644 games/undertale/src/text.c create mode 100644 games/undertale/src/text.h create mode 100644 games/undertale/src/world.c create mode 100644 games/undertale/src/world.h create mode 100644 games/undertale/tests/play.c create mode 100644 games/undertale/tools/fetch.py create mode 100644 games/undertale/tools/pack.py create mode 100644 games/undertale/tools/rooms.py create mode 100644 games/undertale/tools/sprites.py diff --git a/games/undertale/.gitignore b/games/undertale/.gitignore new file mode 100644 index 00000000..342d9dda --- /dev/null +++ b/games/undertale/.gitignore @@ -0,0 +1,2 @@ +output/ +build/ diff --git a/games/undertale/Makefile b/games/undertale/Makefile new file mode 100644 index 00000000..9d85865a --- /dev/null +++ b/games/undertale/Makefile @@ -0,0 +1,79 @@ +# Undertale on the NumWorks calculator. +# make output/undertale.nwa +# make check link it like the calculator does (output/undertale.bin) +# make host build/play: the game on a computer, for tests and screenshots +# make test the game played on a computer (tests/check.py, with the sanitizers) +# make data src/data.bin and src/data.h from the public material tools/fetch.py gathers +# (REF=its folder, Python + Pillow + NumPy) +Q ?= @ +# the ARM toolchain on the PATH, or in TOOLCHAIN= +TOOLCHAIN ?= +BIN = $(if $(TOOLCHAIN),$(TOOLCHAIN)/) +CC = $(BIN)arm-none-eabi-gcc +NWLINK ?= npx --yes -- nwlink@1.0.0 +STRIP ?= $(BIN)arm-none-eabi-strip --strip-unneeded +SIZE = $(BIN)arm-none-eabi-size +BUILD_DIR = output +REF ?= + +# the drawing runs every frame at -O2; the rest is small at -Os +HOT = src/gfx.c src/bullets.c +COLD = $(filter-out $(HOT) src/plat_host.c src/plat_eadk.c,$(wildcard src/*.c)) src/lzma/LzmaDec.c +COLD_OBJ = $(patsubst src/%.c,$(BUILD_DIR)/cold/%.o,$(COLD)) +HEADERS = $(wildcard src/*.h) ../common/epsilon_app.h ../common/epsilon_files.h + +CFLAGS = -std=gnu11 $(shell $(NWLINK) eadk-cflags-device) -DDATA_BIN='"src/data.bin"' +CFLAGS += -O2 -Wall -Wextra -Wno-unused-parameter -fno-math-errno -fsingle-precision-constant +CFLAGS += -fno-tree-loop-distribute-patterns -flto -fno-fat-lto-objects -fwhole-program -fvisibility=internal +CFLAGS += -ffunction-sections -fdata-sections $(EXTRA) +LDFLAGS = -Wl,--relocatable -nostartfiles --specs=nano.specs +LDFLAGS += -Wl,-e,main -Wl,-u,eadk_app_name -Wl,-u,eadk_app_icon -Wl,-u,eadk_api_level +LDFLAGS += -Wl,--gc-sections -flinker-output=nolto-rel + +.PHONY: build check clean host test data +build: $(BUILD_DIR)/undertale.nwa + +# apps get 133652 bytes of RAM on custom builds of Epsilon 25.2 (148928 or more on official ones) +check: $(BUILD_DIR)/undertale.nwa + $(Q) $(NWLINK) nwa-bin --ram-length 133652 $< $(BUILD_DIR)/undertale.bin + @echo "BIN $(BUILD_DIR)/undertale.bin: $$(wc -c < $(BUILD_DIR)/undertale.bin) bytes" + +$(BUILD_DIR)/data.o: src/data.S src/data.bin | $(BUILD_DIR) + $(Q) $(CC) -c -DDATA_BIN='"src/data.bin"' $< -o $@ + +$(BUILD_DIR)/cold/%.o: src/%.c $(HEADERS) + @mkdir -p $(@D) + $(Q) $(CC) $(CFLAGS) -Os -c $< -o $@ + +$(BUILD_DIR)/undertale.nwa: $(HOT) src/plat_eadk.c $(COLD_OBJ) $(HEADERS) $(BUILD_DIR)/icon.o $(BUILD_DIR)/data.o + @echo "LD $@" + $(Q) $(CC) $(CFLAGS) $(LDFLAGS) $(HOT) src/plat_eadk.c $(COLD_OBJ) $(BUILD_DIR)/data.o $(BUILD_DIR)/icon.o -lm -o $@ + $(Q) $(STRIP) $@ + $(Q) $(SIZE) $@ + +$(BUILD_DIR)/icon.o: src/icon.png | $(BUILD_DIR) + @echo "ICON $<" + $(Q) $(NWLINK) png-icon-o $< $@ + +$(BUILD_DIR): + $(Q) mkdir -p $@ + +# on a computer: tests/play.c plays it with scripted keys and saves screenshots +HOST_FLAGS = -std=gnu11 -O1 -g -Wall -Wextra -Wno-unused-parameter -Isrc -DHOST -DDATA_BIN='"src/data.bin"' +HOST_SAN = -fsanitize=address,undefined -fno-sanitize-recover=undefined +HOST_SRC = $(filter-out src/plat_eadk.c src/main.c,$(wildcard src/*.c)) src/lzma/LzmaDec.c +host: build/play +build/play: $(HOST_SRC) tests/play.c src/data.S src/data.bin $(HEADERS) + $(Q) mkdir -p $(dir $@) + $(Q) cc $(HOST_FLAGS) $(HOST_SAN) $(HOST_SRC) tests/play.c src/data.S -lm -o $@ + @echo "HOST $@" + +test: build/play + python3 tests/check.py build/play + +data: + @test -n "$(REF)" || { echo "make data REF="; exit 1; } + python3 -I tools/pack.py $(REF) + +clean: + $(Q) rm -rf $(BUILD_DIR) build diff --git a/games/undertale/src/battle.c b/games/undertale/src/battle.c new file mode 100644 index 00000000..e5d1c077 --- /dev/null +++ b/games/undertale/src/battle.c @@ -0,0 +1,9 @@ +/* Battles (battle.h). */ +#include "battle.h" +#include "game.h" +static bool over = true; +void battle_start(int id) { (void)id; over = true; } +bool battle_over(void) { return over; } +int battle_result(void) { return BR_SPARED; } +void battle_update(uint32_t keys, uint32_t pressed) { (void)keys, (void)pressed; } +void battle_draw(void) {} diff --git a/games/undertale/src/battle.h b/games/undertale/src/battle.h new file mode 100644 index 00000000..d64165ca --- /dev/null +++ b/games/undertale/src/battle.h @@ -0,0 +1,13 @@ +/* Undertale: battles (encounters). */ +#ifndef UT_BATTLE_H +#define UT_BATTLE_H +#include +#include + +void battle_start(int id); +bool battle_over(void); +int battle_result(void); /* BR_*: how the last one ended */ +void battle_update(uint32_t keys, uint32_t pressed); +void battle_draw(void); +enum { BR_WON, BR_SPARED, BR_FLED, BR_DIED, BR_SCRIPTED }; +#endif diff --git a/games/undertale/src/bullets.c b/games/undertale/src/bullets.c new file mode 100644 index 00000000..60389322 --- /dev/null +++ b/games/undertale/src/bullets.c @@ -0,0 +1,2 @@ +/* The bullet board's bullets. */ +#include "game.h" diff --git a/games/undertale/src/data.S b/games/undertale/src/data.S new file mode 100644 index 00000000..ef216e88 --- /dev/null +++ b/games/undertale/src/data.S @@ -0,0 +1,19 @@ +/* data.bin (tools/pack.py) in the app's read-only data */ +#ifdef __APPLE__ + .const_data + .p2align 2 + .globl _ut_data +_ut_data: + .incbin DATA_BIN + .p2align 2 +#else + .section .rodata.ut_data,"a" + .balign 4 + .global ut_data +ut_data: + .incbin DATA_BIN + .balign 4 +#endif +#ifdef __ELF__ + .section .note.GNU-stack,"",%progbits +#endif diff --git a/games/undertale/src/data.h b/games/undertale/src/data.h new file mode 100644 index 00000000..e553aee7 --- /dev/null +++ b/games/undertale/src/data.h @@ -0,0 +1,112 @@ +/* made by tools/pack.py: the contents of data.bin */ +#ifndef UT_DATA_H +#define UT_DATA_H +#define SEC_SPRITES 0 +#define SEC_FRAMES 1 +#define SEC_TILES 2 +#define SEC_ROOMS 3 +#define SEC_GRID 4 +#define SEC_COLL 5 +#define SEC_FONTS 6 +#define SEC_STRINGS 7 +#define SEC_DOORS 8 +#define SPR_FRISK_D 0 +#define SPR_FRISK_U 1 +#define SPR_FRISK_L 2 +#define SPR_FRISK_R 3 +#define SPR_TORIEL_D 4 +#define SPR_TORIEL_U 5 +#define SPR_TORIEL_L 6 +#define SPR_TORIEL_R 7 +#define SPR_SAVEPOINT 8 +#define SPR_FLOWEY 9 +#define SPR_HEART 10 +#define SPR_FACE_TORIELTALK 11 +#define SPR_FACE_TORIELTALKSIDE 12 +#define SPR_FACE_TORIELHAPPYTALK 13 +#define SPR_FACE_TORIELWHAT 14 +#define SPR_FACE_TORIELWHATSIDE 15 +#define SPR_FACE_TORIELMAD 16 +#define SPR_FACE_TORIELCOLD 17 +#define SPR_FACE_TORIELSURPRISED 18 +#define SPR_FACE_TORIELEMBARRASSED 19 +#define SPR_FACE_TORIELGLASSES 20 +#define SPR_FACE_TORIELREVENGETALK 21 +#define SPR_FACE_TORIELSCARED 22 +#define SPR_FACE_TORIELBLINK 23 +#define SPR_FACE_TORIELHAPPYBLINK 24 +#define SPR_FACE_TORIELBODY 25 +#define SPR_FACE_SANS 26 +#define SPR_FACE_SANSCHUCKLE 27 +#define SPR_FACE_SANSWINK 28 +#define SPR_FACE_PAPYRUS 29 +#define SPR_FACE_PAPYRUSEVIL 30 +#define SPR_FACE_PAPYRUSLAUGH 31 +#define SPR_FACE_PAPYRUSMAD 32 +#define SPR_FACE_PAPYRUSSIDE 33 +#define SPR_FLOWEYNICE 34 +#define SPR_FLOWEYNICESIDE 35 +#define SPR_FLOWEYSASSY 36 +#define SPR_FLOWEYEVIL 37 +#define SPR_FLOWEYGRIN 38 +#define SPR_FLOWEYPLAIN 39 +#define SPR_FLOWEYPISSED 40 +#define SPR_FLOWEYWINK 41 +#define SPR_FLOWEYLAUGH 42 +#define SPR_FLOWEYHURT 43 +#define SPR_FLOWEYTORIEL 44 +#define SPR_FLOWEYTORIEL2 45 +#define SPR_FLOWEYSIDESHOCK 46 +#define AREA_RUINS 0 +#define ROOM_AREA1 0 +#define ROOM_AREA1_2 1 +#define ROOM_RUINS1 2 +#define ROOM_RUINS2 3 +#define ROOM_RUINS3 4 +#define ROOM_RUINS4 5 +#define ROOM_RUINS5 6 +#define ROOM_RUINS6 7 +#define ROOM_RUINS7 8 +#define ROOM_RUINS7A 9 +#define ROOM_RUINS8 10 +#define ROOM_RUINS8B 11 +#define ROOM_RUINS9 12 +#define ROOM_RUINS10 13 +#define ROOM_RUINS10B 14 +#define ROOM_RUINS11 15 +#define ROOM_RUINS12 16 +#define ROOM_RUINS13 17 +#define ROOM_RUINS14 18 +#define ROOM_RUINS15 19 +#define ROOM_RUINS16 20 +#define ROOM_RUINS16A 21 +#define ROOM_RUINS16B 22 +#define ROOM_RUINS16C 23 +#define ROOM_RUINS16D 24 +#define ROOM_RUINS16E 25 +#define ROOM_RUINS16F 26 +#define ROOM_RUINS17A 27 +#define ROOM_RUINS17B 28 +#define ROOM_RUINS17C 29 +#define ROOM_RUINS17D 30 +#define ROOM_RUINS17X 31 +#define ROOM_RUINS18 32 +#define ROOM_RUINS19 33 +#define ROOM_RUINS20 34 +#define ROOM_RUINS21 35 +#define ROOM_TORHOUSE1 36 +#define ROOM_TORHOUSE2 37 +#define ROOM_TORKITCHEN 38 +#define ROOM_TORHOUSE3 39 +#define ROOM_ASRIELROOM 40 +#define ROOM_TORIELROOM 41 +#define ROOM_BASEMENT1 42 +#define ROOM_BASEMENT2 43 +#define ROOM_BASEMENT3 44 +#define ROOM_RUINSEXIT 45 +#define FONT_MAIN 0 +#define FONT_SMALL 1 +#define NUM_SPRITES 47 +#define NUM_ROOMS 46 +#define NUM_FONTS 2 +#endif diff --git a/games/undertale/src/event.c b/games/undertale/src/event.c new file mode 100644 index 00000000..646a97e6 --- /dev/null +++ b/games/undertale/src/event.c @@ -0,0 +1,48 @@ +/* The event that runs now (event.h), and Frisk walking for a cutscene. */ +#include +#include "event.h" +#include "game.h" + +static Ev cur; +static bool running; + +void event_start(int id, Obj *self) { + if (running || !id) return; + memset(&cur, 0, sizeof cur); + cur.id = id, cur.self = self; + running = true; + event_update(); /* (it starts this frame: a talk opens at once) */ +} + +bool event_running(void) { return running; } + +void event_update(void) { + if (!running) return; + if (event_run(&cur)) running = false; +} + +/* ---------------------------------------------------------------- Frisk walked */ +static struct { + int x, y, sp; + bool on; +} walk; + +void pl_walk_to(int x, int y, int sp) { walk.x = x, walk.y = y, walk.sp = sp ? sp : 3, walk.on = true; } +bool pl_walking(void) { return walk.on; } + +/* (world.c calls it each frame while a cutscene runs) */ +void pl_walk_step(void) { + if (!walk.on) { + pl.moving = 0; + return; + } + int dx = walk.x - pl.x, dy = walk.y - pl.y; + if (dx) pl.dir = dx < 0 ? DIR_LEFT : DIR_RIGHT; + if (abs_i(dy) > abs_i(dx)) pl.dir = dy < 0 ? DIR_UP : DIR_DOWN; + pl.x = (int16_t)(pl.x + clamp_i(dx, -walk.sp, walk.sp)); + pl.y = (int16_t)(pl.y + clamp_i(dy, -walk.sp, walk.sp)); + pl.anim++; + pl.frame = (uint8_t)((1 + pl.anim / 6) % (pl.dir < 2 ? 4 : 2)); + pl.moving = 1; + if (pl.x == walk.x && pl.y == walk.y) walk.on = false, pl.frame = 0, pl.anim = 0, pl.moving = 0; +} diff --git a/games/undertale/src/event.h b/games/undertale/src/event.h new file mode 100644 index 00000000..a850806b --- /dev/null +++ b/games/undertale/src/event.h @@ -0,0 +1,43 @@ +/* Undertale: events, the game's cutscenes and talks. + * + * An event is a C function called once a frame until it says it is done; + * the macros below make it read like the game's scripts (each SAY waits for + * its text, each WAIT for its frames). Its locals don't last over a wait: + * what has to is kept in c->v. One event runs at a time; while it does, + * Frisk doesn't move unless it lets him. */ +#ifndef UT_EVENT_H +#define UT_EVENT_H +#include +#include "text.h" +#include "world.h" + +typedef struct Ev { + int id, line, t; + int v[6]; + Obj *self; +} Ev; + +#define EV_BEGIN switch (c->line) { case 0: +#define EV_END } return 1 +#define EV_YIELD do { c->line = __LINE__; return 0; case __LINE__:; } while (0) +#define WAIT_UNTIL(cond) do { c->line = __LINE__; case __LINE__: if (!(cond)) return 0; } while (0) +#define WAIT(n) do { c->t = (n); c->line = __LINE__; case __LINE__: if (c->t-- > 0) return 0; } while (0) +#define SAY(face, s) do { text_open(face, s); WAIT_UNTIL(!text_active()); } while (0) +#define SAYF(face, ...) do { text_openf(face, __VA_ARGS__); WAIT_UNTIL(!text_active()); } while (0) +#define NARRATE(s) SAY(FACE_NONE, s) +#define CHOICE() text_choice() +/* an object walks to (x, y) at sp pixels a frame; WALK waits for it */ +#define WALK_TO(o, X, Y, SP) do { (o)->tx = (int16_t)(X), (o)->ty = (int16_t)(Y), (o)->speed = (uint8_t)(SP), (o)->walking = 1; } while (0) +#define WALK(o, X, Y, SP) do { WALK_TO(o, X, Y, SP); WAIT_UNTIL(!(o)->walking); } while (0) +/* Frisk walks to (x, y), as a cutscene moves him */ +#define PL_WALK(X, Y, SP) do { pl_walk_to(X, Y, SP); WAIT_UNTIL(!pl_walking()); } while (0) +#define BATTLE(id) do { battle_start(id); WAIT_UNTIL(battle_over()); } while (0) +#define FADE_TO(r, X, Y, D) do { world_fade_to(r, X, Y, D); WAIT_UNTIL(!world_fading()); } while (0) + +void event_start(int id, Obj *self); +bool event_running(void); +void event_update(void); +int event_run(Ev *c); /* events.c: the events, by id */ +void pl_walk_to(int x, int y, int sp); +bool pl_walking(void); +#endif diff --git a/games/undertale/src/events.c b/games/undertale/src/events.c new file mode 100644 index 00000000..8dadaf7a --- /dev/null +++ b/games/undertale/src/events.c @@ -0,0 +1,10 @@ +/* The events (event.h). */ +#include "event.h" +#include "events.h" +#include "game.h" + +int event_run(Ev *c) { + switch (c->id) { + default: return 1; + } +} diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h new file mode 100644 index 00000000..f1ff3fbc --- /dev/null +++ b/games/undertale/src/events.h @@ -0,0 +1,9 @@ +/* Undertale: the events, by id. */ +#ifndef UT_EVENTS_H +#define UT_EVENTS_H +enum { + EV_NONE, + EV_SIGN, /* a sign or anything that only says its text (self->arg: the text, in events.c) */ + EV_COUNT +}; +#endif diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h new file mode 100644 index 00000000..46305f19 --- /dev/null +++ b/games/undertale/src/flags.h @@ -0,0 +1,55 @@ +/* Undertale: what the game remembers (the original's global.flag), named. + * Saved: new flags go at the end, before FLAG_COUNT. */ +#ifndef UT_FLAGS_H +#define UT_FLAGS_H +enum { + F_NONE, + /* the Ruins */ + F_FLOWEY_MET, /* the first meeting is over */ + F_TORIEL_MET, + F_RUINS1_DONE, /* Toriel waited at the entrance's stairs */ + F_RUINS2_DONE, /* the middle road puzzle */ + F_RUINS3_SW1, F_RUINS3_SW2, F_RUINS3_DONE, + F_DUMMY, /* 1 talked, 2 fought, 3 fled, 4 bored */ + F_RUINS5_DONE, /* the spikes, hand in hand */ + F_RUINS6_DONE, /* the independence test */ + F_PHONE, /* Toriel's cell phone */ + F_LEAFPILE_CALL, + F_CANDY_TAKEN, /* Monster Candy taken (to 4) */ + F_CANDY_SPILT, + F_RUINS9_ROCK, /* the first rock pushed home */ + F_FLAVOR_CALL, F_FLAVOR, /* 1 cinnamon, 2 butterscotch */ + F_RUINS11_ROCK, /* the second rock puzzle: the reluctant rock moved */ + F_RUINS11_ASK, + F_NAPSTA, /* 1 spared, 2 killed, 3 fled */ + F_DONUT_BOUGHT, F_CIDER_BOUGHT, + F_ITEM_CALL, + F_FROGGIT_YELLOW, /* 0 yellow names, 1 white, 2 pink */ + F_RIBBON, F_TOYKNIFE, + F_ONESWITCH, F_ROTATE1, F_ROTATE2, F_ROTATE3, F_ROTATE4, + F_ALLERGY_CALL, + F_TORIEL_HOME, /* Toriel found Frisk at her tree */ + F_PIE, /* the pie slice taken */ + F_TORIEL_TALKS, /* questions asked her by the fire */ + F_TORIEL_BASEMENT, /* she went downstairs */ + F_BASEMENT_TALK, /* 1..3: what she said along the way */ + F_TORIEL_FIGHT, /* 1 spared, 2 killed */ + F_FLOWEY_END, + F_RUINS_EXIT, + F_KILLS_RUINS, + F_SKIPS, /* text pages skipped with X (a Froggit notices) */ + F_FROG_TIP, + F_SAVE_SEEN, + F_FALL_LEAVES, + F_SPIDER_CALL, + F_ASRIEL_ROOM, + F_MIRROR, + F_LIGHTS, + F_RUINS_SAVE_BED, + F_HARDMODE, + F_FIRST_FROGGIT, + F_TORIEL_SNAIL, + F_WHIMSUN_TALK, + FLAG_COUNT = 256 +}; +#endif diff --git a/games/undertale/src/game.c b/games/undertale/src/game.c new file mode 100644 index 00000000..748ffb39 --- /dev/null +++ b/games/undertale/src/game.c @@ -0,0 +1,136 @@ +/* The game's state, its modes and its frame (game.h). */ +#include +#include "battle.h" +#include "event.h" +#include "game.h" +#include "gfx.h" +#include "items.h" +#include "menu.h" +#include "res.h" +#include "save.h" +#include "text.h" +#include "world.h" + +Save sv; +int g_mode; +uint32_t g_frame; +bool g_running = true; +static uint32_t prev_keys; + +static uint32_t seed = 0x2545F491u; +uint32_t rnd(void) { + seed ^= seed << 13, seed ^= seed >> 17, seed ^= seed << 5; + return seed; +} +int rnd_n(int n) { return n > 0 ? (int)(rnd() % (uint32_t)n) : 0; } + +/* ---------------------------------------------------------------- stats (LOVE) */ +static const uint32_t exp_table[] = {0, 0, 10, 30, 70, 120, 200, 300, 500, 800, 1200, 1700, 2500, 3500, 5000, 7000, + 10000, 15000, 25000, 50000, 99999}; +int lv_exp_for(int lv) { return lv >= 1 && lv <= 20 ? (int)exp_table[lv] : 99999; } +int lv_maxhp(int lv) { return lv >= 20 ? 99 : 16 + 4 * lv; } +int lv_at(int lv) { return 8 + 2 * lv; } +int lv_df(int lv) { return 10 + (lv - 1) / 4; } + +bool gain_exp(int exp) { + sv.exp = (uint32_t)min_i((int)sv.exp + exp, 99999); + bool up = false; + while (sv.lv < 20 && (int)sv.exp >= lv_exp_for(sv.lv + 1)) { + sv.lv++; + int old = sv.maxhp; + sv.maxhp = (int16_t)lv_maxhp(sv.lv); + sv.hp = (int16_t)(sv.hp + sv.maxhp - old); + sv.at = (uint8_t)lv_at(sv.lv), sv.df = (uint8_t)lv_df(sv.lv); + up = true; + } + return up; +} +int weapon_at(void) { return item_info(sv.weapon)->at; } +int armor_df(void) { return item_info(sv.armor)->df; } + +bool item_add(int item) { + for (int i = 0; i < NUM_ITEMS; i++) + if (!sv.items[i]) { + sv.items[i] = (uint8_t)item; + return true; + } + return false; +} +void item_remove_at(int slot) { + for (int i = slot; i < NUM_ITEMS - 1; i++) sv.items[i] = sv.items[i + 1]; + sv.items[NUM_ITEMS - 1] = 0; +} +int item_count(void) { + int n = 0; + while (n < NUM_ITEMS && sv.items[n]) n++; + return n; +} + +/* ---------------------------------------------------------------- a new game */ +void game_new(const char *name) { + memset(&sv, 0, sizeof sv); + strncpy(sv.name, name, sizeof sv.name - 1); + memcpy(g_name, sv.name, sizeof g_name); + sv.lv = 1, sv.maxhp = sv.hp = 20, sv.at = (uint8_t)lv_at(1), sv.df = (uint8_t)lv_df(1); + sv.weapon = ITEM_STICK, sv.armor = ITEM_BANDAGE; + g_mode = MODE_WORLD; + world_enter(ROOM_AREA1, 120, 6010, DIR_DOWN); +} + +void game_init(void) { + save_restore_copy(); + menu_title_open(); +} + +void game_open_menu(void) { menu_open(); } + +void game_quit_save(void) { save_resume_write(); } + +/* ---------------------------------------------------------------- the frame */ +void game_frame(uint32_t keys) { + uint32_t pressed = keys & ~prev_keys; + prev_keys = keys; + g_frame++; + if (keys & K_HOME) { + if (g_mode == MODE_WORLD || g_mode == MODE_MENU || g_mode == MODE_BATTLE) game_quit_save(); + g_running = false; + return; + } + if (g_mode == MODE_WORLD || g_mode == MODE_BATTLE || g_mode == MODE_MENU) sv.time++; + switch (g_mode) { + case MODE_WORLD: + world_update(keys, pressed); + event_update(); + text_update(pressed); + break; + case MODE_BATTLE: + battle_update(keys, pressed); + event_update(); + break; + default: + menu_update(keys, pressed); + if (g_mode == MODE_WORLD) event_update(); + break; + } +} + +void game_draw(void) { + gfx_begin(); + switch (g_mode) { + case MODE_WORLD: + case MODE_MENU: + case MODE_SAVE: + world_draw(); + if (g_fade) gfx_rect(0, 0, SCREEN_W, SCREEN_H, C_BLACK, g_fade); + text_draw(); + if (g_mode != MODE_WORLD) menu_draw(); + break; + case MODE_BATTLE: + battle_draw(); + break; + default: + menu_draw(); + break; + } + gfx_end(); +} diff --git a/games/undertale/src/game.h b/games/undertale/src/game.h new file mode 100644 index 00000000..d9cb1785 --- /dev/null +++ b/games/undertale/src/game.h @@ -0,0 +1,66 @@ +/* Undertale: the game's state and its modes (title, overworld, battle, menus). + * + * Inspired by Undertale by Toby Fox, not affiliated with him. + * Made by Mason Chen as part of NumPlay. */ +#ifndef UT_GAME_H +#define UT_GAME_H +#include +#include +#include "flags.h" + +static inline int abs_i(int v) { return v < 0 ? -v : v; } +static inline int clamp_i(int v, int a, int b) { return v < a ? a : v > b ? b : v; } +static inline int min_i(int a, int b) { return a < b ? a : b; } +static inline int max_i(int a, int b) { return a > b ? a : b; } + +enum { MODE_TITLE, MODE_NAME, MODE_WORLD, MODE_BATTLE, MODE_MENU, MODE_SAVE, MODE_GAMEOVER, MODE_INTRO, MODE_END }; + +#define NUM_ITEMS 8 +typedef struct { + /* what a SAVE keeps */ + char name[8]; + uint8_t lv; + uint32_t exp; + uint16_t gold; + int16_t hp, maxhp; + uint8_t at, df; /* the game's own: 10 at LV 1, shown less 10 */ + uint8_t weapon, armor; /* ITEM_* */ + uint8_t items[NUM_ITEMS]; /* ITEM_*, 0 none */ + uint8_t phone[8]; /* CELL: who can be called */ + uint16_t kills; + uint32_t time; /* frames played */ + int16_t room, x, y; /* where it was saved */ + uint8_t flags[FLAG_COUNT]; +} Save; +extern Save sv; /* the game now */ +extern int g_mode; +extern uint32_t g_frame; +extern bool g_running; + +static inline int flag(int f) { return sv.flags[f]; } +static inline void set_flag(int f, int v) { sv.flags[f] = (uint8_t)v; } + +void game_init(void); +void game_frame(uint32_t keys); +void game_draw(void); +void game_quit_save(void); /* Home: the moment is kept, to come back to */ +void game_open_menu(void); +void room_setup(int room, int from); /* rooms.c: the room's objects */ +void encounter_step(void); /* rooms.c: a step towards a random encounter */ +uint32_t rnd(void); +int rnd_n(int n); /* 0 .. n - 1 */ + +/* stats */ +int lv_maxhp(int lv); +int lv_at(int lv); +int lv_df(int lv); +int lv_exp_for(int lv); /* the EXP to reach LV lv */ +bool gain_exp(int exp); /* true if LOVE went up */ +int weapon_at(void); +int armor_df(void); + +/* items: inventory */ +bool item_add(int item); +void item_remove_at(int slot); +int item_count(void); +#endif diff --git a/games/undertale/src/gfx.c b/games/undertale/src/gfx.c new file mode 100644 index 00000000..10200547 --- /dev/null +++ b/games/undertale/src/gfx.c @@ -0,0 +1,475 @@ +/* The renderer: a draw list rasterised in bands of GFX_BAND rows. + * + * Each command keeps its screen bounds (clipped); a band walks the commands + * that cross it, in order. Sprites are row RLE (res.h): a row is runs of + * (skip, length, pixels), so a band only reads the rows it shows. Alpha has + * 33 steps (0..32), applied with the usual RGB565 trick. */ +#include +#include "gfx.h" +#include "res.h" +#include "world.h" + +enum { I_RECT, I_SPRITE, I_TILES, I_TEXT, I_LINE, I_CIRCLE, I_SPRITE_EX }; + +typedef struct { + uint8_t kind, flags, alpha, font; + int16_t x0, y0, x1, y1; /* screen bounds, clipped: [x0, x1) x [y0, y1) */ + int16_t cx0, cx1; /* the clip's columns */ + int16_t x, y; /* sprite: its top-left; text: its top-left; line: start */ + int16_t a, b; /* line: end; circle: radius; sprite_ex: scale x, scale y; text: shake, spacing */ + uint16_t ref, sub; /* sprite, frame / text: pool offset, length */ + uint16_t color; /* sprite: 0 its own colours, else 1 + RGB565 (in `extra`) */ + uint16_t extra; + uint32_t seed; +} Item; + +#ifdef HOST +static uint16_t host_band[SCREEN_W * GFX_BAND]; +static uint16_t *band = host_band; +#else +static uint16_t *band; +#endif +void gfx_set_band_memory(uint16_t *px) { +#ifdef HOST + band = px ? px : host_band; +#else + band = px; +#endif +} + +static Item items[GFX_MAX_ITEMS]; +static int nitems; +static char pool[GFX_TEXT_POOL]; +static int npool; +static int clip_x0, clip_y0, clip_x1 = SCREEN_W, clip_y1 = SCREEN_H; +int gfx_dropped; +static int dropped_now; + +void gfx_begin(void) { + nitems = 0, npool = 0, dropped_now = 0; + gfx_clip_all(); +} + +void gfx_clip(int x, int y, int w, int h) { + clip_x0 = x < 0 ? 0 : x, clip_y0 = y < 0 ? 0 : y; + clip_x1 = x + w > SCREEN_W ? SCREEN_W : x + w, clip_y1 = y + h > SCREEN_H ? SCREEN_H : y + h; +} +void gfx_clip_all(void) { clip_x0 = 0, clip_y0 = 0, clip_x1 = SCREEN_W, clip_y1 = SCREEN_H; } + +/* a new command over [x0, x1) x [y0, y1), clipped; NULL if it shows nothing */ +static Item *add(int kind, int x0, int y0, int x1, int y1) { + if (x0 < clip_x0) x0 = clip_x0; + if (y0 < clip_y0) y0 = clip_y0; + if (x1 > clip_x1) x1 = clip_x1; + if (y1 > clip_y1) y1 = clip_y1; + if (x0 >= x1 || y0 >= y1) return NULL; + if (nitems >= GFX_MAX_ITEMS) { + dropped_now++; + return NULL; + } + Item *it = &items[nitems++]; + memset(it, 0, sizeof *it); + it->kind = (uint8_t)kind; + it->x0 = (int16_t)x0, it->y0 = (int16_t)y0, it->x1 = (int16_t)x1, it->y1 = (int16_t)y1; + it->cx0 = (int16_t)clip_x0, it->cx1 = (int16_t)clip_x1; + it->alpha = 255; + return it; +} + +void gfx_rect(int x, int y, int w, int h, uint16_t color, uint8_t alpha) { + if (!alpha) return; + Item *it = add(I_RECT, x, y, x + w, y + h); + if (it) it->color = color, it->alpha = alpha; +} + +void gfx_frame_rect(int x, int y, int w, int h, int t, uint16_t color) { + gfx_rect(x, y, w, t, color, 255); + gfx_rect(x, y + h - t, w, t, color, 255); + gfx_rect(x, y + t, t, h - 2 * t, color, 255); + gfx_rect(x + w - t, y + t, t, h - 2 * t, color, 255); +} + +static void sprite_item(uint16_t s, int i, int x, int y, uint8_t flags, uint16_t color, bool tint, uint8_t alpha) { + Frame f; + if (!alpha || !frame_get(s, i, &f)) return; + int tx = x - ((flags & GFX_FLIPX) ? f.w - 1 - f.ox : f.ox), ty = y - ((flags & GFX_FLIPY) ? f.h - 1 - f.oy : f.oy); + Item *it = add(I_SPRITE, tx, ty, tx + f.w, ty + f.h); + if (!it) return; + it->x = (int16_t)tx, it->y = (int16_t)ty; + it->ref = s, it->sub = (uint16_t)i, it->flags = flags, it->alpha = alpha; + it->color = tint, it->extra = color; +} +void gfx_sprite(uint16_t s, int i, int x, int y, uint8_t flags, uint8_t alpha) { sprite_item(s, i, x, y, flags, 0, false, alpha); } +void gfx_sprite_color(uint16_t s, int i, int x, int y, uint8_t flags, uint16_t color, uint8_t alpha) { + sprite_item(s, i, x, y, flags, color, true, alpha); +} + +/* scaled and turned: the bounds of the turned rectangle (sin and cos in 1/256 steps of a turn) */ +static const int16_t sin_q[65] = { + 0, 25, 50, 75, 100, 125, 150, 175, 200, 224, 249, 273, 297, 321, 345, 369, 392, 415, 438, 460, 483, 505, 526, 548, + 569, 590, 610, 630, 650, 669, 688, 706, 724, 742, 759, 775, 792, 807, 822, 837, 851, 865, 878, 891, 903, 915, 926, + 936, 946, 955, 964, 972, 980, 987, 993, 999, 1004, 1009, 1013, 1016, 1019, 1021, 1023, 1024, 1024}; +int gfx_sin(int a) { /* a in 1/256 turn, result in 1/1024 */ + a &= 255; + if (a < 64) return sin_q[a]; + if (a < 128) return sin_q[128 - a]; + if (a < 192) return -sin_q[a - 128]; + return -sin_q[256 - a]; +} +int gfx_cos(int a) { return gfx_sin(a + 64); } + +void gfx_sprite_ex(uint16_t s, int i, int x, int y, int scale_x, int scale_y, int angle, uint16_t color, uint8_t alpha) { + Frame f; + if (!alpha || !frame_get(s, i, &f) || !scale_x || !scale_y) return; + if (!(angle & 255) && scale_x == 256 && scale_y == 256) { + sprite_item(s, i, x, y, 0, color, color != 0, alpha); + return; + } + /* the corners, relative to the origin, scaled then turned */ + int c = gfx_cos(angle), sn = gfx_sin(angle); + int xs[4] = {-f.ox, f.w - f.ox, -f.ox, f.w - f.ox}, ys[4] = {-f.oy, -f.oy, f.h - f.oy, f.h - f.oy}; + int minx = 1 << 30, maxx = -(1 << 30), miny = 1 << 30, maxy = -(1 << 30); + for (int k = 0; k < 4; k++) { + int px = xs[k] * scale_x / 256, py = ys[k] * scale_y / 256; + int rx = (px * c - py * sn) / 1024, ry = (px * sn + py * c) / 1024; + if (rx < minx) minx = rx; + if (rx > maxx) maxx = rx; + if (ry < miny) miny = ry; + if (ry > maxy) maxy = ry; + } + Item *it = add(I_SPRITE_EX, x + minx - 1, y + miny - 1, x + maxx + 2, y + maxy + 2); + if (!it) return; + it->x = (int16_t)x, it->y = (int16_t)y; + it->a = (int16_t)scale_x, it->b = (int16_t)scale_y; + it->ref = s, it->sub = (uint16_t)i, it->alpha = alpha; + it->color = color != 0, it->extra = color; + it->seed = (uint32_t)angle; +} + +void gfx_tiles(int wx, int wy) { + Item *it = add(I_TILES, 0, 0, SCREEN_W, SCREEN_H); + if (it) it->x = (int16_t)wx, it->y = (int16_t)wy; +} + +void gfx_line(int x0, int y0, int x1, int y1, uint16_t color) { + Item *it = add(I_LINE, (x0 < x1 ? x0 : x1), (y0 < y1 ? y0 : y1), (x0 > x1 ? x0 : x1) + 1, (y0 > y1 ? y0 : y1) + 1); + if (!it) return; + it->x = (int16_t)x0, it->y = (int16_t)y0, it->a = (int16_t)x1, it->b = (int16_t)y1, it->color = color; +} + +void gfx_circle(int cx, int cy, int r, uint16_t color, uint8_t alpha) { + Item *it = add(I_CIRCLE, cx - r, cy - r, cx + r + 1, cy + r + 1); + if (!it) return; + it->x = (int16_t)cx, it->y = (int16_t)cy, it->a = (int16_t)r, it->color = color, it->alpha = alpha; +} + +/* ---------------------------------------------------------------- fonts */ +typedef struct { + uint8_t height, first, count, flags; + const uint8_t *glyphs; /* 8 bytes each: advance, w, h, ox, oy, pad, bitmap offset (u16) */ + const uint8_t *bits; +} Font; +static void font_get(int font, Font *f) { + const uint8_t *s = section(SEC_FONTS); + const uint8_t *p = s + rd32(s + 4 + 4 * font); + f->height = p[0], f->first = p[1], f->count = p[2], f->flags = p[3]; + f->glyphs = p + 4; + f->bits = p + 4 + 8 * f->count; +} +static const uint8_t *glyph(const Font *f, uint8_t c) { + if (c < f->first || c >= f->first + f->count) c = '?'; + if (c < f->first || c >= f->first + f->count) return NULL; + return f->glyphs + 8 * (c - f->first); +} +int font_height(int font) { + Font f; + font_get(font, &f); + return f.height; +} +int gfx_text_width(int font, const char *s, int n) { + Font f; + font_get(font, &f); + int w = 0, best = 0; + for (int i = 0; i < n && s[i]; i++) { + if (s[i] == '\n') { + if (w > best) best = w; + w = 0; + continue; + } + const uint8_t *g = glyph(&f, (uint8_t)s[i]); + if (g) w += g[0]; + } + return w > best ? w : best; +} + +int gfx_text_ex(int font, int x, int y, const char *s, int n, uint16_t color, int shake, uint32_t seed, int spacing) { + int len = 0; + while (len < n && s[len]) len++; + if (!len) return 0; + Font f; + font_get(font, &f); + int lines = 1; + for (int i = 0; i < len; i++) lines += s[i] == '\n'; + int w = gfx_text_width(font, s, len) + len * spacing; + if (npool + len > GFX_TEXT_POOL) { + dropped_now++; + return w; + } + Item *it = add(I_TEXT, x - shake - 2, y - shake - 4, x + w + shake + 4, y + lines * (f.height + 2) + shake + 4); + if (!it) return w; + memcpy(pool + npool, s, (size_t)len); + it->ref = (uint16_t)npool, it->sub = (uint16_t)len; + npool += len; + it->x = (int16_t)x, it->y = (int16_t)y, it->font = (uint8_t)font, it->color = color; + it->a = (int16_t)shake, it->b = (int16_t)spacing, it->seed = seed; + return w; +} +int gfx_text(int font, int x, int y, const char *s, uint16_t color, uint8_t alpha) { + (void)alpha; + return gfx_text_ex(font, x, y, s, 0x7FFF, color, 0, 0, 0); +} + +/* ---------------------------------------------------------------- rasterising */ +static inline uint16_t blend(uint16_t d, uint16_t s, uint32_t a) { /* a: 0..32 */ + uint32_t dd = (d | (uint32_t)d << 16) & 0x07E0F81Fu; + uint32_t ss = (s | (uint32_t)s << 16) & 0x07E0F81Fu; + uint32_t r = (dd + (((ss - dd) * a) >> 5)) & 0x07E0F81Fu; + return (uint16_t)(r | r >> 16); +} +static inline uint32_t a32(uint8_t a) { return (a * 32u + 127) / 255; } + +static void rast_rect(const Item *it, int by0, int by1) { + int y0 = it->y0 > by0 ? it->y0 : by0, y1 = it->y1 < by1 ? it->y1 : by1; + uint32_t a = a32(it->alpha); + for (int y = y0; y < y1; y++) { + uint16_t *row = band + (y - by0) * SCREEN_W; + if (a >= 32) + for (int x = it->x0; x < it->x1; x++) row[x] = it->color; + else + for (int x = it->x0; x < it->x1; x++) row[x] = blend(row[x], it->color, a); + } +} + +static inline uint32_t px_at(const uint8_t *p, int k, int bpp) { + switch (bpp) { + case 8: return p[k]; + case 4: return (p[k >> 1] >> ((k & 1) * 4)) & 15; + case 2: return (p[k >> 2] >> ((k & 3) * 2)) & 3; + case 1: return (p[k >> 3] >> (k & 7)) & 1; + default: return 0; + } +} + +static void rast_sprite(const Item *it, int by0, int by1) { + Frame f; + if (!frame_get(it->ref, it->sub, &f)) return; + int y0 = it->y0 > by0 ? it->y0 : by0, y1 = it->y1 < by1 ? it->y1 : by1; + uint32_t a = a32(it->alpha); + bool fx = it->flags & GFX_FLIPX, fy = it->flags & GFX_FLIPY; + uint16_t pal[256]; + for (int k = 0; k < f.ncol; k++) pal[k] = it->color ? it->extra : rd16(f.pal + 2 * k); + int cx0 = it->x0, cx1 = it->x1; + for (int y = y0; y < y1; y++) { + int r = y - it->y; + if (fy) r = f.h - 1 - r; + const uint8_t *p = f.data + rd16(f.rows + 2 * r); + uint16_t *row = band + (y - by0) * SCREEN_W; + int x = 0; + while (x < f.w) { + int skip = p[0], len = p[1]; + p += 2; + x += skip; + for (int k = 0; k < len; k++) { + int sx = x + k; + int dx = it->x + (fx ? f.w - 1 - sx : sx); + if (dx < cx0 || dx >= cx1) continue; + uint16_t c = pal[px_at(p, k, f.bpp)]; + row[dx] = a >= 32 ? c : blend(row[dx], c, a); + } + p += (len * f.bpp + 7) >> 3; + x += len; + } + } +} + +/* one row of a frame, unpacked: index + 1 for each pixel, 0 where clear */ +static void frame_row(const Frame *f, int r, uint8_t *out) { + memset(out, 0, f->w); + const uint8_t *p = f->data + rd16(f->rows + 2 * r); + int x = 0; + while (x < f->w) { + int skip = p[0], len = p[1]; + p += 2; + x += skip; + for (int k = 0; k < len && x + k < f->w; k++) out[x + k] = (uint8_t)(px_at(p, k, f->bpp) + 1); + p += (len * f->bpp + 7) >> 3; + x += len; + } +} + +static void rast_sprite_ex(const Item *it, int by0, int by1) { + Frame f; + if (!frame_get(it->ref, it->sub, &f) || f.w > 640) return; + int y0 = it->y0 > by0 ? it->y0 : by0, y1 = it->y1 < by1 ? it->y1 : by1; + uint32_t a = a32(it->alpha); + uint16_t pal[256]; + for (int k = 0; k < f.ncol; k++) pal[k] = it->color ? it->extra : rd16(f.pal + 2 * k); + int c = gfx_cos((int)it->seed), s = gfx_sin((int)it->seed); + /* inverse: source = R(-angle) (screen - origin) / scale, in 1/1024 */ + static uint8_t rowbuf[640]; + int cached = -1; + for (int y = y0; y < y1; y++) { + uint16_t *row = band + (y - by0) * SCREEN_W; + int dy = y - it->y; + for (int x = it->x0; x < it->x1; x++) { + int dx = x - it->x; + int ux = (dx * c + dy * s), uy = (-dx * s + dy * c); /* x 1024 */ + int sx = (int)((int64_t)ux * 256 / ((int64_t)it->a * 1024)) + f.ox; + int sy = (int)((int64_t)uy * 256 / ((int64_t)it->b * 1024)) + f.oy; + if (ux < 0 && (int64_t)ux * 256 % ((int64_t)it->a * 1024)) sx--; + if (uy < 0 && (int64_t)uy * 256 % ((int64_t)it->b * 1024)) sy--; + if (sx < 0 || sy < 0 || sx >= f.w || sy >= f.h) continue; + if (sy != cached) frame_row(&f, sy, rowbuf), cached = sy; + uint8_t v = rowbuf[sx]; + if (!v) continue; + uint16_t col = pal[v - 1]; + row[x] = a >= 32 ? col : blend(row[x], col, a); + } + } +} + +static void rast_tiles(const Item *it, int by0, int by1) { + const RoomInfo *r = world_room_info(); + if (!r) return; + int y0 = it->y0 > by0 ? it->y0 : by0, y1 = it->y1 < by1 ? it->y1 : by1; + /* only inside the room's rectangle: outside it stays black */ + int rx0 = r->x - it->x, rx1 = r->x + r->w - it->x; + if (rx0 < it->x0) rx0 = it->x0; + if (rx1 > it->x1) rx1 = it->x1; + for (int y = y0; y < y1; y++) { + int wy = it->y + y; + if (wy < r->y || wy >= r->y + r->h) continue; + int gy = wy - r->gy; + if (gy < 0 || gy >= r->grows * 20) continue; + int trow = gy / 20, ty = gy % 20; + uint16_t *row = band + (y - by0) * SCREEN_W; + int x = rx0; + while (x < rx1) { + int wx = it->x + x, gx = wx - r->gx; + int tcol = gx >= 0 ? gx / 20 : -1, tx = gx >= 0 ? gx % 20 : 0; + int n = 20 - tx; + if (x + n > rx1) n = rx1 - x; + uint16_t id = tcol >= 0 && tcol < r->gcols ? rd16(r->grid + 2 * (trow * r->gcols + tcol)) : 0xFFFF; + if (id != 0xFFFF) { + Tile t; + tile_get(id, &t); + if (t.bpp == 0) { + uint16_t c = rd16(t.pal); + for (int k = 0; k < n; k++) row[x + k] = c; + } else { + uint16_t pal[16]; + int nc = t.ncol > 16 ? 16 : t.ncol; + for (int k = 0; k < nc; k++) pal[k] = rd16(t.pal + 2 * k); + int base = ty * 20 + tx; + if (t.bpp == 8) + for (int k = 0; k < n; k++) row[x + k] = rd16(t.pal + 2 * t.bits[base + k]); + else + for (int k = 0; k < n; k++) row[x + k] = pal[px_at(t.bits, base + k, t.bpp)]; + } + } + x += n; + } + } +} + +/* a pseudo-random shake for letter i of a text */ +static int shake_of(uint32_t seed, int i, int axis, int amount) { + uint32_t h = seed * 2654435761u ^ (uint32_t)(i * 2 + axis) * 40503u; + h ^= h >> 13, h *= 0x5bd1e995u, h ^= h >> 15; + return (int)(h % (uint32_t)(2 * amount + 1)) - amount; +} + +static void rast_text(const Item *it, int by0, int by1) { + Font f; + font_get(it->font, &f); + const char *s = pool + it->ref; + int x = it->x, y = it->y; + for (int i = 0; i < it->sub; i++) { + uint8_t ch = (uint8_t)s[i]; + if (ch == '\n') { + x = it->x, y += f.height + 2; + continue; + } + const uint8_t *g = glyph(&f, ch); + if (!g) continue; + int gw = g[1], gh = g[2], gx = x + (int8_t)g[3], gy = y + (int8_t)g[4]; + if (it->a) gx += shake_of(it->seed, i, 0, it->a), gy += shake_of(it->seed, i, 1, it->a); + x += g[0] + it->b; + if (gy >= by1 || gy + gh <= by0) continue; + const uint8_t *bits = f.bits + rd16(g + 6); + int stride = (gw + 7) >> 3; + for (int r = 0; r < gh; r++) { + int yy = gy + r; + if (yy < by0 || yy >= by1 || yy < it->y0 || yy >= it->y1) continue; + uint16_t *row = band + (yy - by0) * SCREEN_W; + const uint8_t *b = bits + r * stride; + for (int c = 0; c < gw; c++) + if (b[c >> 3] & (0x80 >> (c & 7))) { + int xx = gx + c; + if (xx >= it->cx0 && xx < it->cx1 && xx >= 0 && xx < SCREEN_W) row[xx] = it->color; + } + } + } +} + +static void rast_line(const Item *it, int by0, int by1) { + int x0 = it->x, y0 = it->y, x1 = it->a, y1 = it->b; + int dx = x1 > x0 ? x1 - x0 : x0 - x1, dy = y1 > y0 ? y0 - y1 : y1 - y0; + int sx = x0 < x1 ? 1 : -1, sy = y0 < y1 ? 1 : -1, err = dx + dy; + for (;;) { + if (y0 >= by0 && y0 < by1 && x0 >= it->x0 && x0 < it->x1 && y0 >= it->y0 && y0 < it->y1) band[(y0 - by0) * SCREEN_W + x0] = it->color; + if (x0 == x1 && y0 == y1) break; + int e2 = 2 * err; + if (e2 >= dy) err += dy, x0 += sx; + if (e2 <= dx) err += dx, y0 += sy; + } +} + +static void rast_circle(const Item *it, int by0, int by1) { + int y0 = it->y0 > by0 ? it->y0 : by0, y1 = it->y1 < by1 ? it->y1 : by1; + int r = it->a; + uint32_t a = a32(it->alpha); + for (int y = y0; y < y1; y++) { + int dy = y - it->y, w = 0; + while ((w + 1) * (w + 1) + dy * dy <= r * r + r) w++; + if (dy * dy > r * r + r) continue; + int xa = it->x - w, xb = it->x + w + 1; + if (xa < it->x0) xa = it->x0; + if (xb > it->x1) xb = it->x1; + uint16_t *row = band + (y - by0) * SCREEN_W; + for (int x = xa; x < xb; x++) row[x] = a >= 32 ? it->color : blend(row[x], it->color, a); + } +} + +void gfx_end(void) { + gfx_dropped = dropped_now; + if (!band) return; + for (int by0 = 0; by0 < SCREEN_H; by0 += GFX_BAND) { + int by1 = by0 + GFX_BAND; + memset(band, 0, sizeof(uint16_t) * SCREEN_W * GFX_BAND); + for (int i = 0; i < nitems; i++) { + const Item *it = &items[i]; + if (it->y1 <= by0 || it->y0 >= by1) continue; + switch (it->kind) { + case I_RECT: rast_rect(it, by0, by1); break; + case I_SPRITE: rast_sprite(it, by0, by1); break; + case I_SPRITE_EX: rast_sprite_ex(it, by0, by1); break; + case I_TILES: rast_tiles(it, by0, by1); break; + case I_TEXT: rast_text(it, by0, by1); break; + case I_LINE: rast_line(it, by0, by1); break; + case I_CIRCLE: rast_circle(it, by0, by1); break; + } + } + plat_push(0, by0, SCREEN_W, GFX_BAND, band); + } +} diff --git a/games/undertale/src/gfx.h b/games/undertale/src/gfx.h new file mode 100644 index 00000000..6ab55d10 --- /dev/null +++ b/games/undertale/src/gfx.h @@ -0,0 +1,61 @@ +/* Undertale: drawing. + * + * A frame is a draw list, rasterised band by band (the calculator has no + * frame buffer) and pushed to the screen. Commands are in screen pixels and + * painted in the order given. The game draws at the original's 320 x 240, + * the calculator's own size: one of the game's pixels is one of the screen's. */ +#ifndef UT_GFX_H +#define UT_GFX_H +#include +#include +#include "plat.h" + +static inline uint16_t rgb565(uint32_t rgb) { /* 0xRRGGBB */ + return (uint16_t)(((rgb >> 8) & 0xF800) | ((rgb >> 5) & 0x07E0) | ((rgb >> 3) & 0x001F)); +} +#define C_BLACK 0x0000 +#define C_WHITE 0xFFFF +#define C_RED 0xF800 +#define C_YELLOW 0xFFE0 + +enum { GFX_FLIPX = 1, GFX_FLIPY = 2 }; + +#define GFX_BAND 16 /* screen rows rasterised at a time */ +#define GFX_MAX_ITEMS 400 /* commands in a frame (more are dropped) */ +#define GFX_TEXT_POOL 1536 /* bytes of text in a frame */ + +/* the band: SCREEN_W * GFX_BAND pixels, the caller's (main's stack on the calculator) */ +void gfx_set_band_memory(uint16_t *px); +void gfx_begin(void); +void gfx_end(void); +/* later commands draw only inside this screen rectangle (gfx_clip_all(): all of it) */ +void gfx_clip(int x, int y, int w, int h); +void gfx_clip_all(void); + +void gfx_rect(int x, int y, int w, int h, uint16_t color, uint8_t alpha); /* alpha 0 (none) to 255 */ +void gfx_frame_rect(int x, int y, int w, int h, int t, uint16_t color); /* an outline t pixels thick */ +/* frame i of sprite s (SPR_* in data.h), its origin at (x, y); alpha 255 opaque */ +void gfx_sprite(uint16_t s, int i, int x, int y, uint8_t flags, uint8_t alpha); +/* the same, every opaque pixel in one colour (a flash, a silhouette) */ +void gfx_sprite_color(uint16_t s, int i, int x, int y, uint8_t flags, uint16_t color, uint8_t alpha); +/* the same, scaled (fixed point 8.8, 256 = 1) around its origin, and turned by angle (0-255 for a turn) */ +void gfx_sprite_ex(uint16_t s, int i, int x, int y, int scale_x, int scale_y, int angle, uint16_t color, uint8_t alpha); +/* the room's tiles (world.c gives them), its world point (wx, wy) at the screen's top-left */ +void gfx_tiles(int wx, int wy); +/* text in a font (FONT_* in data.h), its top-left at (x, y); returns its width. '\n' starts a line */ +int gfx_text(int font, int x, int y, const char *s, uint16_t color, uint8_t alpha); +/* the same, each letter shaken by up to `shake` pixels (the game's shaking text), seeded */ +int gfx_text_ex(int font, int x, int y, const char *s, int n, uint16_t color, int shake, uint32_t seed, int spacing); +int gfx_text_width(int font, const char *s, int n); +int font_height(int font); +/* a line one pixel wide */ +void gfx_line(int x0, int y0, int x1, int y1, uint16_t color); +/* sine and cosine of a in 1/256 turns, in 1/1024 */ +int gfx_sin(int a); +int gfx_cos(int a); +/* a solid circle */ +void gfx_circle(int cx, int cy, int r, uint16_t color, uint8_t alpha); + +/* how many commands the last frame dropped */ +extern int gfx_dropped; +#endif diff --git a/games/undertale/src/items.c b/games/undertale/src/items.c new file mode 100644 index 00000000..d04be764 --- /dev/null +++ b/games/undertale/src/items.c @@ -0,0 +1,98 @@ +/* Items: what they are and what using one does (items.h). Their texts are the game's. */ +#include +#include +#include "game.h" +#include "items.h" + +static const ItemInfo items[ITEM_COUNT] = { + [ITEM_NONE] = {"", "", IT_SPECIAL, 0, 0, 0, "", "", 0}, + [ITEM_MONSTER_CANDY] = {"Monster Candy", "MnstrCndy", IT_FOOD, 10, 0, 0, "Has a distinct,\n non-licorice flavor.", + "* You ate the Monster Candy.\n* Very un-licorice-like.", 25}, + [ITEM_STICK] = {"Stick", "Stick", IT_WEAPON, 0, 0, 0, "Its bark is worse than\n its bite.", + "* You threw the stick away.\n* Then picked it back up.", 150}, + [ITEM_BANDAGE] = {"Bandage", "Bandage", IT_ARMOR, 10, 0, 0, "It has already been used\n several times.", + "* You re-applied the bandage.\n* Still kind of gooey.", 150}, + [ITEM_SPIDER_DONUT] = {"Spider Donut", "SpidrDont", IT_FOOD, 12, 0, 0, "A donut made with Spider\n Cider in the batter.", + "* You ate the Spider Donut.", 30}, + [ITEM_SPIDER_CIDER] = {"Spider Cider", "SpidrCidr", IT_FOOD, 24, 0, 0, "Made with whole spiders,\n not just the juice.", + "* You drank the Spider Cider.", 60}, + [ITEM_BUTTERSCOTCH_PIE] = {"Butterscotch Pie", "ButtsPie", IT_FOOD, 999, 0, 0, "Butterscotch-cinnamon\n pie, one slice.", + "* You ate the Butterscotch\n Pie.", 180}, + [ITEM_SNAIL_PIE] = {"Snail Pie", "SnailPie", IT_FOOD, 998, 0, 0, "An acquired taste.", + "* You ate the Snail Pie.\n* Your HP was maxed. Almost.", 350}, + [ITEM_FADED_RIBBON] = {"Faded Ribbon", "Ribbon", IT_ARMOR, 0, 0, 3, "If you're cuter, monsters\n won't hit you as hard.", "", 0}, + [ITEM_TOY_KNIFE] = {"Toy Knife", "Toy Knife", IT_WEAPON, 0, 3, 0, "Made of plastic.\n* A rarity nowadays.", "", 100}, +}; + +const ItemInfo *item_info(int id) { return &items[id >= 0 && id < ITEM_COUNT ? id : 0]; } + +void item_info_text(int id, char *out, int cap) { + const ItemInfo *it = item_info(id); + switch (it->type) { + case IT_WEAPON: snprintf(out, (size_t)cap, "* \"%s\" - Weapon AT %d\n* %s", it->name, it->at, it->info); break; + case IT_ARMOR: + if (id == ITEM_BANDAGE) snprintf(out, (size_t)cap, "* \"%s\" - Heals %d HP\n* %s", it->name, it->heal, it->info); + else snprintf(out, (size_t)cap, "* \"%s\" - Armor DF %d\n* %s", it->name, it->df, it->info); + break; + default: + if (it->heal >= 998) snprintf(out, (size_t)cap, "* \"%s\" - Heals ALL HP\n* %s", it->name, it->info); + else snprintf(out, (size_t)cap, "* \"%s\" - Heals %d HP\n* %s", it->name, it->heal, it->info); + break; + } +} + +/* heals and says so: "You recovered N HP!" or "Your HP was maxed out." */ +static int heal(int n, char *out, int cap) { + int before = sv.hp; + sv.hp = (int16_t)min_i(sv.maxhp, sv.hp + n); + if (sv.hp >= sv.maxhp) return snprintf(out, (size_t)cap, "\n* Your HP was maxed out."); + return snprintf(out, (size_t)cap, "\n* You recovered %d HP!", sv.hp - before); +} + +void item_use(int slot, char *out, int cap, int in_battle) { + int id = sv.items[slot]; + const ItemInfo *it = item_info(id); + out[0] = 0; + switch (it->type) { + case IT_WEAPON: { + if (id == ITEM_STICK) { + snprintf(out, (size_t)cap, "%s", it->use); + return; + } + int old = sv.weapon; + sv.weapon = (uint8_t)id; + sv.items[slot] = (uint8_t)(old == ITEM_STICK ? 0 : old); + if (!sv.items[slot]) item_remove_at(slot); + snprintf(out, (size_t)cap, "* You equipped the %s.", it->name); + return; + } + case IT_ARMOR: + if (id == ITEM_BANDAGE && sv.armor != ITEM_BANDAGE) { + int n = snprintf(out, (size_t)cap, "%s", it->use); + item_remove_at(slot); + heal(it->heal, out + n, cap - n); + return; + } else { + int old = sv.armor; + sv.armor = (uint8_t)id; + sv.items[slot] = (uint8_t)old; + if (!old) item_remove_at(slot); + snprintf(out, (size_t)cap, "* You equipped the %s.", it->name); + return; + } + default: { + int n = snprintf(out, (size_t)cap, "%s", it->use); + item_remove_at(slot); + if (it->heal >= 999) { + sv.hp = sv.maxhp; + snprintf(out + n, (size_t)(cap - n), "\n* Your HP was maxed out."); + } else if (it->heal == 998) { + if (sv.hp < sv.maxhp - 1) sv.hp = (int16_t)(sv.maxhp - 1); + } else { + heal(it->heal, out + n, cap - n); + } + (void)in_battle; + return; + } + } +} diff --git a/games/undertale/src/items.h b/games/undertale/src/items.h new file mode 100644 index 00000000..701691da --- /dev/null +++ b/games/undertale/src/items.h @@ -0,0 +1,35 @@ +/* Undertale: items (the game's ids are kept where it has them, for the record). */ +#ifndef UT_ITEMS_H +#define UT_ITEMS_H +#include + +enum { + ITEM_NONE, + ITEM_MONSTER_CANDY, + ITEM_STICK, + ITEM_BANDAGE, + ITEM_SPIDER_DONUT, + ITEM_SPIDER_CIDER, + ITEM_BUTTERSCOTCH_PIE, + ITEM_SNAIL_PIE, + ITEM_FADED_RIBBON, + ITEM_TOY_KNIFE, + ITEM_COUNT +}; +enum { IT_FOOD, IT_WEAPON, IT_ARMOR, IT_SPECIAL }; + +typedef struct { + const char *name; /* in the menu */ + const char *short_name; /* in battle, 9 letters at most */ + uint8_t type; + int16_t heal; /* HP, 999 all of it */ + uint8_t at, df; + const char *info; /* what Info says after its name */ + const char *use; /* what eating it says (before the HP) */ + uint16_t sell; +} ItemInfo; +const ItemInfo *item_info(int id); +/* uses the item in slot (the inventory's): fills `out` with what to say; in battle or not */ +void item_use(int slot, char *out, int cap, int in_battle); +void item_info_text(int id, char *out, int cap); +#endif diff --git a/games/undertale/src/lzma/7zTypes.h b/games/undertale/src/lzma/7zTypes.h new file mode 100644 index 00000000..4977cdaa --- /dev/null +++ b/games/undertale/src/lzma/7zTypes.h @@ -0,0 +1,374 @@ +/* 7zTypes.h -- Basic types +2017-07-17 : Igor Pavlov : Public domain */ + +#ifndef __7Z_TYPES_H +#define __7Z_TYPES_H + +#ifdef _WIN32 +/* #include */ +#endif + +#include + +#ifndef EXTERN_C_BEGIN +#ifdef __cplusplus +#define EXTERN_C_BEGIN extern "C" { +#define EXTERN_C_END } +#else +#define EXTERN_C_BEGIN +#define EXTERN_C_END +#endif +#endif + +EXTERN_C_BEGIN + +#define SZ_OK 0 + +#define SZ_ERROR_DATA 1 +#define SZ_ERROR_MEM 2 +#define SZ_ERROR_CRC 3 +#define SZ_ERROR_UNSUPPORTED 4 +#define SZ_ERROR_PARAM 5 +#define SZ_ERROR_INPUT_EOF 6 +#define SZ_ERROR_OUTPUT_EOF 7 +#define SZ_ERROR_READ 8 +#define SZ_ERROR_WRITE 9 +#define SZ_ERROR_PROGRESS 10 +#define SZ_ERROR_FAIL 11 +#define SZ_ERROR_THREAD 12 + +#define SZ_ERROR_ARCHIVE 16 +#define SZ_ERROR_NO_ARCHIVE 17 + +typedef int SRes; + + +#ifdef _WIN32 + +/* typedef DWORD WRes; */ +typedef unsigned WRes; +#define MY_SRes_HRESULT_FROM_WRes(x) HRESULT_FROM_WIN32(x) + +#else + +typedef int WRes; +#define MY__FACILITY_WIN32 7 +#define MY__FACILITY__WRes MY__FACILITY_WIN32 +#define MY_SRes_HRESULT_FROM_WRes(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (MY__FACILITY__WRes << 16) | 0x80000000))) + +#endif + + +#ifndef RINOK +#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } +#endif + +typedef unsigned char Byte; +typedef short Int16; +typedef unsigned short UInt16; + +#ifdef _LZMA_UINT32_IS_ULONG +typedef long Int32; +typedef unsigned long UInt32; +#else +typedef int Int32; +typedef unsigned int UInt32; +#endif + +#ifdef _SZ_NO_INT_64 + +/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. + NOTES: Some code will work incorrectly in that case! */ + +typedef long Int64; +typedef unsigned long UInt64; + +#else + +#if defined(_MSC_VER) || defined(__BORLANDC__) +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#define UINT64_CONST(n) n +#else +typedef long long int Int64; +typedef unsigned long long int UInt64; +#define UINT64_CONST(n) n ## ULL +#endif + +#endif + +#ifdef _LZMA_NO_SYSTEM_SIZE_T +typedef UInt32 SizeT; +#else +typedef size_t SizeT; +#endif + +typedef int Bool; +#define True 1 +#define False 0 + + +#ifdef _WIN32 +#define MY_STD_CALL __stdcall +#else +#define MY_STD_CALL +#endif + +#ifdef _MSC_VER + +#if _MSC_VER >= 1300 +#define MY_NO_INLINE __declspec(noinline) +#else +#define MY_NO_INLINE +#endif + +#define MY_FORCE_INLINE __forceinline + +#define MY_CDECL __cdecl +#define MY_FAST_CALL __fastcall + +#else + +#define MY_NO_INLINE +#define MY_FORCE_INLINE +#define MY_CDECL +#define MY_FAST_CALL + +/* inline keyword : for C++ / C99 */ + +/* GCC, clang: */ +/* +#if defined (__GNUC__) && (__GNUC__ >= 4) +#define MY_FORCE_INLINE __attribute__((always_inline)) +#define MY_NO_INLINE __attribute__((noinline)) +#endif +*/ + +#endif + + +/* The following interfaces use first parameter as pointer to structure */ + +typedef struct IByteIn IByteIn; +struct IByteIn +{ + Byte (*Read)(const IByteIn *p); /* reads one byte, returns 0 in case of EOF or error */ +}; +#define IByteIn_Read(p) (p)->Read(p) + + +typedef struct IByteOut IByteOut; +struct IByteOut +{ + void (*Write)(const IByteOut *p, Byte b); +}; +#define IByteOut_Write(p, b) (p)->Write(p, b) + + +typedef struct ISeqInStream ISeqInStream; +struct ISeqInStream +{ + SRes (*Read)(const ISeqInStream *p, void *buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) < input(*size)) is allowed */ +}; +#define ISeqInStream_Read(p, buf, size) (p)->Read(p, buf, size) + +/* it can return SZ_ERROR_INPUT_EOF */ +SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size); +SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType); +SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf); + + +typedef struct ISeqOutStream ISeqOutStream; +struct ISeqOutStream +{ + size_t (*Write)(const ISeqOutStream *p, const void *buf, size_t size); + /* Returns: result - the number of actually written bytes. + (result < size) means error */ +}; +#define ISeqOutStream_Write(p, buf, size) (p)->Write(p, buf, size) + +typedef enum +{ + SZ_SEEK_SET = 0, + SZ_SEEK_CUR = 1, + SZ_SEEK_END = 2 +} ESzSeek; + + +typedef struct ISeekInStream ISeekInStream; +struct ISeekInStream +{ + SRes (*Read)(const ISeekInStream *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ + SRes (*Seek)(const ISeekInStream *p, Int64 *pos, ESzSeek origin); +}; +#define ISeekInStream_Read(p, buf, size) (p)->Read(p, buf, size) +#define ISeekInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin) + + +typedef struct ILookInStream ILookInStream; +struct ILookInStream +{ + SRes (*Look)(const ILookInStream *p, const void **buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) > input(*size)) is not allowed + (output(*size) < input(*size)) is allowed */ + SRes (*Skip)(const ILookInStream *p, size_t offset); + /* offset must be <= output(*size) of Look */ + + SRes (*Read)(const ILookInStream *p, void *buf, size_t *size); + /* reads directly (without buffer). It's same as ISeqInStream::Read */ + SRes (*Seek)(const ILookInStream *p, Int64 *pos, ESzSeek origin); +}; + +#define ILookInStream_Look(p, buf, size) (p)->Look(p, buf, size) +#define ILookInStream_Skip(p, offset) (p)->Skip(p, offset) +#define ILookInStream_Read(p, buf, size) (p)->Read(p, buf, size) +#define ILookInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin) + + +SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size); +SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset); + +/* reads via ILookInStream::Read */ +SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType); +SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size); + + + +typedef struct +{ + ILookInStream vt; + const ISeekInStream *realStream; + + size_t pos; + size_t size; /* it's data size */ + + /* the following variables must be set outside */ + Byte *buf; + size_t bufSize; +} CLookToRead2; + +void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead); + +#define LookToRead2_Init(p) { (p)->pos = (p)->size = 0; } + + +typedef struct +{ + ISeqInStream vt; + const ILookInStream *realStream; +} CSecToLook; + +void SecToLook_CreateVTable(CSecToLook *p); + + + +typedef struct +{ + ISeqInStream vt; + const ILookInStream *realStream; +} CSecToRead; + +void SecToRead_CreateVTable(CSecToRead *p); + + +typedef struct ICompressProgress ICompressProgress; + +struct ICompressProgress +{ + SRes (*Progress)(const ICompressProgress *p, UInt64 inSize, UInt64 outSize); + /* Returns: result. (result != SZ_OK) means break. + Value (UInt64)(Int64)-1 for size means unknown value. */ +}; +#define ICompressProgress_Progress(p, inSize, outSize) (p)->Progress(p, inSize, outSize) + + + +typedef struct ISzAlloc ISzAlloc; +typedef const ISzAlloc * ISzAllocPtr; + +struct ISzAlloc +{ + void *(*Alloc)(ISzAllocPtr p, size_t size); + void (*Free)(ISzAllocPtr p, void *address); /* address can be 0 */ +}; + +#define ISzAlloc_Alloc(p, size) (p)->Alloc(p, size) +#define ISzAlloc_Free(p, a) (p)->Free(p, a) + +/* deprecated */ +#define IAlloc_Alloc(p, size) ISzAlloc_Alloc(p, size) +#define IAlloc_Free(p, a) ISzAlloc_Free(p, a) + + + + + +#ifndef MY_offsetof + #ifdef offsetof + #define MY_offsetof(type, m) offsetof(type, m) + /* + #define MY_offsetof(type, m) FIELD_OFFSET(type, m) + */ + #else + #define MY_offsetof(type, m) ((size_t)&(((type *)0)->m)) + #endif +#endif + + + +#ifndef MY_container_of + +/* +#define MY_container_of(ptr, type, m) container_of(ptr, type, m) +#define MY_container_of(ptr, type, m) CONTAINING_RECORD(ptr, type, m) +#define MY_container_of(ptr, type, m) ((type *)((char *)(ptr) - offsetof(type, m))) +#define MY_container_of(ptr, type, m) (&((type *)0)->m == (ptr), ((type *)(((char *)(ptr)) - MY_offsetof(type, m)))) +*/ + +/* + GCC shows warning: "perhaps the 'offsetof' macro was used incorrectly" + GCC 3.4.4 : classes with constructor + GCC 4.8.1 : classes with non-public variable members" +*/ + +#define MY_container_of(ptr, type, m) ((type *)((char *)(1 ? (ptr) : &((type *)0)->m) - MY_offsetof(type, m))) + + +#endif + +#define CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ((type *)(ptr)) + +/* +#define CONTAINER_FROM_VTBL(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) +*/ +#define CONTAINER_FROM_VTBL(ptr, type, m) MY_container_of(ptr, type, m) + +#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) +/* +#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL(ptr, type, m) +*/ + + + +#ifdef _WIN32 + +#define CHAR_PATH_SEPARATOR '\\' +#define WCHAR_PATH_SEPARATOR L'\\' +#define STRING_PATH_SEPARATOR "\\" +#define WSTRING_PATH_SEPARATOR L"\\" + +#else + +#define CHAR_PATH_SEPARATOR '/' +#define WCHAR_PATH_SEPARATOR L'/' +#define STRING_PATH_SEPARATOR "/" +#define WSTRING_PATH_SEPARATOR L"/" + +#endif + +EXTERN_C_END + +#endif diff --git a/games/undertale/src/lzma/LzmaDec.c b/games/undertale/src/lzma/LzmaDec.c new file mode 100644 index 00000000..962b94bb --- /dev/null +++ b/games/undertale/src/lzma/LzmaDec.c @@ -0,0 +1,1185 @@ +/* LzmaDec.c -- LZMA Decoder +2018-02-28 : Igor Pavlov : Public domain */ + +#include "Precomp.h" + +/* #include "CpuArch.h" */ +#include "LzmaDec.h" + +#include + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +#define RC_INIT_SIZE 5 + +#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); +#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ + { UPDATE_0(p); i = (i + i); A0; } else \ + { UPDATE_1(p); i = (i + i) + 1; A1; } + +#define TREE_GET_BIT(probs, i) { GET_BIT2(probs + i, i, ;, ;); } + +#define REV_BIT(p, i, A0, A1) IF_BIT_0(p + i) \ + { UPDATE_0(p + i); A0; } else \ + { UPDATE_1(p + i); A1; } +#define REV_BIT_VAR( p, i, m) REV_BIT(p, i, i += m; m += m, m += m; i += m; ) +#define REV_BIT_CONST(p, i, m) REV_BIT(p, i, i += m; , i += m * 2; ) +#define REV_BIT_LAST( p, i, m) REV_BIT(p, i, i -= m , ; ) + +#define TREE_DECODE(probs, limit, i) \ + { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } + +/* #define _LZMA_SIZE_OPT */ + +#ifdef _LZMA_SIZE_OPT +#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) +#else +#define TREE_6_DECODE(probs, i) \ + { i = 1; \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + i -= 0x40; } +#endif + +#define NORMAL_LITER_DEC TREE_GET_BIT(prob, symbol) +#define MATCHED_LITER_DEC \ + matchByte += matchByte; \ + bit = offs; \ + offs &= matchByte; \ + probLit = prob + (offs + bit + symbol); \ + GET_BIT2(probLit, symbol, offs ^= bit; , ;) + + + +#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0_CHECK range = bound; +#define UPDATE_1_CHECK range -= bound; code -= bound; +#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ + { UPDATE_0_CHECK; i = (i + i); A0; } else \ + { UPDATE_1_CHECK; i = (i + i) + 1; A1; } +#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) +#define TREE_DECODE_CHECK(probs, limit, i) \ + { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } + + +#define REV_BIT_CHECK(p, i, m) IF_BIT_0_CHECK(p + i) \ + { UPDATE_0_CHECK; i += m; m += m; } else \ + { UPDATE_1_CHECK; m += m; i += m; } + + +#define kNumPosBitsMax 4 +#define kNumPosStatesMax (1 << kNumPosBitsMax) + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define LenLow 0 +#define LenHigh (LenLow + 2 * (kNumPosStatesMax << kLenNumLowBits)) +#define kNumLenProbs (LenHigh + kLenNumHighSymbols) + +#define LenChoice LenLow +#define LenChoice2 (LenLow + (1 << kLenNumLowBits)) + +#define kNumStates 12 +#define kNumStates2 16 +#define kNumLitStates 7 + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + +#define kNumPosSlotBits 6 +#define kNumLenToPosStates 4 + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) + +#define kMatchMinLen 2 +#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols * 2 + kLenNumHighSymbols) + +/* External ASM code needs same CLzmaProb array layout. So don't change it. */ + +/* (probs_1664) is faster and better for code size at some platforms */ +/* +#ifdef MY_CPU_X86_OR_AMD64 +*/ +#define kStartOffset 1664 +#define GET_PROBS p->probs_1664 +/* +#define GET_PROBS p->probs + kStartOffset +#else +#define kStartOffset 0 +#define GET_PROBS p->probs +#endif +*/ + +#define SpecPos (-kStartOffset) +#define IsRep0Long (SpecPos + kNumFullDistances) +#define RepLenCoder (IsRep0Long + (kNumStates2 << kNumPosBitsMax)) +#define LenCoder (RepLenCoder + kNumLenProbs) +#define IsMatch (LenCoder + kNumLenProbs) +#define Align (IsMatch + (kNumStates2 << kNumPosBitsMax)) +#define IsRep (Align + kAlignTableSize) +#define IsRepG0 (IsRep + kNumStates) +#define IsRepG1 (IsRepG0 + kNumStates) +#define IsRepG2 (IsRepG1 + kNumStates) +#define PosSlot (IsRepG2 + kNumStates) +#define Literal (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) +#define NUM_BASE_PROBS (Literal + kStartOffset) + +#if Align != 0 && kStartOffset != 0 + #error Stop_Compiling_Bad_LZMA_kAlign +#endif + +#if NUM_BASE_PROBS != 1984 + #error Stop_Compiling_Bad_LZMA_PROBS +#endif + + +#define LZMA_LIT_SIZE 0x300 + +#define LzmaProps_GetNumProbs(p) (NUM_BASE_PROBS + ((UInt32)LZMA_LIT_SIZE << ((p)->lc + (p)->lp))) + + +#define CALC_POS_STATE(processedPos, pbMask) (((processedPos) & (pbMask)) << 4) +#define COMBINED_PS_STATE (posState + state) +#define GET_LEN_STATE (posState) + +#define LZMA_DIC_MIN (1 << 12) + +/* +p->remainLen : shows status of LZMA decoder: + < kMatchSpecLenStart : normal remain + = kMatchSpecLenStart : finished + = kMatchSpecLenStart + 1 : need init range coder + = kMatchSpecLenStart + 2 : need init range coder and state +*/ + +/* ---------- LZMA_DECODE_REAL ---------- */ +/* +LzmaDec_DecodeReal_3() can be implemented in external ASM file. +3 - is the code compatibility version of that function for check at link time. +*/ + +#define LZMA_DECODE_REAL LzmaDec_DecodeReal_3 + +/* +LZMA_DECODE_REAL() +In: + RangeCoder is normalized + if (p->dicPos == limit) + { + LzmaDec_TryDummy() was called before to exclude LITERAL and MATCH-REP cases. + So first symbol can be only MATCH-NON-REP. And if that MATCH-NON-REP symbol + is not END_OF_PAYALOAD_MARKER, then function returns error code. + } + +Processing: + first LZMA symbol will be decoded in any case + All checks for limits are at the end of main loop, + It will decode new LZMA-symbols while (p->buf < bufLimit && dicPos < limit), + RangeCoder is still without last normalization when (p->buf < bufLimit) is being checked. + +Out: + RangeCoder is normalized + Result: + SZ_OK - OK + SZ_ERROR_DATA - Error + p->remainLen: + < kMatchSpecLenStart : normal remain + = kMatchSpecLenStart : finished +*/ + + +#ifdef _LZMA_DEC_OPT + +int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit); + +#else + +static +int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + CLzmaProb *probs = GET_PROBS; + unsigned state = (unsigned)p->state; + UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3]; + unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1; + unsigned lc = p->prop.lc; + unsigned lpMask = ((unsigned)0x100 << p->prop.lp) - ((unsigned)0x100 >> lc); + + Byte *dic = p->dic; + SizeT dicBufSize = p->dicBufSize; + SizeT dicPos = p->dicPos; + + UInt32 processedPos = p->processedPos; + UInt32 checkDicSize = p->checkDicSize; + unsigned len = 0; + + const Byte *buf = p->buf; + UInt32 range = p->range; + UInt32 code = p->code; + + do + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = CALC_POS_STATE(processedPos, pbMask); + + prob = probs + IsMatch + COMBINED_PS_STATE; + IF_BIT_0(prob) + { + unsigned symbol; + UPDATE_0(prob); + prob = probs + Literal; + if (processedPos != 0 || checkDicSize != 0) + prob += (UInt32)3 * ((((processedPos << 8) + dic[(dicPos == 0 ? dicBufSize : dicPos) - 1]) & lpMask) << lc); + processedPos++; + + if (state < kNumLitStates) + { + state -= (state < 4) ? state : 3; + symbol = 1; + #ifdef _LZMA_SIZE_OPT + do { NORMAL_LITER_DEC } while (symbol < 0x100); + #else + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + #endif + } + else + { + unsigned matchByte = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)]; + unsigned offs = 0x100; + state -= (state < 10) ? 3 : 6; + symbol = 1; + #ifdef _LZMA_SIZE_OPT + do + { + unsigned bit; + CLzmaProb *probLit; + MATCHED_LITER_DEC + } + while (symbol < 0x100); + #else + { + unsigned bit; + CLzmaProb *probLit; + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + } + #endif + } + + dic[dicPos++] = (Byte)symbol; + continue; + } + + { + UPDATE_1(prob); + prob = probs + IsRep + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + state += kNumStates; + prob = probs + LenCoder; + } + else + { + UPDATE_1(prob); + /* + // that case was checked before with kBadRepCode + if (checkDicSize == 0 && processedPos == 0) + return SZ_ERROR_DATA; + */ + prob = probs + IsRepG0 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + prob = probs + IsRep0Long + COMBINED_PS_STATE; + IF_BIT_0(prob) + { + UPDATE_0(prob); + dic[dicPos] = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)]; + dicPos++; + processedPos++; + state = state < kNumLitStates ? 9 : 11; + continue; + } + UPDATE_1(prob); + } + else + { + UInt32 distance; + UPDATE_1(prob); + prob = probs + IsRepG1 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep1; + } + else + { + UPDATE_1(prob); + prob = probs + IsRepG2 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep2; + } + else + { + UPDATE_1(prob); + distance = rep3; + rep3 = rep2; + } + rep2 = rep1; + } + rep1 = rep0; + rep0 = distance; + } + state = state < kNumLitStates ? 8 : 11; + prob = probs + RepLenCoder; + } + + #ifdef _LZMA_SIZE_OPT + { + unsigned lim, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + GET_LEN_STATE; + offset = 0; + lim = (1 << kLenNumLowBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); + offset = kLenNumLowSymbols; + lim = (1 << kLenNumLowBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenHigh; + offset = kLenNumLowSymbols * 2; + lim = (1 << kLenNumHighBits); + } + } + TREE_DECODE(probLen, lim, len); + len += offset; + } + #else + { + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + GET_LEN_STATE; + len = 1; + TREE_GET_BIT(probLen, len); + TREE_GET_BIT(probLen, len); + TREE_GET_BIT(probLen, len); + len -= 8; + } + else + { + UPDATE_1(probLen); + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); + len = 1; + TREE_GET_BIT(probLen, len); + TREE_GET_BIT(probLen, len); + TREE_GET_BIT(probLen, len); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenHigh; + TREE_DECODE(probLen, (1 << kLenNumHighBits), len); + len += kLenNumLowSymbols * 2; + } + } + } + #endif + + if (state >= kNumStates) + { + UInt32 distance; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); + TREE_6_DECODE(prob, distance); + if (distance >= kStartPosModelIndex) + { + unsigned posSlot = (unsigned)distance; + unsigned numDirectBits = (unsigned)(((distance >> 1) - 1)); + distance = (2 | (distance & 1)); + if (posSlot < kEndPosModelIndex) + { + distance <<= numDirectBits; + prob = probs + SpecPos; + { + UInt32 m = 1; + distance++; + do + { + REV_BIT_VAR(prob, distance, m); + } + while (--numDirectBits); + distance -= m; + } + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE + range >>= 1; + + { + UInt32 t; + code -= range; + t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */ + distance = (distance << 1) + (t + 1); + code += range & t; + } + /* + distance <<= 1; + if (code >= range) + { + code -= range; + distance |= 1; + } + */ + } + while (--numDirectBits); + prob = probs + Align; + distance <<= kNumAlignBits; + { + unsigned i = 1; + REV_BIT_CONST(prob, i, 1); + REV_BIT_CONST(prob, i, 2); + REV_BIT_CONST(prob, i, 4); + REV_BIT_LAST (prob, i, 8); + distance |= i; + } + if (distance == (UInt32)0xFFFFFFFF) + { + len = kMatchSpecLenStart; + state -= kNumStates; + break; + } + } + } + + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + rep0 = distance + 1; + state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3; + if (distance >= (checkDicSize == 0 ? processedPos: checkDicSize)) + { + p->dicPos = dicPos; + return SZ_ERROR_DATA; + } + } + + len += kMatchMinLen; + + { + SizeT rem; + unsigned curLen; + SizeT pos; + + if ((rem = limit - dicPos) == 0) + { + p->dicPos = dicPos; + return SZ_ERROR_DATA; + } + + curLen = ((rem < len) ? (unsigned)rem : len); + pos = dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0); + + processedPos += curLen; + + len -= curLen; + if (curLen <= dicBufSize - pos) + { + Byte *dest = dic + dicPos; + ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos; + const Byte *lim = dest + curLen; + dicPos += curLen; + do + *(dest) = (Byte)*(dest + src); + while (++dest != lim); + } + else + { + do + { + dic[dicPos++] = dic[pos]; + if (++pos == dicBufSize) + pos = 0; + } + while (--curLen != 0); + } + } + } + } + while (dicPos < limit && buf < bufLimit); + + NORMALIZE; + + p->buf = buf; + p->range = range; + p->code = code; + p->remainLen = len; + p->dicPos = dicPos; + p->processedPos = processedPos; + p->reps[0] = rep0; + p->reps[1] = rep1; + p->reps[2] = rep2; + p->reps[3] = rep3; + p->state = state; + + return SZ_OK; +} +#endif + +static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) +{ + if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart) + { + Byte *dic = p->dic; + SizeT dicPos = p->dicPos; + SizeT dicBufSize = p->dicBufSize; + unsigned len = (unsigned)p->remainLen; + SizeT rep0 = p->reps[0]; /* we use SizeT to avoid the BUG of VC14 for AMD64 */ + SizeT rem = limit - dicPos; + if (rem < len) + len = (unsigned)(rem); + + if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len) + p->checkDicSize = p->prop.dicSize; + + p->processedPos += len; + p->remainLen -= len; + while (len != 0) + { + len--; + dic[dicPos] = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)]; + dicPos++; + } + p->dicPos = dicPos; + } +} + + +#define kRange0 0xFFFFFFFF +#define kBound0 ((kRange0 >> kNumBitModelTotalBits) << (kNumBitModelTotalBits - 1)) +#define kBadRepCode (kBound0 + (((kRange0 - kBound0) >> kNumBitModelTotalBits) << (kNumBitModelTotalBits - 1))) +#if kBadRepCode != (0xC0000000 - 0x400) + #error Stop_Compiling_Bad_LZMA_Check +#endif + +static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + do + { + SizeT limit2 = limit; + if (p->checkDicSize == 0) + { + UInt32 rem = p->prop.dicSize - p->processedPos; + if (limit - p->dicPos > rem) + limit2 = p->dicPos + rem; + + if (p->processedPos == 0) + if (p->code >= kBadRepCode) + return SZ_ERROR_DATA; + } + + RINOK(LZMA_DECODE_REAL(p, limit2, bufLimit)); + + if (p->checkDicSize == 0 && p->processedPos >= p->prop.dicSize) + p->checkDicSize = p->prop.dicSize; + + LzmaDec_WriteRem(p, limit); + } + while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart); + + return 0; +} + +typedef enum +{ + DUMMY_ERROR, /* unexpected end of input stream */ + DUMMY_LIT, + DUMMY_MATCH, + DUMMY_REP +} ELzmaDummy; + +static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize) +{ + UInt32 range = p->range; + UInt32 code = p->code; + const Byte *bufLimit = buf + inSize; + const CLzmaProb *probs = GET_PROBS; + unsigned state = (unsigned)p->state; + ELzmaDummy res; + + { + const CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = CALC_POS_STATE(p->processedPos, (1 << p->prop.pb) - 1); + + prob = probs + IsMatch + COMBINED_PS_STATE; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK + + /* if (bufLimit - buf >= 7) return DUMMY_LIT; */ + + prob = probs + Literal; + if (p->checkDicSize != 0 || p->processedPos != 0) + prob += ((UInt32)LZMA_LIT_SIZE * + ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) + + (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc)))); + + if (state < kNumLitStates) + { + unsigned symbol = 1; + do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[p->dicPos - p->reps[0] + + (p->dicPos < p->reps[0] ? p->dicBufSize : 0)]; + unsigned offs = 0x100; + unsigned symbol = 1; + do + { + unsigned bit; + const CLzmaProb *probLit; + matchByte += matchByte; + bit = offs; + offs &= matchByte; + probLit = prob + (offs + bit + symbol); + GET_BIT2_CHECK(probLit, symbol, offs ^= bit; , ; ) + } + while (symbol < 0x100); + } + res = DUMMY_LIT; + } + else + { + unsigned len; + UPDATE_1_CHECK; + + prob = probs + IsRep + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + state = 0; + prob = probs + LenCoder; + res = DUMMY_MATCH; + } + else + { + UPDATE_1_CHECK; + res = DUMMY_REP; + prob = probs + IsRepG0 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + prob = probs + IsRep0Long + COMBINED_PS_STATE; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + NORMALIZE_CHECK; + return DUMMY_REP; + } + else + { + UPDATE_1_CHECK; + } + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG1 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG2 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + } + } + } + state = kNumStates; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + const CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenLow + GET_LEN_STATE; + offset = 0; + limit = 1 << kLenNumLowBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenChoice2; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); + offset = kLenNumLowSymbols; + limit = 1 << kLenNumLowBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenHigh; + offset = kLenNumLowSymbols * 2; + limit = 1 << kLenNumHighBits; + } + } + TREE_DECODE_CHECK(probLen, limit, len); + len += offset; + } + + if (state < 4) + { + unsigned posSlot; + prob = probs + PosSlot + + ((len < kNumLenToPosStates - 1 ? len : kNumLenToPosStates - 1) << + kNumPosSlotBits); + TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); + if (posSlot >= kStartPosModelIndex) + { + unsigned numDirectBits = ((posSlot >> 1) - 1); + + /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */ + + if (posSlot < kEndPosModelIndex) + { + prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits); + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE_CHECK + range >>= 1; + code -= range & (((code - range) >> 31) - 1); + /* if (code >= range) code -= range; */ + } + while (--numDirectBits); + prob = probs + Align; + numDirectBits = kNumAlignBits; + } + { + unsigned i = 1; + unsigned m = 1; + do + { + REV_BIT_CHECK(prob, i, m); + } + while (--numDirectBits); + } + } + } + } + } + NORMALIZE_CHECK; + return res; +} + + +void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState) +{ + p->remainLen = kMatchSpecLenStart + 1; + p->tempBufSize = 0; + + if (initDic) + { + p->processedPos = 0; + p->checkDicSize = 0; + p->remainLen = kMatchSpecLenStart + 2; + } + if (initState) + p->remainLen = kMatchSpecLenStart + 2; +} + +void LzmaDec_Init(CLzmaDec *p) +{ + p->dicPos = 0; + LzmaDec_InitDicAndState(p, True, True); +} + + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen, + ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT inSize = *srcLen; + (*srcLen) = 0; + + *status = LZMA_STATUS_NOT_SPECIFIED; + + if (p->remainLen > kMatchSpecLenStart) + { + for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--) + p->tempBuf[p->tempBufSize++] = *src++; + if (p->tempBufSize != 0 && p->tempBuf[0] != 0) + return SZ_ERROR_DATA; + if (p->tempBufSize < RC_INIT_SIZE) + { + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + p->code = + ((UInt32)p->tempBuf[1] << 24) + | ((UInt32)p->tempBuf[2] << 16) + | ((UInt32)p->tempBuf[3] << 8) + | ((UInt32)p->tempBuf[4]); + p->range = 0xFFFFFFFF; + p->tempBufSize = 0; + + if (p->remainLen > kMatchSpecLenStart + 1) + { + SizeT numProbs = LzmaProps_GetNumProbs(&p->prop); + SizeT i; + CLzmaProb *probs = p->probs; + for (i = 0; i < numProbs; i++) + probs[i] = kBitModelTotal >> 1; + p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1; + p->state = 0; + } + + p->remainLen = 0; + } + + LzmaDec_WriteRem(p, dicLimit); + + while (p->remainLen != kMatchSpecLenStart) + { + int checkEndMarkNow = 0; + + if (p->dicPos >= dicLimit) + { + if (p->remainLen == 0 && p->code == 0) + { + *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK; + return SZ_OK; + } + if (finishMode == LZMA_FINISH_ANY) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_OK; + } + if (p->remainLen != 0) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + checkEndMarkNow = 1; + } + + if (p->tempBufSize == 0) + { + SizeT processed; + const Byte *bufLimit; + if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, src, inSize); + if (dummyRes == DUMMY_ERROR) + { + memcpy(p->tempBuf, src, inSize); + p->tempBufSize = (unsigned)inSize; + (*srcLen) += inSize; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + bufLimit = src; + } + else + bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX; + p->buf = src; + if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0) + return SZ_ERROR_DATA; + processed = (SizeT)(p->buf - src); + (*srcLen) += processed; + src += processed; + inSize -= processed; + } + else + { + unsigned rem = p->tempBufSize, lookAhead = 0; + while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize) + p->tempBuf[rem++] = src[lookAhead++]; + p->tempBufSize = rem; + if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, rem); + if (dummyRes == DUMMY_ERROR) + { + (*srcLen) += lookAhead; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + } + p->buf = p->tempBuf; + if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0) + return SZ_ERROR_DATA; + + { + unsigned kkk = (unsigned)(p->buf - p->tempBuf); + if (rem < kkk) + return SZ_ERROR_FAIL; /* some internal error */ + rem -= kkk; + if (lookAhead < rem) + return SZ_ERROR_FAIL; /* some internal error */ + lookAhead -= rem; + } + (*srcLen) += lookAhead; + src += lookAhead; + inSize -= lookAhead; + p->tempBufSize = 0; + } + } + + if (p->code != 0) + return SZ_ERROR_DATA; + *status = LZMA_STATUS_FINISHED_WITH_MARK; + return SZ_OK; +} + + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT outSize = *destLen; + SizeT inSize = *srcLen; + *srcLen = *destLen = 0; + for (;;) + { + SizeT inSizeCur = inSize, outSizeCur, dicPos; + ELzmaFinishMode curFinishMode; + SRes res; + if (p->dicPos == p->dicBufSize) + p->dicPos = 0; + dicPos = p->dicPos; + if (outSize > p->dicBufSize - dicPos) + { + outSizeCur = p->dicBufSize; + curFinishMode = LZMA_FINISH_ANY; + } + else + { + outSizeCur = dicPos + outSize; + curFinishMode = finishMode; + } + + res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status); + src += inSizeCur; + inSize -= inSizeCur; + *srcLen += inSizeCur; + outSizeCur = p->dicPos - dicPos; + memcpy(dest, p->dic + dicPos, outSizeCur); + dest += outSizeCur; + outSize -= outSizeCur; + *destLen += outSizeCur; + if (res != 0) + return res; + if (outSizeCur == 0 || outSize == 0) + return SZ_OK; + } +} + +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc) +{ + ISzAlloc_Free(alloc, p->probs); + p->probs = NULL; +} + +static void LzmaDec_FreeDict(CLzmaDec *p, ISzAllocPtr alloc) +{ + ISzAlloc_Free(alloc, p->dic); + p->dic = NULL; +} + +void LzmaDec_Free(CLzmaDec *p, ISzAllocPtr alloc) +{ + LzmaDec_FreeProbs(p, alloc); + LzmaDec_FreeDict(p, alloc); +} + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size) +{ + UInt32 dicSize; + Byte d; + + if (size < LZMA_PROPS_SIZE) + return SZ_ERROR_UNSUPPORTED; + else + dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24); + + if (dicSize < LZMA_DIC_MIN) + dicSize = LZMA_DIC_MIN; + p->dicSize = dicSize; + + d = data[0]; + if (d >= (9 * 5 * 5)) + return SZ_ERROR_UNSUPPORTED; + + p->lc = (Byte)(d % 9); + d /= 9; + p->pb = (Byte)(d / 5); + p->lp = (Byte)(d % 5); + + return SZ_OK; +} + +static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAllocPtr alloc) +{ + UInt32 numProbs = LzmaProps_GetNumProbs(propNew); + if (!p->probs || numProbs != p->numProbs) + { + LzmaDec_FreeProbs(p, alloc); + p->probs = (CLzmaProb *)ISzAlloc_Alloc(alloc, numProbs * sizeof(CLzmaProb)); + if (!p->probs) + return SZ_ERROR_MEM; + p->probs_1664 = p->probs + 1664; + p->numProbs = numProbs; + } + return SZ_OK; +} + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc) +{ + CLzmaProps propNew; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc) +{ + CLzmaProps propNew; + SizeT dicBufSize; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + + { + UInt32 dictSize = propNew.dicSize; + SizeT mask = ((UInt32)1 << 12) - 1; + if (dictSize >= ((UInt32)1 << 30)) mask = ((UInt32)1 << 22) - 1; + else if (dictSize >= ((UInt32)1 << 22)) mask = ((UInt32)1 << 20) - 1;; + dicBufSize = ((SizeT)dictSize + mask) & ~mask; + if (dicBufSize < dictSize) + dicBufSize = dictSize; + } + + if (!p->dic || dicBufSize != p->dicBufSize) + { + LzmaDec_FreeDict(p, alloc); + p->dic = (Byte *)ISzAlloc_Alloc(alloc, dicBufSize); + if (!p->dic) + { + LzmaDec_FreeProbs(p, alloc); + return SZ_ERROR_MEM; + } + } + p->dicBufSize = dicBufSize; + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAllocPtr alloc) +{ + CLzmaDec p; + SRes res; + SizeT outSize = *destLen, inSize = *srcLen; + *destLen = *srcLen = 0; + *status = LZMA_STATUS_NOT_SPECIFIED; + if (inSize < RC_INIT_SIZE) + return SZ_ERROR_INPUT_EOF; + LzmaDec_Construct(&p); + RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc)); + p.dic = dest; + p.dicBufSize = outSize; + LzmaDec_Init(&p); + *srcLen = inSize; + res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status); + *destLen = p.dicPos; + if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT) + res = SZ_ERROR_INPUT_EOF; + LzmaDec_FreeProbs(&p, alloc); + return res; +} diff --git a/games/undertale/src/lzma/LzmaDec.h b/games/undertale/src/lzma/LzmaDec.h new file mode 100644 index 00000000..28ce60c3 --- /dev/null +++ b/games/undertale/src/lzma/LzmaDec.h @@ -0,0 +1,234 @@ +/* LzmaDec.h -- LZMA Decoder +2018-04-21 : Igor Pavlov : Public domain */ + +#ifndef __LZMA_DEC_H +#define __LZMA_DEC_H + +#include "7zTypes.h" + +EXTERN_C_BEGIN + +/* #define _LZMA_PROB32 */ +/* _LZMA_PROB32 can increase the speed on some CPUs, + but memory usage for CLzmaDec::probs will be doubled in that case */ + +typedef +#ifdef _LZMA_PROB32 + UInt32 +#else + UInt16 +#endif + CLzmaProb; + + +/* ---------- LZMA Properties ---------- */ + +#define LZMA_PROPS_SIZE 5 + +typedef struct _CLzmaProps +{ + Byte lc; + Byte lp; + Byte pb; + Byte _pad_; + UInt32 dicSize; +} CLzmaProps; + +/* LzmaProps_Decode - decodes properties +Returns: + SZ_OK + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size); + + +/* ---------- LZMA Decoder state ---------- */ + +/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case. + Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */ + +#define LZMA_REQUIRED_INPUT_MAX 20 + +typedef struct +{ + /* Don't change this structure. ASM code can use it. */ + CLzmaProps prop; + CLzmaProb *probs; + CLzmaProb *probs_1664; + Byte *dic; + SizeT dicBufSize; + SizeT dicPos; + const Byte *buf; + UInt32 range; + UInt32 code; + UInt32 processedPos; + UInt32 checkDicSize; + UInt32 reps[4]; + UInt32 state; + UInt32 remainLen; + + UInt32 numProbs; + unsigned tempBufSize; + Byte tempBuf[LZMA_REQUIRED_INPUT_MAX]; +} CLzmaDec; + +#define LzmaDec_Construct(p) { (p)->dic = NULL; (p)->probs = NULL; } + +void LzmaDec_Init(CLzmaDec *p); + +/* There are two types of LZMA streams: + - Stream with end mark. That end mark adds about 6 bytes to compressed size. + - Stream without end mark. You must know exact uncompressed size to decompress such stream. */ + +typedef enum +{ + LZMA_FINISH_ANY, /* finish at any point */ + LZMA_FINISH_END /* block must be finished at the end */ +} ELzmaFinishMode; + +/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!! + + You must use LZMA_FINISH_END, when you know that current output buffer + covers last bytes of block. In other cases you must use LZMA_FINISH_ANY. + + If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK, + and output value of destLen will be less than output buffer size limit. + You can check status result also. + + You can use multiple checks to test data integrity after full decompression: + 1) Check Result and "status" variable. + 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize. + 3) Check that output(srcLen) = compressedSize, if you know real compressedSize. + You must use correct finish mode in that case. */ + +typedef enum +{ + LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */ + LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */ + LZMA_STATUS_NOT_FINISHED, /* stream was not finished */ + LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */ + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */ +} ELzmaStatus; + +/* ELzmaStatus is used only as output value for function call */ + + +/* ---------- Interfaces ---------- */ + +/* There are 3 levels of interfaces: + 1) Dictionary Interface + 2) Buffer Interface + 3) One Call Interface + You can select any of these interfaces, but don't mix functions from different + groups for same object. */ + + +/* There are two variants to allocate state for Dictionary Interface: + 1) LzmaDec_Allocate / LzmaDec_Free + 2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs + You can use variant 2, if you set dictionary buffer manually. + For Buffer Interface you must always use variant 1. + +LzmaDec_Allocate* can return: + SZ_OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc); +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc); + +SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc); +void LzmaDec_Free(CLzmaDec *p, ISzAllocPtr alloc); + +/* ---------- Dictionary Interface ---------- */ + +/* You can use it, if you want to eliminate the overhead for data copying from + dictionary to some other external buffer. + You must work with CLzmaDec variables directly in this interface. + + STEPS: + LzmaDec_Construct() + LzmaDec_Allocate() + for (each new stream) + { + LzmaDec_Init() + while (it needs more decompression) + { + LzmaDec_DecodeToDic() + use data from CLzmaDec::dic and update CLzmaDec::dicPos + } + } + LzmaDec_Free() +*/ + +/* LzmaDec_DecodeToDic + + The decoding to internal dictionary buffer (CLzmaDec::dic). + You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!! + +finishMode: + It has meaning only if the decoding reaches output limit (dicLimit). + LZMA_FINISH_ANY - Decode just dicLimit bytes. + LZMA_FINISH_END - Stream must be finished after dicLimit. + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_NEEDS_MORE_INPUT + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error +*/ + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- Buffer Interface ---------- */ + +/* It's zlib-like interface. + See LzmaDec_DecodeToDic description for information about STEPS and return results, + but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need + to work with CLzmaDec variables manually. + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). +*/ + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- One Call Interface ---------- */ + +/* LzmaDecode + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties + SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). +*/ + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAllocPtr alloc); + +EXTERN_C_END + +#endif diff --git a/games/undertale/src/lzma/Precomp.h b/games/undertale/src/lzma/Precomp.h new file mode 100644 index 00000000..fdaa2452 --- /dev/null +++ b/games/undertale/src/lzma/Precomp.h @@ -0,0 +1,5 @@ +/* Precomp.h -- StdAfx +2013-11-12 : Igor Pavlov : Public domain */ +#ifndef __7Z_PRECOMP_H +#define __7Z_PRECOMP_H +#endif diff --git a/games/undertale/src/main.c b/games/undertale/src/main.c new file mode 100644 index 00000000..05da21a5 --- /dev/null +++ b/games/undertale/src/main.c @@ -0,0 +1,48 @@ +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC optimize("Os") /* not drawn every frame: smaller over faster */ +#endif +/* Undertale for the NumWorks calculator. + * + * Inspired by Undertale by Toby Fox, not affiliated with him. + * Made by Mason Chen as part of NumPlay. */ +#include "game.h" +#include "gfx.h" +#include "plat.h" +#include "res.h" + +#ifndef HOST +const char eadk_app_name[] __attribute__((section(".rodata.eadk_app_name"))) = "Undertale"; +const uint32_t eadk_api_level __attribute__((section(".rodata.eadk_api_level"))) = 0; +extern const uint8_t ut_data[]; + +uint32_t perf_frames __attribute__((used)); /* read by tools/emu.py */ +uint32_t perf_updates __attribute__((used)); + +int main(void) { + uint16_t band[SCREEN_W * GFX_BAND]; /* (here: on the stack, out of the RAM apps get) */ + gfx_set_band_memory(band); + plat_begin(); + ut_bin = ut_data; + game_init(); + uint32_t next = plat_millis() * 3; /* in thirds of a millisecond: 100 per frame, as the game's 30 a second */ + while (g_running) { + /* the game's frames: drawn when caught up (at most 2 updates per drawing) */ + int n = 0; + uint32_t now = plat_millis() * 3; + while ((int32_t)(now - next) >= 0 && n < 2 && g_running) { + game_frame(plat_keys()); + perf_updates++; + next += 100; + n++; + } + if (!g_running) break; + if ((int32_t)(now - next) > 600) next = now; /* far behind: do not rush */ + if (n) { + game_draw(); + perf_frames++; + } else + plat_sleep(1); + } + return plat_end(); +} +#endif diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c new file mode 100644 index 00000000..9a1bc484 --- /dev/null +++ b/games/undertale/src/menu.c @@ -0,0 +1,8 @@ +/* The menus (menu.h). */ +#include "game.h" +#include "menu.h" +void menu_title_open(void) { game_new("Frisk"); } +void menu_open(void) {} +void menu_save_open(void) {} +void menu_update(uint32_t keys, uint32_t pressed) { (void)keys, (void)pressed; } +void menu_draw(void) {} diff --git a/games/undertale/src/menu.h b/games/undertale/src/menu.h new file mode 100644 index 00000000..18fcaa16 --- /dev/null +++ b/games/undertale/src/menu.h @@ -0,0 +1,11 @@ +/* Undertale: the menus (title, naming, the C menu, SAVE). */ +#ifndef UT_MENU_H +#define UT_MENU_H +#include +void menu_title_open(void); +void menu_open(void); +void menu_save_open(void); +void menu_update(uint32_t keys, uint32_t pressed); +void menu_draw(void); +void game_new(const char *name); +#endif diff --git a/games/undertale/src/plat.h b/games/undertale/src/plat.h new file mode 100644 index 00000000..615facbf --- /dev/null +++ b/games/undertale/src/plat.h @@ -0,0 +1,40 @@ +/* Undertale: the platform (the calculator, or a computer for tests). + * + * plat_eadk.c: the calculator's EADK display, keyboard, time and files. + * plat_host.c: a frame buffer that tests save as images, scripted keys and + * simulated time (tests/play.c). */ +#ifndef UT_PLAT_H +#define UT_PLAT_H +#include +#include +#include + +#define SCREEN_W 320 +#define SCREEN_H 240 + +/* keys held now, as bits: the game's Z, X and C are OK, Back and toolbox */ +enum { + K_LEFT = 1 << 0, K_RIGHT = 1 << 1, K_UP = 1 << 2, K_DOWN = 1 << 3, + K_Z = 1 << 4, /* OK, EXE: confirm */ + K_X = 1 << 5, /* Back: cancel */ + K_C = 1 << 6, /* toolbox, shift: the menu */ + K_HOME = 1 << 7, /* Home, On/Off: save the moment and quit */ + K_ANY = 1 << 8 +}; +uint32_t plat_keys(void); +uint32_t plat_millis(void); +void plat_sleep(uint32_t ms); +void plat_push(int x, int y, int w, int h, const uint16_t *px); +void plat_fill(int x, int y, int w, int h, uint16_t c); +bool plat_save(const char *name, const void *data, uint32_t len); +const uint8_t *plat_load(const char *name, uint32_t *len); /* NULL if absent */ +/* a file of len bytes to write in place (the calculator's storage is RAM): plat_reserve gives its + * bytes, plat_reserved says they are written; NULL if there is no room */ +uint8_t *plat_reserve(const char *name, uint32_t len); +void plat_reserved(const char *name, uint32_t len); +bool plat_remove(const char *name); +void plat_begin(void); +int plat_end(void); +/* an N0110 or N0115 (216 MHz, the N0120 has 550) */ +bool plat_slow(void); +#endif diff --git a/games/undertale/src/plat_eadk.c b/games/undertale/src/plat_eadk.c new file mode 100644 index 00000000..4d67782a --- /dev/null +++ b/games/undertale/src/plat_eadk.c @@ -0,0 +1,42 @@ +/* The calculator: EADK display, keyboard, time and files. */ +#include +#include "../../common/epsilon_app.h" +#include "../../common/epsilon_files.h" +#include "plat.h" + +#define KEY(k) ((uint64_t)1 << (k)) + +uint32_t plat_keys(void) { + uint64_t k = eadk_keyboard_scan(); + uint32_t r = 0; + if (k & (KEY(eadk_key_left) | KEY(eadk_key_four))) r |= K_LEFT; + if (k & (KEY(eadk_key_right) | KEY(eadk_key_six))) r |= K_RIGHT; + if (k & (KEY(eadk_key_up) | KEY(eadk_key_eight))) r |= K_UP; + if (k & (KEY(eadk_key_down) | KEY(eadk_key_two))) r |= K_DOWN; + if (k & (KEY(eadk_key_ok) | KEY(eadk_key_exe) | KEY(eadk_key_five))) r |= K_Z; + if (k & (KEY(eadk_key_back) | KEY(eadk_key_backspace))) r |= K_X; + if (k & (KEY(eadk_key_toolbox) | KEY(eadk_key_shift) | KEY(eadk_key_var))) r |= K_C; + if (k & (KEY(eadk_key_home) | KEY(eadk_key_on_off))) r |= K_HOME; + if (k) r |= K_ANY; + return r; +} + +uint32_t plat_millis(void) { return (uint32_t)eadk_timing_millis(); } +void plat_sleep(uint32_t ms) { eadk_timing_msleep(ms); } +void plat_push(int x, int y, int w, int h, const uint16_t *px) { + eadk_display_push_rect((eadk_rect_t){(uint16_t)x, (uint16_t)y, (uint16_t)w, (uint16_t)h}, px); +} +void plat_fill(int x, int y, int w, int h, uint16_t c) { + if (w > 0 && h > 0) eadk_display_push_rect_uniform((eadk_rect_t){(uint16_t)x, (uint16_t)y, (uint16_t)w, (uint16_t)h}, c); +} +bool plat_save(const char *name, const void *data, uint32_t len) { return ef_write(name, data, len); } +const uint8_t *plat_load(const char *name, uint32_t *len) { return ef_read(name, len); } +uint8_t *plat_reserve(const char *name, uint32_t len) { + uint32_t n; + return ef_write(name, NULL, len) ? (uint8_t *)(uintptr_t)ef_read(name, &n) : NULL; /* (the storage is RAM) */ +} +void plat_reserved(const char *name, uint32_t len) { (void)name, (void)len; } +bool plat_remove(const char *name) { return ef_remove(name); } +void plat_begin(void) { np_app_begin(); } +int plat_end(void) { return np_app_end(); } +bool plat_slow(void) { return epsilon_slow_model(); } diff --git a/games/undertale/src/plat_host.c b/games/undertale/src/plat_host.c new file mode 100644 index 00000000..047ec744 --- /dev/null +++ b/games/undertale/src/plat_host.c @@ -0,0 +1,76 @@ +/* A computer: the screen goes to a frame buffer that tests save as images, + * keys come from a script, time is simulated. */ +#include +#include +#include "plat.h" + +uint16_t host_fb[SCREEN_W * SCREEN_H]; +uint32_t host_time; /* ms */ +uint32_t host_keys; + +uint32_t plat_keys(void) { return host_keys; } +uint32_t plat_millis(void) { return host_time; } +void plat_sleep(uint32_t ms) { host_time += ms; } +void plat_push(int x, int y, int w, int h, const uint16_t *px) { + for (int r = 0; r < h; r++) + for (int c = 0; c < w; c++) + if ((unsigned)(x + c) < SCREEN_W && (unsigned)(y + r) < SCREEN_H) host_fb[(y + r) * SCREEN_W + x + c] = px[r * w + c]; +} +void plat_fill(int x, int y, int w, int h, uint16_t c) { + for (int r = 0; r < h; r++) + for (int k = 0; k < w; k++) + if ((unsigned)(x + k) < SCREEN_W && (unsigned)(y + r) < SCREEN_H) host_fb[(y + r) * SCREEN_W + x + k] = c; +} + +static char save_dir[256] = "build/host-saves"; +void host_save_dir(const char *d) { snprintf(save_dir, sizeof save_dir, "%s", d); } +bool plat_save(const char *name, const void *data, uint32_t len) { + char p[512]; + snprintf(p, sizeof p, "%s/%s", save_dir, name); + FILE *f = fopen(p, "wb"); + if (!f) return false; + bool ok = fwrite(data, 1, len, f) == len; + fclose(f); + return ok; +} +/* (each file read gets its own buffer: callers may hold two at once) */ +static uint8_t loaded[4][1 << 16]; +static int next_load; +const uint8_t *plat_load(const char *name, uint32_t *len) { + char p[512]; + snprintf(p, sizeof p, "%s/%s", save_dir, name); + FILE *f = fopen(p, "rb"); + if (!f) return NULL; + uint8_t *b = loaded[next_load++ & 3]; + *len = (uint32_t)fread(b, 1, sizeof loaded[0], f); + fclose(f); + return b; +} +static uint8_t reserved[1 << 16]; +bool host_storage_full; /* tests: no room for any file */ +uint8_t *plat_reserve(const char *name, uint32_t len) { + (void)name; + return len <= sizeof reserved && !host_storage_full ? reserved : NULL; +} +void plat_reserved(const char *name, uint32_t len) { plat_save(name, reserved, len); } +bool plat_remove(const char *name) { + char p[512]; + snprintf(p, sizeof p, "%s/%s", save_dir, name); + return remove(p) == 0; +} +void plat_begin(void) {} +int plat_end(void) { return 0; } +bool plat_slow(void) { return false; } + +/* writes the screen as a PPM image */ +void host_shot(const char *path) { + FILE *f = fopen(path, "wb"); + if (!f) return; + fprintf(f, "P6\n%d %d\n255\n", SCREEN_W, SCREEN_H); + for (int i = 0; i < SCREEN_W * SCREEN_H; i++) { + uint16_t c = host_fb[i]; + uint8_t rgb[3] = {(uint8_t)((c >> 11) * 255 / 31), (uint8_t)(((c >> 5) & 63) * 255 / 63), (uint8_t)((c & 31) * 255 / 31)}; + fwrite(rgb, 1, 3, f); + } + fclose(f); +} diff --git a/games/undertale/src/res.c b/games/undertale/src/res.c new file mode 100644 index 00000000..575c3a44 --- /dev/null +++ b/games/undertale/src/res.c @@ -0,0 +1,77 @@ +/* data.bin: sections, sprites, tiles, rooms and strings (see res.h). */ +#include "res.h" + +const uint8_t *ut_bin; + +int spr_frames(uint16_t spr) { + const uint8_t *s = section(SEC_SPRITES); + if (spr >= rd32(s)) return 0; + return rd16(s + 4 + 4 * spr + 2); +} + +bool frame_get(uint16_t spr, int i, Frame *f) { + const uint8_t *s = section(SEC_SPRITES); + if (spr >= rd32(s)) return false; + int first = rd16(s + 4 + 4 * spr), n = rd16(s + 4 + 4 * spr + 2); + if (n <= 0) return false; + i %= n; + if (i < 0) i += n; + const uint8_t *fs = section(SEC_FRAMES); + const uint8_t *p = fs + rd32(fs + 4 + 4 * (first + i)); + f->w = rd16(p), f->h = rd16(p + 2); + f->ox = rds16(p + 4), f->oy = rds16(p + 6); + f->bpp = p[8], f->ncol = p[9]; + f->pal = p + 10; + uint32_t o = 10 + 2u * f->ncol; + f->rows = p + o; + f->data = p + o + 2u * f->h; + return true; +} + +int spr_w(uint16_t spr) { + Frame f; + return frame_get(spr, 0, &f) ? f.w : 0; +} +int spr_h(uint16_t spr) { + Frame f; + return frame_get(spr, 0, &f) ? f.h : 0; +} + +void tile_get(uint16_t id, Tile *t) { + const uint8_t *s = section(SEC_TILES); + const uint8_t *p = s + rd32(s + 4 + 4 * id); + t->bpp = p[0], t->ncol = p[1]; + t->pal = p + 2; + t->bits = p + 2 + 2 * t->ncol; +} + +void room_info(int room, RoomInfo *r) { + const uint8_t *s = section(SEC_ROOMS); + const uint8_t *p = s + 4 + 32 * room; + r->x = rds16(p), r->y = rds16(p + 2), r->w = rds16(p + 4), r->h = rds16(p + 6); + r->gx = rds16(p + 8), r->gy = rds16(p + 10); + r->gcols = rd16(p + 12), r->grows = rd16(p + 14); + r->grid = section(SEC_GRID) + rd32(p + 16); + r->coll = section(SEC_COLL) + rd32(p + 20); + r->cw = rd16(p + 24), r->ch = rd16(p + 26); + r->area = p[28], r->flags = p[29]; + r->name = rd16(p + 30); +} + +const char *str(uint16_t id) { + const uint8_t *s = section(SEC_STRINGS); + if (id >= rd32(s)) return ""; + return (const char *)s + rd32(s + 4 + 4 * id); +} + +int room_doors(int room, Door *out, int max) { + const uint8_t *s = section(SEC_DOORS); + int first = rd16(s + 4 * room), n = rd16(s + 4 * room + 2); + const uint8_t *d = s + 4 * NUM_ROOMS + 16 * first; + if (n > max) n = max; + for (int i = 0; i < n; i++, d += 16) { + out[i].x = rds16(d), out[i].y = rds16(d + 2), out[i].w = rds16(d + 4), out[i].h = rds16(d + 6); + out[i].room = rd16(d + 8), out[i].tx = rds16(d + 10), out[i].ty = rds16(d + 12), out[i].dir = rd16(d + 14); + } + return n; +} diff --git a/games/undertale/src/res.h b/games/undertale/src/res.h new file mode 100644 index 00000000..8fa4a1e6 --- /dev/null +++ b/games/undertale/src/res.h @@ -0,0 +1,62 @@ +/* Undertale: data.bin (tools/pack.py), read where it lies in flash. + * + * Its sections (SEC_* in data.h): sprites and their frames, the areas' tiles, + * rooms (a tile grid and a collision map each), fonts and strings. */ +#ifndef UT_RES_H +#define UT_RES_H +#include +#include +#include "data.h" + +extern const uint8_t *ut_bin; +static inline uint16_t rd16(const uint8_t *p) { return (uint16_t)(p[0] | p[1] << 8); } +static inline int16_t rds16(const uint8_t *p) { return (int16_t)rd16(p); } +static inline uint32_t rd32(const uint8_t *p) { return p[0] | p[1] << 8 | p[2] << 16 | (uint32_t)p[3] << 24; } +static inline const uint8_t *section(int s) { return ut_bin + rd32(ut_bin + 8 + 4 * s); } + +/* a sprite's frame: its size and origin, palette and rows */ +typedef struct { + uint16_t w, h; + int16_t ox, oy; + uint8_t bpp, ncol; + const uint8_t *pal; /* ncol RGB565 colours (unaligned: read with rd16) */ + const uint8_t *rows; /* u16 offsets of each row, from `data` */ + const uint8_t *data; +} Frame; +bool frame_get(uint16_t spr, int i, Frame *f); +int spr_frames(uint16_t spr); +int spr_w(uint16_t spr); +int spr_h(uint16_t spr); + +/* a 20 x 20 tile: bpp 0 (one colour), 1, 2, 4 or 8 */ +typedef struct { + uint8_t bpp, ncol; + const uint8_t *pal; /* ncol RGB565 colours */ + const uint8_t *bits; /* 400 pixels, bpp bits each, lowest bits first */ +} Tile; +void tile_get(uint16_t id, Tile *t); + +/* a room's facts */ +typedef struct { + int16_t x, y, w, h; /* its rectangle on the area's map */ + int16_t gx, gy; /* the tile grid's top-left on the map */ + uint16_t gcols, grows; + const uint8_t *grid; /* gcols * grows tile ids (u16), 0xFFFF none */ + const uint8_t *coll; /* cw * ch bits, row by row ((cw + 7) / 8 bytes a row): 1 walkable */ + uint16_t cw, ch; /* 4-pixel cells over the rectangle */ + uint8_t area, flags; + uint16_t name; /* string: what SAVE shows */ +} RoomInfo; +void room_info(int room, RoomInfo *r); + +/* a door of a room: walking into its rectangle takes Frisk to another room */ +typedef struct { + int16_t x, y, w, h; + uint16_t room; + int16_t tx, ty; + uint16_t dir; +} Door; +int room_doors(int room, Door *out, int max); + +const char *str(uint16_t id); +#endif diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c new file mode 100644 index 00000000..20063886 --- /dev/null +++ b/games/undertale/src/rooms.c @@ -0,0 +1,14 @@ +/* The rooms' objects and their random encounters. */ +#include "event.h" +#include "events.h" +#include "game.h" +#include "world.h" + +void room_setup(int room, int from) { + (void)from; + switch (room) { + default: break; + } +} + +void encounter_step(void) {} diff --git a/games/undertale/src/save.c b/games/undertale/src/save.c new file mode 100644 index 00000000..9355a6cc --- /dev/null +++ b/games/undertale/src/save.c @@ -0,0 +1,8 @@ +/* Saves (save.h). */ +#include "save.h" +void save_restore_copy(void) {} +bool save_write(void) { return false; } +bool save_exists(void) { return false; } +bool save_load(void) { return false; } +void save_resume_write(void) {} +bool save_resume_load(void) { return false; } diff --git a/games/undertale/src/save.h b/games/undertale/src/save.h new file mode 100644 index 00000000..0458f15e --- /dev/null +++ b/games/undertale/src/save.h @@ -0,0 +1,11 @@ +/* Undertale: saves (the game's SAVE, the moment kept on Home), and their copy in a Python script. */ +#ifndef UT_SAVE_H +#define UT_SAVE_H +#include +void save_restore_copy(void); +bool save_write(void); +bool save_exists(void); +bool save_load(void); +void save_resume_write(void); +bool save_resume_load(void); +#endif diff --git a/games/undertale/src/text.c b/games/undertale/src/text.c new file mode 100644 index 00000000..1117eca6 --- /dev/null +++ b/games/undertale/src/text.c @@ -0,0 +1,301 @@ +/* Text typed a letter at a time, and the dialogue box (see text.h). */ +#include +#include +#include +#include "gfx.h" +#include "res.h" +#include "text.h" +#include "world.h" + +char g_name[8] = "Frisk"; + +/* ---------------------------------------------------------------- faces */ +/* each expression: its sprite (2 frames: the second one talks), drawn at (x, y) in the box; Toriel's + * heads sit on her shoulders */ +typedef struct { + uint16_t spr; + int8_t x, y; +} Expr; +static const Expr toriel_faces[] = { + {SPR_FACE_TORIELTALK, 9, 0}, {SPR_FACE_TORIELTALKSIDE, 9, 0}, {SPR_FACE_TORIELHAPPYTALK, 9, 0}, + {SPR_FACE_TORIELWHAT, 9, 0}, {SPR_FACE_TORIELWHATSIDE, 9, 0}, {SPR_FACE_TORIELMAD, 9, 0}, + {SPR_FACE_TORIELCOLD, 9, 0}, {SPR_FACE_TORIELSURPRISED, 9, 0}, {SPR_FACE_TORIELEMBARRASSED, 9, 0}, + {SPR_FACE_TORIELGLASSES, 9, 0}, {SPR_FACE_TORIELREVENGETALK, 9, 0}, {SPR_FACE_TORIELSCARED, 9, 0}, + {SPR_FACE_TORIELBLINK, 9, 0}, {SPR_FACE_TORIELHAPPYBLINK, 9, 0}, +}; +static const Expr flowey_faces[] = { + {SPR_FLOWEYNICE, 4, -2}, {SPR_FLOWEYNICESIDE, 4, -2}, {SPR_FLOWEYSASSY, 4, -2}, {SPR_FLOWEYEVIL, 4, -2}, + {SPR_FLOWEYGRIN, 4, -2}, {SPR_FLOWEYPLAIN, 4, -2}, {SPR_FLOWEYPISSED, 4, -2}, {SPR_FLOWEYWINK, 4, -2}, + {SPR_FLOWEYLAUGH, 4, -2}, {SPR_FLOWEYHURT, 4, -2}, {SPR_FLOWEYTORIEL, 4, -2}, {SPR_FLOWEYTORIEL2, 4, -2}, + {SPR_FLOWEYSIDESHOCK, 4, -2}, +}; +static const Expr sans_faces[] = {{SPR_FACE_SANS, 4, 0}, {SPR_FACE_SANSCHUCKLE, 4, 0}, {SPR_FACE_SANSWINK, 4, 0}}; +static const Expr papyrus_faces[] = { + {SPR_FACE_PAPYRUS, 4, -4}, {SPR_FACE_PAPYRUSEVIL, 4, -4}, {SPR_FACE_PAPYRUSLAUGH, 4, -4}, + {SPR_FACE_PAPYRUSMAD, 4, -4}, {SPR_FACE_PAPYRUSSIDE, 4, -4}, +}; +static const struct { + const Expr *e; + int n; +} faces[FACE_MAX] = { + [FACE_TORIEL] = {toriel_faces, sizeof toriel_faces / sizeof toriel_faces[0]}, + [FACE_FLOWEY] = {flowey_faces, sizeof flowey_faces / sizeof flowey_faces[0]}, + [FACE_SANS] = {sans_faces, sizeof sans_faces / sizeof sans_faces[0]}, + [FACE_PAPYRUS] = {papyrus_faces, sizeof papyrus_faces / sizeof papyrus_faces[0]}, +}; + +/* ---------------------------------------------------------------- the writer */ +#define MAX_LINES 8 +static uint16_t breaks[MAX_LINES]; /* where the page's lines wrap (src offsets), the line after indented */ +static int nbreaks; +static int wrap_width = 270; + +static int page_len(const char *s) { + int n = 0; + while (s[n] && s[n] != '|') n++; + return n; +} + +/* the width of a letter, 0 for the marks */ +static int code_len(const char *s) { + switch (s[0]) { + case '^': case '`': case '#': return s[1] ? 2 : 1; + case '~': return 1; + default: return 0; + } +} + +/* where the page's lines wrap: at the last space before the box's edge */ +static void layout(Writer *w) { + nbreaks = 0; + const char *s = w->src + w->page; + int x = 0, last_space = -1, start = 0; + for (int i = 0; i < w->len; i++) { + int c = code_len(s + i); + if (c) { + i += c - 1; + continue; + } + if (s[i] == '@') break; + if (s[i] == '\n') { + x = 0, last_space = -1, start = i + 1; + continue; + } + if (s[i] == ' ') last_space = i; + int adv = s[i] == '$' ? 8 * (int)strlen(g_name) : 8; + x += adv; + if (x > wrap_width && last_space > start && nbreaks < MAX_LINES) { + breaks[nbreaks++] = (uint16_t)(w->page + last_space); + /* the line after: indented under the first's words when the page starts with "* " */ + x = (s[0] == '*' ? 16 : 0); + for (int k = last_space + 1; k <= i; k++) + if (!code_len(s + k)) x += 8; + start = last_space + 1; + last_space = -1; + } + } +} + +static uint8_t expr_of(char c) { return (uint8_t)(c >= 'a' ? 10 + c - 'a' : c - '0'); } + +static void page_begin(Writer *w) { + w->len = page_len(w->src + w->page); + w->shown = 0, w->pause = 0, w->t = 0, w->done = false, w->auto_close = false; + w->choices = 0, w->choice = 0; + for (int i = 0; i < w->len; i++) + if (w->src[w->page + i] == '@') { + w->choice_at = w->page + i; + w->choices = 2; + break; + } + layout(w); +} + +void writer_start(Writer *w, const char *s, int x, int y, int font) { + memset(w, 0, sizeof *w); + w->src = s, w->x = x, w->y = y, w->font = font; + w->line_h = 18, w->speed = 1; + page_begin(w); +} + +static void show_all(Writer *w) { + const char *s = w->src + w->page; + while (w->shown < w->len && s[w->shown] != '@') { + int c = code_len(s + w->shown); + if (c && s[w->shown] == '`') w->face_expr = expr_of(s[w->shown + 1]); + if (c && s[w->shown] == '~') w->auto_close = true; + w->shown += c ? c : 1; + } + w->done = true; +} + +bool writer_update(Writer *w, uint32_t pressed) { + if (w->finished) return false; + const char *s = w->src + w->page; + if (!w->done) { + if (pressed & K_X) { + show_all(w); + } else if (w->pause > 0) { + w->pause--; + } else if (++w->t >= w->speed) { + w->t = 0; + /* the marks take no time; the next letter shows */ + for (;;) { + if (w->shown >= w->len || s[w->shown] == '@') { + w->done = true; + break; + } + int c = code_len(s + w->shown); + if (!c) { + w->shown++; + break; + } + if (s[w->shown] == '^') w->pause = (s[w->shown + 1] - '0') * 5; + if (s[w->shown] == '`') w->face_expr = expr_of(s[w->shown + 1]); + if (s[w->shown] == '~') w->auto_close = true; + w->shown += c; + if (w->pause) break; + } + if (w->shown >= w->len) w->done = true; + } + return true; + } + if (w->choices) { + if (pressed & K_LEFT) w->choice = 0; + if (pressed & K_RIGHT) w->choice = 1; + } + if ((pressed & K_Z) || w->auto_close) { + const char *next = s + w->len; + if (*next == '|') { + w->page += w->len + 1; + page_begin(w); + } else { + w->finished = true; + return false; + } + } + return true; +} + +int writer_talking(const Writer *w) { return !w->done && !w->pause; } + +static uint16_t color_of(char c) { + switch (c) { + case 'Y': return rgb565(0xFFFF00); + case 'R': return rgb565(0xFF0000); + case 'B': return rgb565(0x0000FF); + case 'O': return rgb565(0xFFA040); + case 'G': return rgb565(0x00C000); + case 'P': return rgb565(0xD535D9); + case 'L': return rgb565(0x0EC0FD); + default: return C_WHITE; + } +} + +void writer_draw(const Writer *w, uint16_t color) { + if (w->finished) return; + char seg[80]; + int n = 0, x = w->x, y = w->y, sx = x; + uint16_t col = color, segcol = color; + const char *s = w->src + w->page; + int b = 0; +#define FLUSH() do { if (n) { seg[n] = 0; gfx_text_ex(w->font, sx, y, seg, n, segcol, w->shake, (uint32_t)(y * 31 + sx), 0); n = 0; } } while (0) + for (int i = 0; i < w->shown && i < w->len; i++) { + if (s[i] == '@') break; + int c = code_len(s + i); + if (c) { + if (s[i] == '#') { + FLUSH(); + col = s[i + 1] == 'X' || s[i + 1] == 'W' ? color : color_of(s[i + 1]); + } + i += c - 1; + continue; + } + if (s[i] == '\n' || (b < nbreaks && w->page + i == breaks[b])) { + FLUSH(); + if (s[i] != '\n') b++; + y += w->line_h; + x = w->x + (s[i] != '\n' && s[0] == '*' ? 16 : 0); + continue; + } + if (n == 0) sx = x, segcol = col; + if (col != segcol) { + FLUSH(); + sx = x, segcol = col; + } + if (s[i] == '$') { + for (const char *p = g_name; *p && n < 70; p++) seg[n++] = *p, x += 8; + continue; + } + seg[n++] = s[i]; + x += 8; + if (n >= 70) FLUSH(); + } + FLUSH(); +#undef FLUSH + if (w->choices && w->done) { + /* the two options on the next line, the heart by the one selected */ + const char *a = w->src + w->choice_at + 1, *bb = strchr(a, '@'); + int la = bb ? (int)(bb - a) : 0, lb = bb ? page_len(bb + 1) : 0; + int cy = y + w->line_h + 4; + int ax = w->x + 56, bx = w->x + 168; + gfx_text_ex(w->font, ax, cy, a, la, C_WHITE, 0, 0, 0); + if (bb) gfx_text_ex(w->font, bx, cy, bb + 1, lb, C_WHITE, 0, 0, 0); + gfx_sprite(SPR_HEART, 0, (w->choice ? bx : ax) - 12, cy + 6, 0, 255); + } +} + +/* ---------------------------------------------------------------- the dialogue box */ +static Writer box; +static bool box_open; +static int box_face; +static int box_top = -1, box_at_top; +static int last_choice; +static char fmt_buf[512]; + +void text_set_top(int top) { box_top = top; } + +void text_open(int face, const char *s) { + box_face = face; + int tx = face ? 76 : 22; + wrap_width = face ? 300 - tx - 6 : 300 - tx - 8; + box_at_top = box_top >= 0 ? box_top : (pl.y + 15 - cam_y > 130); + writer_start(&box, s, tx, (box_at_top ? 5 : 160) + 11, FONT_MAIN); + box_open = true; +} + +void text_openf(int face, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vsnprintf(fmt_buf, sizeof fmt_buf, fmt, ap); + va_end(ap); + text_open(face, fmt_buf); +} + +bool text_active(void) { return box_open; } +int text_choice(void) { return last_choice; } + +void text_update(uint32_t pressed) { + if (!box_open) return; + int ch = box.choice; + bool had = box.choices && box.done; + if (!writer_update(&box, pressed)) { + box_open = false; + if (had) last_choice = ch; + } +} + +void text_draw(void) { + if (!box_open) return; + int y = box_at_top ? 5 : 160; + gfx_rect(16, y, 288, 76, C_WHITE, 255); + gfx_rect(19, y + 3, 282, 70, C_BLACK, 255); + if (box_face && faces[box_face].e) { + int e = box.face_expr < faces[box_face].n ? box.face_expr : 0; + const Expr *x = &faces[box_face].e[e]; + int fr = writer_talking(&box) ? (box.shown / 2) & 1 : 0; + if (box_face == FACE_TORIEL) gfx_sprite(SPR_FACE_TORIELBODY, 0, 26, y + 13 + 32, 0, 255); + gfx_sprite(x->spr, fr, 26 + x->x, y + 13 + x->y, 0, 255); + } + writer_draw(&box, C_WHITE); +} diff --git a/games/undertale/src/text.h b/games/undertale/src/text.h new file mode 100644 index 00000000..6a1cf139 --- /dev/null +++ b/games/undertale/src/text.h @@ -0,0 +1,56 @@ +/* Undertale: text, typed a letter at a time. + * + * The game's texts are written with a few marks: + * \n a new line + * | a new page (after Z) + * ^N a pause of N times 5 frames (^1 .. ^9) + * `N the face's expression N (FACE_* in face.c) + * #Y #R #B #O #G #P #L #X yellow, red, blue, orange, green, purple, light blue, white again + * $ the fallen human's name + * @A@B at the end of a page: a choice between A and B (text_choice() says which) + * ~ the page closes itself once typed (no Z) + * + * A Writer types into a rectangle; the dialogue box is one, with a face or not, at the top or the bottom of + * the screen. */ +#ifndef UT_TEXT_H +#define UT_TEXT_H +#include +#include + +enum { FACE_NONE, FACE_TORIEL, FACE_FLOWEY, FACE_SANS, FACE_PAPYRUS, FACE_UNDYNE, FACE_ALPHYS, FACE_ASGORE, FACE_MAX }; + +typedef struct { + const char *src; /* the whole text */ + int page; /* where the page being typed starts in src */ + int shown; /* letters of the page shown */ + int len; /* the page's length (up to | or the end) */ + int pause; /* frames left before the next letter */ + int x, y, line_h; + int font; + int speed; /* frames between letters */ + int t; + uint8_t face_expr; + bool done; /* the page is all typed */ + bool finished; /* every page read */ + bool auto_close; + int shake; /* letters shaking (pixels) */ + int choice, choices; /* the page's choice: selected, how many (0: none) */ + int choice_at; /* where the choice's options start in src */ +} Writer; + +void writer_start(Writer *w, const char *s, int x, int y, int font); +/* one frame: Z goes on, X shows the page at once; returns true while it isn't finished */ +bool writer_update(Writer *w, uint32_t pressed); +void writer_draw(const Writer *w, uint16_t color); +int writer_talking(const Writer *w); /* letters are being typed (a face moves its mouth) */ + +/* the dialogue box */ +void text_open(int face, const char *s); +void text_openf(int face, const char *fmt, ...); +bool text_active(void); +void text_update(uint32_t pressed); +void text_draw(void); +int text_choice(void); /* 0 or 1: the last choice made */ +void text_set_top(int top); /* -1: by where Frisk is (the game's way), 0 bottom, 1 top */ +extern char g_name[8]; /* the fallen human's name */ +#endif diff --git a/games/undertale/src/world.c b/games/undertale/src/world.c new file mode 100644 index 00000000..3edcf3d9 --- /dev/null +++ b/games/undertale/src/world.c @@ -0,0 +1,335 @@ +/* The overworld: rooms, the camera, Frisk and the room's objects (world.h). */ +#include +#include "event.h" +#include "game.h" +#include "gfx.h" +#include "res.h" +#include "text.h" +#include "world.h" + +void pl_walk_step(void); /* event.c */ + +Obj objs[MAX_OBJS]; +Player pl; +int g_room = -1; +static RoomInfo room; +static Door doors[16]; +static int ndoors; +int cam_x, cam_y; +bool cam_locked; +uint8_t g_fade; + +/* Frisk's box: his feet (from his sprite's top-left), as the game's mask */ +#define PBX 3 +#define PBY 20 +#define PBW 14 +#define PBH 9 +#define SPEED 3 + +const RoomInfo *world_room_info(void) { return g_room >= 0 ? &room : NULL; } + +/* the room of the same area whose rectangle holds (x, y), -1 none */ +static int room_at(int x, int y) { + if (x >= room.x && x < room.x + room.w && y >= room.y && y < room.y + room.h) return g_room; + for (int r = 0; r < NUM_ROOMS; r++) { + RoomInfo o; + room_info(r, &o); + if (o.area == room.area && x >= o.x && x < o.x + o.w && y >= o.y && y < o.y + o.h) return r; + } + return -1; +} + +/* the 4-pixel cell at (x, y) walkable? (in whichever room of the area holds it) */ +static bool cell_walkable(int x, int y) { + const RoomInfo *ri = &room; + RoomInfo o; + if (!(x >= room.x && x < room.x + room.w && y >= room.y && y < room.y + room.h)) { + int r = room_at(x, y); + if (r < 0) return false; + room_info(r, &o); + ri = &o; + } + int cx = (x - ri->x) >> 2, cy = (y - ri->y) >> 2; + if (cx < 0 || cy < 0 || cx >= ri->cw || cy >= ri->ch) return false; + return ri->coll[cy * ((ri->cw + 7) >> 3) + (cx >> 3)] >> (cx & 7) & 1; +} + +static bool boxes_meet(int ax, int ay, int aw, int ah, int bx, int by, int bw, int bh) { + return ax < bx + bw && bx < ax + aw && ay < by + bh && by < ay + ah; +} + +bool world_walkable(int x, int y, int w, int h, int ignore) { + /* every cell the box covers (its corners and every 4 pixels between) */ + for (int yy = y;; yy += 4) { + if (yy > y + h - 1) yy = y + h - 1; + for (int xx = x;; xx += 4) { + if (xx > x + w - 1) xx = x + w - 1; + if (!cell_walkable(xx, yy)) return false; + if (xx == x + w - 1) break; + } + if (yy == y + h - 1) break; + } + for (int i = 0; i < MAX_OBJS; i++) { + const Obj *o = &objs[i]; + if (i == ignore || o->kind == OBJ_NONE || !(o->flags & OF_SOLID)) continue; + if (boxes_meet(x, y, w, h, o->x + o->bx, o->y + o->by, o->bw, o->bh)) return false; + } + return true; +} + +static bool player_free(int x, int y) { return world_walkable(x + PBX, y + PBY, PBW, PBH, -1); } + +Obj *obj_new(int kind, int x, int y) { + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].kind == OBJ_NONE) { + Obj *o = &objs[i]; + memset(o, 0, sizeof *o); + o->kind = (uint8_t)kind, o->x = (int16_t)x, o->y = (int16_t)y, o->alpha = 255; + return o; + } + return NULL; +} +Obj *obj_find(int name) { + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].kind != OBJ_NONE && objs[i].name == name) return &objs[i]; + return NULL; +} +void obj_clear_all(void) { memset(objs, 0, sizeof objs); } + +void world_camera(void) { + if (cam_locked) return; + int cx = pl.x + 10 - SCREEN_W / 2, cy = pl.y + 15 - SCREEN_H / 2; + if (room.w <= SCREEN_W) cx = room.x + (room.w - SCREEN_W) / 2; + else if (cx < room.x) cx = room.x; + else if (cx > room.x + room.w - SCREEN_W) cx = room.x + room.w - SCREEN_W; + if (room.h <= SCREEN_H) cy = room.y + (room.h - SCREEN_H) / 2; + else if (cy < room.y) cy = room.y; + else if (cy > room.y + room.h - SCREEN_H) cy = room.y + room.h - SCREEN_H; + cam_x = cx, cam_y = cy; +} + +void world_enter(int r, int x, int y, int dir) { + int from = g_room; + g_room = r; + room_info(r, &room); + pl.x = (int16_t)x, pl.y = (int16_t)y, pl.dir = (uint8_t)dir; + pl.frame = 0, pl.anim = 0; + obj_clear_all(); + ndoors = room_doors(r, doors, 16); + cam_locked = false; + room_setup(r, from); + world_camera(); +} + +/* ---------------------------------------------------------------- fades */ +static struct { + int room, x, y, dir; + int phase, t; /* 1: going black, 2: coming back */ +} fade; +#define FADE_FRAMES 4 + +void world_fade_to(int r, int x, int y, int dir) { + fade.room = r, fade.x = x, fade.y = y, fade.dir = dir; + fade.phase = 1, fade.t = 0; +} +bool world_fading(void) { return fade.phase != 0; } + +static void fade_step(void) { + if (fade.phase == 1) { + if (++fade.t >= FADE_FRAMES) { + world_enter(fade.room, fade.x, fade.y, fade.dir); + fade.phase = 2, fade.t = 0; + } + g_fade = (uint8_t)(255 * fade.t / FADE_FRAMES); + } else if (fade.phase == 2) { + if (++fade.t >= FADE_FRAMES) fade.phase = 0; + g_fade = (uint8_t)(255 - 255 * fade.t / FADE_FRAMES); + } else { + g_fade = 0; + } +} + +/* ---------------------------------------------------------------- Frisk */ +static const uint8_t frames_of[4] = {4, 4, 2, 2}; + +static void face_from_keys(uint32_t keys, uint32_t pressed) { + static const uint32_t bit[4] = {K_DOWN, K_UP, K_LEFT, K_RIGHT}; + /* a direction just pressed turns him; letting go of the one he faces turns him to one still held */ + for (int d = 0; d < 4; d++) + if (pressed & bit[d]) pl.dir = (uint8_t)d; + if (!(keys & bit[pl.dir])) + for (int d = 0; d < 4; d++) + if (keys & bit[d]) { + pl.dir = (uint8_t)d; + break; + } +} + +/* one pixel along an axis, sliding past a corner (diagonal walls are steps of cells) */ +static bool step(int sx, int sy, bool slide) { + if (player_free(pl.x + sx, pl.y + sy)) { + pl.x = (int16_t)(pl.x + sx), pl.y = (int16_t)(pl.y + sy); + return true; + } + if (!slide) return false; + for (int k = 1; k <= 2; k++) { + bool a = sx ? player_free(pl.x + sx, pl.y - k) : player_free(pl.x - k, pl.y + sy); + bool b = sx ? player_free(pl.x + sx, pl.y + k) : player_free(pl.x + k, pl.y + sy); + if (a != b) { + int o = a ? -1 : 1; + if (sx) pl.y = (int16_t)(pl.y + o), pl.x = (int16_t)(pl.x + sx); + else pl.x = (int16_t)(pl.x + o), pl.y = (int16_t)(pl.y + sy); + return true; + } + if (a && b) break; + } + return false; +} + +static void player_move(uint32_t keys, uint32_t pressed) { + int dx = ((keys & K_RIGHT) != 0) - ((keys & K_LEFT) != 0); + int dy = ((keys & K_DOWN) != 0) - ((keys & K_UP) != 0); + face_from_keys(keys, pressed); + bool moved = false; + for (int i = 0; i < SPEED; i++) { + if (dx) moved |= step(dx, 0, !dy); + if (dy) moved |= step(0, dy, !dx); + } + if (dx || dy) { + pl.anim++; + pl.frame = (uint8_t)((1 + pl.anim / 6) % frames_of[pl.dir]); + if (moved) pl.steps++; + } else { + pl.anim = 0, pl.frame = 0; + } + pl.moving = moved; +} + +/* the box in front of Frisk, where Z looks */ +static void front_box(int *x, int *y, int *w, int *h) { + int fx = pl.x + PBX, fy = pl.y + PBY, fw = PBW, fh = PBH; + switch (pl.dir) { + case DIR_DOWN: fy += fh, fh = 12; break; + case DIR_UP: fy -= 14, fh = 14; break; + case DIR_LEFT: fx -= 12, fw = 12; break; + default: fx += fw, fw = 12; break; + } + *x = fx, *y = fy, *w = fw, *h = fh; +} + +static void interact(void) { + int x, y, w, h; + front_box(&x, &y, &w, &h); + for (int i = 0; i < MAX_OBJS; i++) { + Obj *o = &objs[i]; + if (o->kind == OBJ_NONE || !(o->flags & OF_TALK)) continue; + if (boxes_meet(x, y, w, h, o->x + o->bx, o->y + o->by, o->bw, o->bh)) { + event_start(o->event, o); + return; + } + } +} + +static void touches(void) { + int x = pl.x + PBX, y = pl.y + PBY; + for (int i = 0; i < MAX_OBJS; i++) { + Obj *o = &objs[i]; + if (o->kind == OBJ_NONE || !(o->flags & OF_TOUCH)) continue; + if (boxes_meet(x, y, PBW, PBH, o->x + o->bx, o->y + o->by, o->bw, o->bh)) { + event_start(o->event, o); + return; + } + } +} + +/* ---------------------------------------------------------------- objects walking */ +static void objs_update(void) { + for (int i = 0; i < MAX_OBJS; i++) { + Obj *o = &objs[i]; + if (o->kind == OBJ_NONE) continue; + if (o->walking) { + int dx = o->tx - o->x, dy = o->ty - o->y; + int sp = o->speed ? o->speed : 2; + if (dx) o->dir = dx < 0 ? DIR_LEFT : DIR_RIGHT; + if (abs_i(dy) > abs_i(dx)) o->dir = dy < 0 ? DIR_UP : DIR_DOWN; + o->x = (int16_t)(o->x + clamp_i(dx, -sp, sp)); + o->y = (int16_t)(o->y + clamp_i(dy, -sp, sp)); + if (o->x == o->tx && o->y == o->ty) o->walking = 0; + if (o->flags & OF_WALKANIM) { + o->anim_t++; + o->frame = (uint8_t)(1 + o->anim_t / (o->anim_speed ? o->anim_speed : 6)); + } + if (!o->walking && (o->flags & OF_WALKANIM)) o->frame = 0, o->anim_t = 0; + } else if (o->flags & OF_ANIM) { + if (++o->anim_t >= (o->anim_speed ? o->anim_speed : 6)) o->anim_t = 0, o->frame++; + } + } +} + +void world_update(uint32_t keys, uint32_t pressed) { + fade_step(); + if (fade.phase == 1) return; + objs_update(); + bool busy = event_running() || text_active() || fade.phase; + if (!busy && !pl.frozen) { + player_move(keys, pressed); + /* out of the room's rectangle: into the room that holds his feet */ + int fx = pl.x + PBX + PBW / 2, fy = pl.y + PBY + PBH / 2; + int r = room_at(fx, fy); + if (r >= 0 && r != g_room) { + world_fade_to(r, pl.x, pl.y, pl.dir); + return; + } + /* a door */ + for (int i = 0; i < ndoors; i++) + if (boxes_meet(pl.x + PBX, pl.y + PBY, PBW, PBH, doors[i].x, doors[i].y, doors[i].w, doors[i].h)) { + world_fade_to(doors[i].room, doors[i].tx, doors[i].ty, doors[i].dir); + return; + } + if (pressed & K_Z) interact(); + else touches(); + if (!event_running() && (pressed & K_C)) game_open_menu(); + if (!event_running()) encounter_step(); + } else { + pl_walk_step(); + } + world_camera(); +} + +/* ---------------------------------------------------------------- drawing */ +typedef struct { + int16_t depth; + int8_t who; /* object index, -1 Frisk */ +} DrawRef; + +static uint16_t obj_sprite(const Obj *o) { return o->spr[o->spr[o->dir] ? o->dir : 0]; } + +void world_draw(void) { + gfx_tiles(cam_x, cam_y); + /* the room's objects and Frisk, the lower ones in front */ + DrawRef order[MAX_OBJS + 1]; + int n = 0; + for (int i = 0; i < MAX_OBJS; i++) { + const Obj *o = &objs[i]; + if (o->kind == OBJ_NONE || (o->flags & OF_HIDDEN) || !o->spr[0]) continue; + int d = o->y + o->by + o->bh + o->depth_bias; + if (o->flags & OF_BACK) d = -30000; + if (o->flags & OF_FRONT) d = 30000; + order[n++] = (DrawRef){(int16_t)d, (int8_t)i}; + } + if (!pl.hidden) order[n++] = (DrawRef){(int16_t)(pl.y + PBY + PBH), -1}; + for (int i = 1; i < n; i++) + for (int j = i; j > 0 && order[j - 1].depth > order[j].depth; j--) { + DrawRef t = order[j]; + order[j] = order[j - 1], order[j - 1] = t; + } + static const uint16_t frisk[4] = {SPR_FRISK_D, SPR_FRISK_U, SPR_FRISK_L, SPR_FRISK_R}; + for (int i = 0; i < n; i++) { + if (order[i].who < 0) { + gfx_sprite(frisk[pl.dir], pl.frame, pl.x - cam_x, pl.y - cam_y, 0, 255); + } else { + const Obj *o = &objs[order[i].who]; + gfx_sprite(obj_sprite(o), o->frame, o->x - cam_x, o->y - cam_y, 0, o->alpha); + } + } +} diff --git a/games/undertale/src/world.h b/games/undertale/src/world.h new file mode 100644 index 00000000..c8a5f137 --- /dev/null +++ b/games/undertale/src/world.h @@ -0,0 +1,74 @@ +/* Undertale: the overworld. Rooms, the camera, Frisk, the room's objects. + * + * Positions are the area map's pixels (tools/rooms.py): the rooms of an area + * keep their places on it, so walking out of a room's rectangle walks into the + * next room, after a fade, as in the game. */ +#ifndef UT_WORLD_H +#define UT_WORLD_H +#include +#include +#include "res.h" + +enum { DIR_DOWN, DIR_UP, DIR_LEFT, DIR_RIGHT }; + +/* an object of the room: a character, a SAVE Point, a sign, a trigger... */ +enum { + OBJ_NONE, OBJ_NPC, OBJ_SAVE, OBJ_SIGN, OBJ_TRIGGER, OBJ_DECO, OBJ_ROCK, OBJ_SPIKES, OBJ_SWITCH, OBJ_ITEM, + OBJ_MARK +}; +enum { + OF_SOLID = 1, /* Frisk can't walk through its box */ + OF_TALK = 2, /* pressing Z facing it runs its event */ + OF_TOUCH = 4, /* walking into its box runs its event */ + OF_HIDDEN = 8, /* not drawn */ + OF_ANIM = 16, /* its frames cycle (anim_speed) even standing */ + OF_WALKANIM = 32, /* its frames cycle while it walks */ + OF_FRONT = 64, /* drawn over everything else */ + OF_BACK = 128 /* drawn under everything else */ +}; +#define MAX_OBJS 48 +typedef struct { + uint8_t kind, dir; + uint16_t flags; + int16_t x, y; /* its sprite's origin (the frame's top-left for the game's sprites) */ + int16_t bx, by, bw, bh; /* its box, from (x, y) */ + uint16_t spr[4]; /* its sprite for each direction (spr[0] if it has one) */ + uint8_t frame, anim_speed, anim_t, depth_bias; + uint16_t event; /* EV_* run when talked to or touched */ + int16_t arg, arg2; /* the kind's own (a sign's text, a flag...) */ + /* walking somewhere: (tx, ty) at speed pixels a frame */ + int16_t tx, ty; + uint8_t speed, walking; + uint8_t alpha; + uint8_t name; /* an ACTOR_* (scripts find it by it) */ + int16_t fx, fy; /* fractions (1/16 pixel) for slow walks */ +} Obj; +extern Obj objs[MAX_OBJS]; + +typedef struct { + int16_t x, y; /* Frisk's sprite's top-left */ + uint8_t dir, frame, anim, moving; + bool frozen; /* a cutscene has control */ + bool hidden; + uint16_t steps; /* towards an encounter */ +} Player; +extern Player pl; + +extern int g_room; /* ROOM_* */ +extern int cam_x, cam_y; /* the screen's top-left on the map */ +extern bool cam_locked; /* a cutscene moves the camera */ + +const RoomInfo *world_room_info(void); +void world_enter(int room, int x, int y, int dir); /* (x, y) Frisk's top-left; no fade */ +void world_update(uint32_t keys, uint32_t pressed); +void world_draw(void); +bool world_walkable(int x, int y, int w, int h, int ignore); /* a box on the map, objects too (not `ignore`) */ +void world_camera(void); /* follows Frisk, inside the room */ +Obj *obj_new(int kind, int x, int y); +Obj *obj_find(int name); +void obj_clear_all(void); +/* the room fades out, then in: room changes in the middle */ +void world_fade_to(int room, int x, int y, int dir); +bool world_fading(void); +extern uint8_t g_fade; /* 0 clear, 255 black: drawn over the room */ +#endif diff --git a/games/undertale/tests/play.c b/games/undertale/tests/play.c new file mode 100644 index 00000000..2e339f4f --- /dev/null +++ b/games/undertale/tests/play.c @@ -0,0 +1,215 @@ +/* Plays Undertale on a computer, with scripted keys, and saves frames. + * + * play [--frames N] [--keys "10-40:right,50:z,..."] [--shots 30,60|all] [--out DIR] [--saves DIR] + * [--room N --at X,Y] [--name NAME] [--flag F=V]... [--battle ID] [--trace] + * + * --path "x,y;x,y;z;w30;..." steers Frisk to each point in turn (holding arrows), presses Z ("z"), X ("x"), + * waits ("wN": N frames) or mashes Z through talks ("talk": until no text or event is left), when the scripted + * keys don't hold anything. + * Keys: left right up down z x c home. "a-b:key" holds the key from frame a to b, "a:key" for one frame. + * --room starts a new game in room N (its ROOM_* number) with Frisk's top-left at (X, Y), past the title. + * Screenshots are DIR/shot_.ppm. */ +#include +#include +#include +#include +#include "../src/battle.h" +#include "../src/game.h" +#include "../src/gfx.h" +#include "../src/menu.h" +#include "../src/res.h" +#include "../src/world.h" + +extern uint32_t host_keys, host_time; +extern uint16_t host_fb[SCREEN_W * SCREEN_H]; +void host_shot(const char *path); +void host_save_dir(const char *d); +extern const uint8_t ut_data[]; + +typedef struct { int a, b; uint32_t k; } Hold; +static Hold holds[4096]; +static int nholds; + +#include "../src/event.h" +#include "../src/text.h" +static char path_buf[65536]; +static char *path_at; +static int path_wait, path_stuck, path_last_x, path_last_y, path_room = -1; + +/* the keys the path holds this frame (0: it's done or waiting) */ +static uint32_t path_keys(int f) { + if (!path_at || !*path_at) return 0; + if (path_wait > 0) { + path_wait--; + return 0; + } + char *end = strchr(path_at, ';'); + char tok[64]; + int n = end ? (int)(end - path_at) : (int)strlen(path_at); + snprintf(tok, sizeof tok, "%.*s", n, path_at); + char *next = end ? end + 1 : path_at + n; + if (!strcmp(tok, "z") || !strcmp(tok, "x") || !strcmp(tok, "c")) { + path_at = next; + path_wait = 1; + return tok[0] == 'z' ? K_Z : tok[0] == 'x' ? K_X : K_C; + } + if (tok[0] == 'w') { + path_wait = atoi(tok + 1); + path_at = next; + return 0; + } + if (!strcmp(tok, "talk")) { + if (!text_active() && !event_running() && g_mode == MODE_WORLD && !world_fading()) { + path_at = next; + return 0; + } + return (f & 1) ? K_Z : 0; + } + int x, y; + if (sscanf(tok, "%d,%d", &x, &y) != 2) { + path_at = next; + return 0; + } + if (g_mode != MODE_WORLD || text_active() || event_running() || world_fading()) return 0; + /* a door took him to another room: that point is reached */ + if (path_room >= 0 && g_room != path_room) { + path_room = g_room; + path_at = next; + return 0; + } + path_room = g_room; + int dx = x - pl.x, dy = y - pl.y; + if (abs(dx) <= 1 && abs(dy) <= 1) { + path_at = next; + path_stuck = 0; + return 0; + } + if (pl.x == path_last_x && pl.y == path_last_y) { + if (++path_stuck > 60) { + fprintf(stderr, "path: stuck at %d,%d on the way to %d,%d (room %d)\n", pl.x, pl.y, x, y, g_room); + path_at = next, path_stuck = 0; + } + } else + path_stuck = 0; + path_last_x = pl.x, path_last_y = pl.y; + uint32_t k = 0; + if (dx > 1) k |= K_RIGHT; + if (dx < -1) k |= K_LEFT; + if (dy > 1) k |= K_DOWN; + if (dy < -1) k |= K_UP; + return k; +} + +static uint32_t key_bit(const char *s) { + static const struct { const char *n; uint32_t k; } keys[] = { + {"left", K_LEFT}, {"right", K_RIGHT}, {"up", K_UP}, {"down", K_DOWN}, {"z", K_Z}, {"x", K_X}, {"c", K_C}, + {"home", K_HOME}}; + for (size_t i = 0; i < sizeof keys / sizeof keys[0]; i++) + if (!strcmp(s, keys[i].n)) return keys[i].k; + fprintf(stderr, "unknown key %s\n", s); + exit(2); +} + +static void parse_keys(const char *spec) { + char buf[65536]; + snprintf(buf, sizeof buf, "%s", spec); + for (char *t = strtok(buf, ","); t; t = strtok(NULL, ",")) { + int a, b; + char k[32]; + if (sscanf(t, "%d-%d:%31s", &a, &b, k) == 3) holds[nholds++] = (Hold){a, b, key_bit(k)}; + else if (sscanf(t, "%d:%31s", &a, k) == 2) holds[nholds++] = (Hold){a, a, key_bit(k)}; + else fprintf(stderr, "bad key %s\n", t), exit(2); + } +} + +int main(int argc, char **argv) { + const char *out = "build/play", *saves = NULL, *shots = ""; + int frames = 120, room = -1, ax = 0, ay = 0, battle = -1; + const char *name = NULL; + int nflags = 0, fl[64][2]; + bool trace = false, coll = false; + for (int i = 1; i < argc; i++) { + if (!strcmp(argv[i], "--frames") && i + 1 < argc) frames = atoi(argv[++i]); + else if (!strcmp(argv[i], "--keys") && i + 1 < argc) parse_keys(argv[++i]); + else if (!strcmp(argv[i], "--path") && i + 1 < argc) snprintf(path_buf, sizeof path_buf, "%s", argv[++i]), path_at = path_buf; + else if (!strcmp(argv[i], "--shots") && i + 1 < argc) shots = argv[++i]; + else if (!strcmp(argv[i], "--out") && i + 1 < argc) out = argv[++i]; + else if (!strcmp(argv[i], "--saves") && i + 1 < argc) saves = argv[++i]; + else if (!strcmp(argv[i], "--room") && i + 1 < argc) room = atoi(argv[++i]); + else if (!strcmp(argv[i], "--at") && i + 1 < argc) sscanf(argv[++i], "%d,%d", &ax, &ay); + else if (!strcmp(argv[i], "--name") && i + 1 < argc) name = argv[++i]; + else if (!strcmp(argv[i], "--battle") && i + 1 < argc) battle = atoi(argv[++i]); + else if (!strcmp(argv[i], "--flag") && i + 1 < argc && nflags < 64) { + sscanf(argv[++i], "%d=%d", &fl[nflags][0], &fl[nflags][1]); + nflags++; + } else if (!strcmp(argv[i], "--trace")) trace = true; + else if (!strcmp(argv[i], "--coll")) coll = true; + else fprintf(stderr, "unknown option %s\n", argv[i]), exit(2); + } + mkdir(out, 0755); + char sd[512]; + snprintf(sd, sizeof sd, "%s/saves", out); + if (!saves) saves = sd; + mkdir(saves, 0755); + host_save_dir(saves); + ut_bin = ut_data; + game_init(); + if (room >= 0 || name) { + game_new(name ? name : "Frisk"); + if (room >= 0) { + if (!ax && !ay) { + RoomInfo ri; + room_info(room, &ri); + ax = ri.x + ri.w / 2 - 10, ay = ri.y + ri.h / 2 - 15; + } + world_enter(room, ax, ay, DIR_DOWN); + } + } + for (int i = 0; i < nflags; i++) set_flag(fl[i][0], fl[i][1]); + if (battle >= 0) battle_start(battle); + bool all = !strcmp(shots, "all"); + for (int f = 0; f < frames && g_running; f++) { + uint32_t k = 0; + for (int i = 0; i < nholds; i++) + if (f >= holds[i].a && f <= holds[i].b) k |= holds[i].k; + if (!k) k = path_keys(f); + host_keys = k; + host_time += 33; + game_frame(k); + game_draw(); + if (trace) printf("%d mode %d room %d frisk %d,%d cam %d,%d hp %d\n", f, g_mode, g_room, pl.x, pl.y, cam_x, cam_y, sv.hp); + char want[16]; + snprintf(want, sizeof want, "%d", f); + bool shoot = all; + if (!shoot) { + const char *p = shots; + size_t n = strlen(want); + while ((p = strstr(p, want))) { + if ((p == shots || p[-1] == ',') && (p[n] == ',' || !p[n])) { + shoot = true; + break; + } + p += n; + } + } + if (shoot && coll && world_room_info()) { + /* the walkable cells tinted green, the others red */ + const RoomInfo *r = world_room_info(); + for (int y = 0; y < SCREEN_H; y++) + for (int x = 0; x < SCREEN_W; x++) { + int wx = x + cam_x, wy = y + cam_y, cx = (wx - r->x) >> 2, cy = (wy - r->y) >> 2; + if (wx < r->x || wy < r->y || cx >= r->cw || cy >= r->ch) continue; + bool w = r->coll[cy * ((r->cw + 7) >> 3) + (cx >> 3)] >> (cx & 7) & 1; + uint16_t c = host_fb[y * SCREEN_W + x]; + host_fb[y * SCREEN_W + x] = w ? (uint16_t)((c >> 1 & 0x7BEF) | 0x0400) : (uint16_t)((c >> 1 & 0x7BEF) | 0x8000); + } + } + if (shoot) { + char path[600]; + snprintf(path, sizeof path, "%s/shot_%d.ppm", out, f); + host_shot(path); + } + } + if (gfx_dropped) printf("dropped %d draw commands\n", gfx_dropped); + return 0; +} diff --git a/games/undertale/tools/fetch.py b/games/undertale/tools/fetch.py new file mode 100644 index 00000000..708a6fba --- /dev/null +++ b/games/undertale/tools/fetch.py @@ -0,0 +1,134 @@ +#!/usr/bin/env python3 +"""Gathers the public material the pack is made from, into REF (not committed): + + python3 -I tools/fetch.py REF + +- REF/wiki/maps/*.png: the Undertale Wiki's maps of each area (undertale.wiki, Category:Maps): every room, + one pixel for one, laid out as in the game +- REF/wiki/sprites/*: the wiki's sprite files (Category:Overworld sprites, Battle sprites, Face sprites, + Sprites, Item files), as their own names +- REF/wiki/pages/*.txt: the wiki's pages (their wikitext) that the game's texts are checked against +- REF/demo/: the free demo from undertale.com (its Mac build keeps its sprites and backgrounds as PNG files) +- REF/fonts/: Pixel Operator (CC0), by Jayvee Enaguas, once called 8-bit Operator: the font the game credits + +Files already there are kept: run it again to fetch only what is missing.""" +import json +import os +import sys +import time +import urllib.parse +import urllib.request +import zipfile + +API = "https://undertale.wiki/api.php" +UA = {"User-Agent": "NumPlay-Undertale/1.0 (fan port for the NumWorks calculator; one-time asset fetch)"} +CATEGORIES = { + "maps": ["Maps"], + "sprites": ["Overworld_sprites", "Battle_sprites", "Face_sprites", "Sprites", "Item_files", "Location_files"], +} +PAGES = ["Ruins", "Ruins/Puzzles", "Toriel", "Toriel/In_battle", "Toriel's_Home", "Flowey", "Napstablook", + "Cell_Phone/Toriel", "SAVE_Point", "Froggit", "Whimsun", "Moldsmal", "Loox", "Vegetoid", "Migosp", + "Dummy", "Froggit_NPC", "Spider_Bake_Sale", "Items", "Monster_Candy", "Spider_Donut", "Spider_Cider", + "Butterscotch_Pie", "Snail_Pie", "Toy_Knife", "Faded_Ribbon", "Bandage", "Stick", "LOVE", "EXP", + "HP", "AT", "DF", "Stats", "FIGHT", "ACT", "MERCY", "ITEM", "Flowey/In_battle", "Napstablook/In_battle", + "Encounter", "Home", "Annoying_Dog", "Rock", "Mouse", "Golden_flower", "Chara", "Frisk", "Name", + "Item", "Consumables", "Weapons", "Armor", "Cell_Phone", "Intro", "Game_Over", "Damage", "Monster_Candy", + "Toriel's_Home", "Blue_SOUL", "Bullet_board", "Spare", "Flee", "Gold", "Save"] +DEMO = { + "MacUnderTale.zip": "https://thisisatestofthevideogamedeliverysystem.sfo2.digitaloceanspaces.com/game/MacUnderTale.zip", +} +FONT = ("pixel_operator.zip", "https://dl.dafont.com/dl/?f=pixel_operator") + + +def get(url, tries=4): + for t in range(tries): + try: + with urllib.request.urlopen(urllib.request.Request(url, headers=UA), timeout=60) as r: + return r.read() + except Exception as e: # network hiccups: wait and try again + if t == tries - 1: + raise + print(" retry", url, e) + time.sleep(2 ** (t + 1)) + + +def api(**q): + q["format"] = "json" + return json.loads(get(API + "?" + urllib.parse.urlencode(q))) + + +def category_files(cat): + out, cont = [], {} + while True: + d = api(action="query", list="categorymembers", cmtitle="Category:" + cat, cmlimit=500, cmtype="file", **cont) + out += [m["title"] for m in d["query"]["categorymembers"]] + if "continue" not in d: + return out + cont = {"cmcontinue": d["continue"]["cmcontinue"]} + + +def file_url(title): + d = api(action="query", prop="imageinfo", iiprop="url", titles=title) + for p in d["query"]["pages"].values(): + if "imageinfo" in p: + return p["imageinfo"][0]["url"].split("?")[0] + return None + + +def save(path, data): + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path + ".part", "wb") as f: + f.write(data) + os.replace(path + ".part", path) + + +def main(): + if len(sys.argv) != 2: + sys.exit(__doc__) + ref = sys.argv[1] + for kind, cats in CATEGORIES.items(): + for cat in cats: + for title in category_files(cat): + name = title.split(":", 1)[1].replace(" ", "_") + path = os.path.join(ref, "wiki", kind, name) + if os.path.exists(path): + continue + url = file_url(title) + if url: + print(kind, name) + save(path, get(url)) + for page in PAGES: + path = os.path.join(ref, "wiki", "pages", page.replace("/", "__") + ".txt") + if os.path.exists(path): + continue + d = api(action="parse", page=page.replace("_", " "), prop="wikitext", redirects=1) + if "parse" in d: + print("page", page) + save(path, d["parse"]["wikitext"]["*"].encode()) + for name, url in DEMO.items(): + path = os.path.join(ref, "demo", name) + if not os.path.exists(path): + print("demo", name) + save(path, get(url)) + out = os.path.join(ref, "demo", "mac") + if not os.path.exists(out): + with zipfile.ZipFile(path) as z: + for m in z.namelist(): + if "/MacOS/sprites/" in m or "/MacOS/bgs/" in m or m.endswith("_manifest.txt"): + if m.startswith("__MACOSX") or m.endswith("/"): + continue + save(os.path.join(out, *m.split("/MacOS/")[1].split("/")), z.read(m)) + path = os.path.join(ref, "fonts", FONT[0]) + if not os.path.exists(path): + print("font", FONT[0]) + save(path, get(FONT[1])) + with zipfile.ZipFile(path) as z: + for m in z.namelist(): + if m.endswith(".ttf") or m.endswith(".txt"): + dst = os.path.join(ref, "fonts", os.path.basename(m)) + if not os.path.exists(dst): + save(dst, z.read(m)) + + +if __name__ == "__main__": + main() diff --git a/games/undertale/tools/pack.py b/games/undertale/tools/pack.py new file mode 100644 index 00000000..0b03f50f --- /dev/null +++ b/games/undertale/tools/pack.py @@ -0,0 +1,468 @@ +#!/usr/bin/env python3 +"""Undertale's pictures, rooms and fonts -> src/data.bin + src/data.h. + + python3 -I tools/pack.py REF (REF: the folder tools/fetch.py filled) + +data.bin: "UTD1", the number of sections, their offsets, then the sections (SEC_* in data.h): +- SPRITES: for each sprite (SPR_*) its first frame and its number of frames (u16, u16) +- FRAMES: each frame: w, h, origin x, y (u16, u16, s16, s16), bpp, colours (u8, u8), the colours (RGB565), + each row's offset (u16) from the rows' data, then the rows: runs of (skip, length, length pixels of bpp bits, + lowest first, the run padded to a byte), until the row's width +- TILES: the areas' 20 x 20 tiles: bpp (0: one colour), colours, the colours (RGB565), 400 pixels of bpp bits +- ROOMS: 32 bytes each (res.c room_info): the room's rectangle on its area's map, its tile grid and + collision map (4-pixel cells, 1 walkable), its area, flags and name +- GRID, COLL: the rooms' tile ids (u16, 0xFFFF none) and collision bits +- FONTS: height, first character, count, flags, then 8 bytes a glyph (advance, w, h, ox, oy, 0, + bitmap offset u16) and the bitmaps (rows of whole bytes, highest bit first) +- STRINGS: the room names and other texts the data refers to +- DOORS: for each room its first door and how many (u16, u16), then the doors: 16 bytes each (x, y, w, h on + the map, the room it leads to, where Frisk's top-left lands, the way he faces)""" +import os +import struct +import sys + +import numpy as np +from PIL import Image, ImageDraw, ImageFont, ImageSequence + +HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, HERE) +import rooms as R # noqa: E402 +import sprites as S # noqa: E402 + +OUT_BIN = os.path.join(HERE, "..", "src", "data.bin") +OUT_H = os.path.join(HERE, "..", "src", "data.h") +SECTIONS = ["SPRITES", "FRAMES", "TILES", "ROOMS", "GRID", "COLL", "FONTS", "STRINGS", "DOORS"] + + +def rgb565(r, g, b): + r, g, b = int(r), int(g), int(b) + return ((r * 31 + 127) // 255) << 11 | ((g * 63 + 127) // 255) << 5 | ((b * 31 + 127) // 255) + + +class Strings: + def __init__(self): + self.list, self.ids = [], {} + + def add(self, s): + if s not in self.ids: + self.ids[s] = len(self.list) + self.list.append(s) + return self.ids[s] + + def blob(self): + out, offs = bytearray(), [] + base = 4 + 4 * len(self.list) + for s in self.list: + offs.append(base + len(out)) + out += s.encode("latin-1") + b"\0" + return struct.pack("> 3] |= v << (b & 7) + return out + + +def bpp_for(n): + return 1 if n <= 2 else 2 if n <= 4 else 4 if n <= 16 else 8 + + +# ------------------------------------------------------------------ frames +def encode_frame(img, ox, oy): + """an RGBA image -> the frame's bytes (row RLE)""" + a = np.array(img.convert("RGBA")) + h, w = a.shape[:2] + opaque = a[:, :, 3] >= 128 + cols = {} + for c in map(tuple, a[opaque][:, :3]): + k = rgb565(*c) + cols[k] = cols.get(k, 0) + 1 + pal = sorted(cols, key=lambda k: -cols[k]) + if len(pal) > 255: + raise ValueError("a frame with more than 255 colours") + index = {k: i for i, k in enumerate(pal)} + bpp = bpp_for(max(len(pal), 1)) + rows, data = [], bytearray() + for y in range(h): + rows.append(len(data)) + x = 0 + while x < w: + skip = 0 + while x < w and not opaque[y, x] and skip < 255: + x += 1 + skip += 1 + run = [] + while x < w and opaque[y, x] and len(run) < 255: + run.append(index[rgb565(*a[y, x, :3])]) + x += 1 + data += bytes([skip, len(run)]) + bits_pack(run, bpp) + if len(data) > 0xFFFF: + raise ValueError("a frame too big") + head = struct.pack(" the game's size (the phase where 2 x 2 blocks agree)""" + a = np.array(img.convert("RGBA")).astype(np.int32) + h, w = a.shape[:2] + best = None + for py in (0, 1): + for px in (0, 1): + b = a[py:py + (h - py) // 2 * 2, px:px + (w - px) // 2 * 2] + if not b.size: + continue + q = b.reshape(b.shape[0] // 2, 2, b.shape[1] // 2, 2, 4) + err = np.abs(q - q[:, :1, :, :1]).sum() + if best is None or err < best[0]: + best = (err, py, px) + _, py, px = best + b = a[py::2, px::2] + return Image.fromarray(b.astype(np.uint8), "RGBA") + + +def load_frames(ref, src): + """'demo:spr_name' (all its numbered frames), 'wiki:File.png' or .gif (all frames, halved), 'png:path'""" + kind, name = src.split(":", 1) + if kind == "demo": + d = os.path.join(ref, "demo", "mac", "sprites") + out, k = [], 0 + while os.path.exists(os.path.join(d, "%s %d.png" % (name, k))): + out.append(Image.open(os.path.join(d, "%s %d.png" % (name, k))).convert("RGBA")) + k += 1 + if not out: + raise FileNotFoundError(src) + return out + if kind == "demobg": + return [Image.open(os.path.join(ref, "demo", "mac", "bgs", name + ".png")).convert("RGBA")] + if kind in ("wiki", "wiki1"): + im = Image.open(os.path.join(ref, "wiki", "sprites", name)) + frames = [] + for fr in ImageSequence.Iterator(im): + f = fr.convert("RGBA") + frames.append(halve(f) if kind == "wiki" else f) + return frames + if kind == "png": + return [Image.open(os.path.join(HERE, name)).convert("RGBA")] + raise ValueError(src) + + +def crop_frames(frames): + """all frames cropped to the union of their opaque pixels; returns the frames and the crop's top-left""" + box = None + for f in frames: + b = f.getchannel("A").point(lambda v: 255 if v >= 128 else 0).getbbox() + if b: + box = b if box is None else (min(box[0], b[0]), min(box[1], b[1]), max(box[2], b[2]), max(box[3], b[3])) + if box is None: + return frames, 0, 0 + return [f.crop(box) for f in frames], box[0], box[1] + + +# ------------------------------------------------------------------ fonts +def make_font(ref, spec): + path = os.path.join(ref, "fonts", spec["ttf"]) if not spec["ttf"].startswith("/") else spec["ttf"] + font = ImageFont.truetype(path, spec["size"]) + first, last = 32, 127 + glyphs, bits = bytearray(), bytearray() + asc = spec.get("ascent", spec["size"]) + for c in range(first, last): + ch = chr(c) if c < 127 else "♥" + if c == 127 and "heart" not in spec: + ch = "?" + im = Image.new("L", (spec["size"] * 3, spec["size"] * 3), 0) + d = ImageDraw.Draw(im) + d.fontmode = "1" + d.text((spec["size"], spec["size"]), ch, font=font, fill=255) + adv = int(round(font.getlength(ch))) if "advance" not in spec else spec["advance"] + bb = im.getbbox() + if bb is None: + glyphs += struct.pack("= 128 + gh, gw = g.shape + ox, oy = bb[0] - spec["size"], bb[1] - spec["size"] - (spec["size"] - asc) + off = len(bits) + for row in g: + rb = bytearray((gw + 7) // 8) + for x, v in enumerate(row): + if v: + rb[x >> 3] |= 0x80 >> (x & 7) + bits += rb + glyphs += struct.pack("= 0.5 + # walls drawn in the floor's colours give themselves away by their lines: a cell is floor only with no + # other colour within `margin` pixels of it + margin = r.get("margin", area.spec.get("margin", 0)) + if margin: + other = ~sub + pad = np.pad(other, margin, constant_values=False) + near = np.zeros_like(other) + for dy in range(2 * margin + 1): + for dx in range(2 * margin + 1): + near |= pad[dy:dy + other.shape[0], dx:dx + other.shape[1]] + cells &= ~near.reshape(ch, 4, cw, 4).any(axis=(1, 3)) + if r.get("floor_rects"): + keep = np.zeros_like(cells) + for fx, fy, fw, fh in r["floor_rects"]: + keep[max(0, (fy - y) // 4):max(0, (fy + fh - y + 3) // 4), max(0, (fx - x) // 4):max(0, (fx + fw - x + 3) // 4)] = True + cells &= keep + for kind, fx, fy, fw, fh in r.get("fix", []): + cells[max(0, (fy - y) // 4):max(0, (fy + fh - y + 3) // 4), max(0, (fx - x) // 4):max(0, (fx + fw - x + 3) // 4)] = kind == "walk" + out = bytearray() + for row in cells: + rb = bytearray((cw + 7) // 8) + for i, v in enumerate(row): + if v: + rb[i >> 3] |= 1 << (i & 7) + out += rb + return out, cw, ch + + +class TileSet: + def __init__(self): + self.ids, self.blobs = {}, [] + self.blobs_size = 0 + + def add(self, block): + """a 20 x 20 block of RGB565 values -> its tile id""" + key = block.tobytes() + if key in self.ids: + return self.ids[key] + flat = block.reshape(-1) + cols, counts = np.unique(flat, return_counts=True) + order = [int(c) for c, _ in sorted(zip(cols, counts), key=lambda t: -t[1])] + if len(order) == 1: + blob = struct.pack(" 2 else {} + imgs = [] + for s in (src if isinstance(src, list) else [src]): + imgs += load_frames(ref, s) + if "frames" in opts: + imgs = [imgs[i] for i in opts["frames"]] + if "scale" in opts: + imgs = [im.resize((im.width * opts["scale"], im.height * opts["scale"]), Image.NEAREST) for im in imgs] + w0, h0 = imgs[0].size + ox, oy = opts.get("origin", (0, 0)) + if opts.get("center"): + ox, oy = w0 // 2, h0 // 2 + if opts.get("feet"): + ox, oy = w0 // 2, h0 + if not opts.get("keep"): + imgs, cx, cy = crop_frames(imgs) + ox, oy = ox - cx, oy - cy + spr_entries.append((len(frames), len(imgs))) + for im in imgs: + frames.append(encode_frame(im, ox, oy)) + defines.append(("SPR_" + name.upper(), k)) + sec_sprites = struct.pack(" Date: Wed, 14 Oct 2026 18:20:42 +0000 Subject: [PATCH 02/19] Undertale: battles (FIGHT, ACT, ITEM, MERCY, the bullet board), the Ruins' monsters, menus and saves The battle at the original's size halved: its box, buttons, FIGHT's target and bar, damage, speech bubbles, the SOUL and bullets. The Ruins' monsters with their stats, texts, ACTs and attacks as the Undertale Wiki records them: the Dummy, Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel, and Flowey's first meeting. The intro, title, naming (with the game's replies to special names), the C menu (ITEM, STAT, CELL), SAVE, GAME OVER; saves copied into undertale_saves.py. --- games/undertale/src/battle.c | 734 ++++++++++++++++++++++++++++++- games/undertale/src/battle.h | 162 ++++++- games/undertale/src/bullets.c | 149 ++++++- games/undertale/src/data.h | 132 ++++-- games/undertale/src/events.h | 2 + games/undertale/src/flowey.c | 211 +++++++++ games/undertale/src/game.c | 3 +- games/undertale/src/menu.c | 504 ++++++++++++++++++++- games/undertale/src/menu.h | 1 + games/undertale/src/monsters.c | 696 +++++++++++++++++++++++++++++ games/undertale/src/monsters.h | 23 + games/undertale/src/save.c | 176 +++++++- games/undertale/src/save.h | 2 + games/undertale/src/toriel.c | 252 +++++++++++ games/undertale/tools/pack.py | 44 +- games/undertale/tools/sprites.py | 47 +- 16 files changed, 3072 insertions(+), 66 deletions(-) create mode 100644 games/undertale/src/flowey.c create mode 100644 games/undertale/src/monsters.c create mode 100644 games/undertale/src/monsters.h create mode 100644 games/undertale/src/toriel.c diff --git a/games/undertale/src/battle.c b/games/undertale/src/battle.c index e5d1c077..e6118f21 100644 --- a/games/undertale/src/battle.c +++ b/games/undertale/src/battle.c @@ -1,9 +1,733 @@ -/* Battles (battle.h). */ +/* Battles: the turns, the menus, FIGHT's bar, the box, the end (battle.h). */ +#include +#include #include "battle.h" #include "game.h" +#include "gfx.h" +#include "items.h" +#include "res.h" +#include "save.h" +#include "text.h" +#include "menu.h" +#include "monsters.h" +#include "world.h" + +void flowey_battle_start(void); /* flowey.c */ +void flowey_battle_update(uint32_t keys, uint32_t pressed); +void flowey_battle_draw(void); + +Battle bt; static bool over = true; -void battle_start(int id) { (void)id; over = true; } +static int heart_x, heart_y; /* the SOUL's start, from Frisk */ +static int prev_mode; + +enum { + P_INTRO, P_MENU, P_TARGET, P_ACTS, P_ITEMS, P_MERCY, P_BAR, P_STRIKE, P_RESULT, P_TALK, P_BOX_IN, P_ATTACK, + P_BOX_OUT, P_WON, P_FLEE, P_DEATH, P_END +}; +enum { B_FIGHT, B_ACT, B_ITEM, B_MERCY }; + +static const int16_t button_x[4] = {16, 92, 172, 250}; +#define BUTTON_Y 216 + +/* ---------------------------------------------------------------- the box */ +static void box_to(int x0, int y0, int x1, int y1) { bt.tx0 = (int16_t)x0, bt.ty0 = (int16_t)y0, bt.tx1 = (int16_t)x1, bt.ty1 = (int16_t)y1; } +static void box_menu(void) { box_to(BOX_X0, BOX_Y0, BOX_X1, BOX_Y1); } +void board_set(int w, int h) { + int cx = 160, y1 = BOX_Y1; + box_to(cx - w / 2, y1 - h, cx + (w + 1) / 2, y1); +} +void board_set_rect(int x0, int y0, int x1, int y1) { box_to(x0, y0, x1, y1); } +int board_cx(void) { return (bt.x0 + bt.x1) / 2; } +int board_cy(void) { return (bt.y0 + bt.y1) / 2; } +static bool box_settled(void) { return bt.x0 == bt.tx0 && bt.y0 == bt.ty0 && bt.x1 == bt.tx1 && bt.y1 == bt.ty1; } +static int16_t approach(int16_t v, int16_t t, int step) { + if (v < t) return (int16_t)(v + step > t ? t : v + step); + if (v > t) return (int16_t)(v - step < t ? t : v - step); + return v; +} +static void box_step(void) { + bt.x0 = approach(bt.x0, bt.tx0, 12), bt.x1 = approach(bt.x1, bt.tx1, 12); + bt.y0 = approach(bt.y0, bt.ty0, 8), bt.y1 = approach(bt.y1, bt.ty1, 8); +} + +/* ---------------------------------------------------------------- texts */ +static void say(const char *s) { + if (s != bt.text) snprintf(bt.text, sizeof bt.text, "%s", s); + writer_start(&bt.w, bt.text, 26, 133, FONT_MAIN); + bt.w.line_h = 16; +} + +int count_alive(void) { + int n = 0; + for (int i = 0; i < bt.nmon; i++) n += bt.mon[i].alive && !bt.mon[i].gone; + return n; +} + +static const char *flavor_text(void) { + /* a monster's own, else one of its neutral texts, low HP's or spareable's */ + int alive[MAX_MON], n = 0; + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].alive && !bt.mon[i].gone) alive[n++] = i; + if (!n) return ""; + Monster *m = &bt.mon[alive[rnd_n(n)]]; + const MonDef *d = m->def; + if (d->flavor) { + const char *s = d->flavor(&bt, m); + if (s) return s; + } + if (m->spare && d->spareable) return d->spareable; + if (m->hp < m->maxhp / 3 && d->low_hp) return d->low_hp; + int k = 0; + while (k < 6 && d->neutral[k]) k++; + return k ? d->neutral[rnd_n(k)] : ""; +} + +/* ---------------------------------------------------------------- the start and the end */ +void battle_start(int form) { + memset(&bt, 0, sizeof bt); + bt.form = form; + bt.atk = -1; + form_setup(form, &bt); + for (int i = 0; i < bt.nmon; i++) { + Monster *m = &bt.mon[i]; + const MonDef *d = m->def; + if (!m->maxhp) m->hp = m->maxhp = d->hp; + if (!m->at) m->at = d->at; + if (!m->df) m->df = d->df; + if (!m->exp) m->exp = d->exp; + if (!m->gold) m->gold = d->gold; + m->alive = true; + m->spare = d->flags & MF_SPARE_START; + } + bt.x0 = bt.tx0 = BOX_X0, bt.y0 = bt.ty0 = BOX_Y0, bt.x1 = bt.tx1 = BOX_X1, bt.y1 = bt.ty1 = BOX_Y1; + bt.speed = 2 * FX; + bt.hp_shown = sv.hp; + heart_x = pl.x + 10 - cam_x, heart_y = pl.y + 17 - cam_y; + prev_mode = g_mode; + g_mode = MODE_BATTLE; + bt.phase = P_INTRO; + bt.t = 0; + say(form_text(form)); + bt.w.finished = true; /* (typed once the intro is over) */ + if (form == FORM_FLOWEY) flowey_battle_start(); + over = false; + bullets_clear(); +} + bool battle_over(void) { return over; } -int battle_result(void) { return BR_SPARED; } -void battle_update(uint32_t keys, uint32_t pressed) { (void)keys, (void)pressed; } -void battle_draw(void) {} +int battle_result(void) { return bt.result; } + +static void battle_end(int result) { + bt.result = result; + bt.phase = P_END; + over = true; + bullets_clear(); + if (result == BR_DIED) { + menu_gameover_open(); + return; + } + g_mode = MODE_WORLD; + world_camera(); +} + +/* ---------------------------------------------------------------- FIGHT */ +static int fight_damage(Monster *m, int dist) { + /* the game's: (AT + weapon - DEF + a little luck), times how near the middle the bar was stopped */ + int at = sv.at + weapon_at(); + float base = (float)(at - m->df + rnd_n(3)); + float stretch = dist <= 12 ? 2.2f : (1.0f - (float)dist / 273.0f) * 2.0f; + int dmg = (int)(base * stretch + 0.5f); + if (m->def->flags & MF_ONE_HIT) dmg = m->hp; + return dmg < 0 ? 0 : dmg; +} + +static void strike(void) { + Monster *m = &bt.mon[bt.target]; + /* the bar's distance from the middle, in the original's pixels */ + int x = bt.bar_x / FX; /* 0..281 across the target */ + int dist = abs_i(x - 140) * 2; + int dmg = bt.bar_x < 0 ? -1 : fight_damage(m, dist); + bt.strike_dmg = dmg; + bt.phase = P_STRIKE; + bt.t = 0; +} + +static void after_player_turn(void); + +static void strike_land(void) { + Monster *m = &bt.mon[bt.target]; + int dmg = bt.strike_dmg; + m->dmg_shown = (int16_t)dmg, m->dmg_t = 45; + m->bar_shown = m->hp; + if (dmg <= 0 && (m->def->flags & MF_MISS_IS_SPARE) && m->def->on_spare) m->def->on_spare(&bt, m); + if (dmg > 0) { + if (m->def->on_hit && m->def->on_hit(&bt, m, dmg)) return; + m->hp = (int16_t)(m->hp - dmg); + m->hurt = 30, m->shake = 8; + if (m->hp <= 0) { + m->hp = 0; + m->killed = true; + } + } +} + +/* ---------------------------------------------------------------- the turns */ +static void begin_menu(void) { + bt.phase = P_MENU; + box_menu(); + say(flavor_text()); + bt.turn++; +} + +static void begin_talk(void) { + bt.phase = P_TALK; + bt.t = 0; + for (int i = 0; i < bt.nmon; i++) { + Monster *m = &bt.mon[i]; + m->say = NULL; + if (!m->alive || m->gone) continue; + if (m->def->talk) m->say = m->def->talk(&bt, m); + else { + int k = 0; + while (k < 6 && m->def->quotes[k]) k++; + if (k) m->say = m->def->quotes[rnd_n(k)]; + } + } + bt.talk_i = -1; + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].say) { + bt.talk_i = i; + break; + } + if (bt.talk_i >= 0) { + writer_start(&bt.bw, bt.mon[bt.talk_i].say, 0, 0, FONT_SMALL); + bt.bw.line_h = 9; + } +} +static bool all_gone(void); +static void win(void); + +static void begin_attack(void) { + /* the attack: one of the monsters' (at random among those alive) */ + int who[MAX_MON], n = 0; + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].alive && !bt.mon[i].gone && bt.mon[i].def->attack) who[n++] = i; + if (!n) { + begin_menu(); + return; + } + int i = who[rnd_n(n)]; + bt.atk_owner = i; + bt.atk = bt.mon[i].def->attack(&bt, &bt.mon[i]); + if (bt.atk < 0) { + begin_menu(); + return; + } + bt.atk_len = attack_length(bt.atk); + bt.atk_t = 0; + board_set(BOARD_W, BOARD_H); + attack_run(&bt, bt.atk, -1); /* (t -1: the attack sets its board) */ + bt.phase = P_BOX_IN; + bullets_clear(); +} + +static void win(void) { + int exp = 0, gold = 0; + for (int i = 0; i < bt.nmon; i++) { + if (bt.mon[i].killed) exp += bt.mon[i].exp, gold += bt.mon[i].gold; + else if (bt.mon[i].gone) gold += bt.mon[i].spare_gold; + } + gold += bt.gold_won; + sv.gold = (uint16_t)min_i(sv.gold + gold, 9999); + bool up = gain_exp(exp); + bt.exp_won = exp, bt.gold_won = gold; + char s[200]; + snprintf(s, sizeof s, "* YOU WON!\n* You earned %d EXP and %d gold.%s", exp, gold, up ? "\n* Your LOVE increased." : ""); + say(s); + bt.phase = P_WON; + box_menu(); + bullets_clear(); +} + +static bool all_gone(void) { return count_alive() == 0; } + +static void after_player_turn(void) { + if (all_gone()) { + bool any_killed = false; + for (int i = 0; i < bt.nmon; i++) any_killed |= bt.mon[i].killed; + if (any_killed || bt.gold_won) win(); + else { + bt.result = BR_SPARED; + win(); + } + return; + } + begin_talk(); +} + +static void do_spare(void) { + bool any = false; + bt.last_action = 3; + for (int i = 0; i < bt.nmon; i++) { + Monster *m = &bt.mon[i]; + if (m->alive && !m->gone && m->spare) m->gone = true, m->fade = 1, any = true; + else if (m->alive && !m->gone && m->def->on_spare) m->def->on_spare(&bt, m); + } + (void)any; + bt.text[0] = 0; + if (all_gone()) { + win(); + return; + } + after_player_turn(); +} + +static void do_flee(void) { + bool can = !bt.no_flee; + bt.last_action = 4; + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].alive && !bt.mon[i].gone && (bt.mon[i].def->flags & MF_BOSS)) can = false; + if (!can) { + after_player_turn(); + return; + } + bool ok = sv.armor == ITEM_BANDAGE || rnd_n(100) < 50 + 10 * bt.turn; + if (!ok) { + after_player_turn(); + return; + } + static const char *const lines[] = {"* Escaped...", "* I'm outta here.", "* I've got better to do.", "* Don't slow me down."}; + say(lines[rnd_n(4)]); + bt.phase = P_FLEE; + bt.t = 0; +} + +/* ---------------------------------------------------------------- input */ +static int alive_index(int k) { /* the k-th monster still there */ + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].alive && !bt.mon[i].gone && k-- == 0) return i; + return -1; +} + +static void menu_input(uint32_t pressed) { + switch (bt.phase) { + case P_MENU: + if (pressed & K_LEFT) bt.button = (bt.button + 3) & 3; + if (pressed & K_RIGHT) bt.button = (bt.button + 1) & 3; + if (pressed & K_Z) { + bt.target = 0, bt.act = 0, bt.item = 0, bt.mercy = 0, bt.page = 0; + if (bt.button == B_FIGHT || bt.button == B_ACT) bt.phase = P_TARGET; + else if (bt.button == B_ITEM) { + if (item_count()) bt.phase = P_ITEMS; + } else bt.phase = P_MERCY; + } + break; + case P_TARGET: { + int n = count_alive(); + if (pressed & K_UP) bt.target = (bt.target + n - 1) % n; + if (pressed & K_DOWN) bt.target = (bt.target + 1) % n; + if (pressed & K_X) bt.phase = P_MENU; + if (pressed & K_Z) { + if (bt.button == B_FIGHT) { + bt.last_action = 0; + bt.target = alive_index(bt.target); + bt.phase = P_BAR; + bt.bar_dir = (sv.weapon == ITEM_TOY_KNIFE && rnd_n(2)) ? -1 : 1; + bt.bar_x = bt.bar_dir > 0 ? 0 : 281 * FX; + bt.t = 0; + } else { + bt.phase = P_ACTS; + bt.act = 0; + } + } + break; + } + case P_ACTS: { + int m = alive_index(bt.target); + int n = 1 + bt.mon[m].def->nacts; + if (pressed & K_LEFT && bt.act % 2) bt.act--; + if (pressed & K_RIGHT && !(bt.act % 2) && bt.act + 1 < n) bt.act++; + if (pressed & K_UP && bt.act >= 2) bt.act -= 2; + if (pressed & K_DOWN && bt.act + 2 < n) bt.act += 2; + if (pressed & K_X) bt.phase = P_TARGET; + if (pressed & K_Z) { + Monster *mo = &bt.mon[m]; + bt.target = m; + bt.last_action = 1; + if (bt.act == 0) { + snprintf(bt.text, sizeof bt.text, "* %s - ATK %d DEF %d\n* %s", mo->def->name, mo->at, mo->df, mo->def->check); + for (char *p = bt.text + 2; *p && *p != ' '; p++) + if (*p >= 'a' && *p <= 'z') *p = (char)(*p - 32); + } else { + bt.text[0] = 0; + mo->acts[bt.act - 1]++; + if (mo->def->act) mo->def->act(&bt, mo, bt.act - 1, bt.text, sizeof bt.text); + } + say(bt.text); + bt.phase = P_RESULT; + } + break; + } + case P_ITEMS: { + int n = item_count(); + if (pressed & K_LEFT) bt.item = bt.item % 2 ? bt.item - 1 : (bt.item >= 4 ? bt.item - 3 : bt.item); + if (pressed & K_RIGHT) bt.item = !(bt.item % 2) && bt.item + 1 < n ? bt.item + 1 : (bt.item % 2 && bt.item + 3 < n ? bt.item + 3 : bt.item); + if (pressed & K_UP && bt.item % 4 >= 2) bt.item -= 2; + if (pressed & K_DOWN && bt.item % 4 < 2 && bt.item + 2 < n) bt.item += 2; + if (bt.item >= n) bt.item = n - 1; + if (pressed & K_X) bt.phase = P_MENU; + if (pressed & K_Z) { + bt.last_action = 2; + item_use(bt.item, bt.text, sizeof bt.text, 1); + say(bt.text); + bt.phase = P_RESULT; + } + break; + } + case P_MERCY: + if (pressed & K_UP) bt.mercy = 0; + if (pressed & K_DOWN && !bt.no_flee) bt.mercy = 1; + if (pressed & K_X) bt.phase = P_MENU; + if (pressed & K_Z) { + if (bt.mercy == 0) do_spare(); + else do_flee(); + } + break; + } +} + +/* ---------------------------------------------------------------- the frame */ +void battle_update(uint32_t keys, uint32_t pressed) { + if (over) return; + bt.t++; + box_step(); + if (bt.scripted && bt.phase != P_INTRO) { + flowey_battle_update(keys, pressed); + if (bt.result == BR_SCRIPTED) battle_end(BR_SCRIPTED); + return; + } + for (int i = 0; i < bt.nmon; i++) { + Monster *m = &bt.mon[i]; + if (m->hurt) m->hurt--; + if (m->dmg_t) m->dmg_t--; + if (m->fade && m->fade < 30) m->fade++; + if (m->dust && m->dust < 60) m->dust++; + } + if (bt.inv) bt.inv--; + switch (bt.phase) { + case P_INTRO: + if (bt.t >= 24) { + bt.phase = P_MENU; + say(bt.text); + bt.turn = 1; + } + break; + case P_MENU: + writer_update(&bt.w, pressed & K_X ? K_X : 0); + menu_input(pressed); + break; + case P_TARGET: + case P_ACTS: + case P_ITEMS: + case P_MERCY: + menu_input(pressed); + break; + case P_BAR: + bt.bar_x += bt.bar_dir * 7 * FX / 2; + if (pressed & K_Z) strike(); + else if (bt.bar_x < 0 || bt.bar_x > 281 * FX) { + bt.bar_x = -1; + bt.strike_dmg = -1; + bt.target = bt.target; + bt.mon[bt.target].dmg_shown = -1, bt.mon[bt.target].dmg_t = 40; + if ((bt.mon[bt.target].def->flags & MF_MISS_IS_SPARE) && bt.mon[bt.target].def->on_spare) + bt.mon[bt.target].def->on_spare(&bt, &bt.mon[bt.target]); + bt.phase = P_STRIKE, bt.t = 20; + } + break; + case P_STRIKE: + if (bt.t == 18) strike_land(); + if (bt.t >= 60) { + Monster *m = &bt.mon[bt.target]; + if (m->killed && m->alive) { + m->alive = false, m->gone = true, m->dust = 1; + sv.kills++; + } + after_player_turn(); + } + break; + case P_RESULT: + if (!writer_update(&bt.w, pressed)) { + if (bt.phase == P_RESULT) after_player_turn(); + } + if (bt.w.finished && bt.phase == P_RESULT) after_player_turn(); + break; + case P_TALK: + if (bt.talk_i < 0) { + begin_attack(); + break; + } + if (!writer_update(&bt.bw, pressed)) { + /* the next monster with something to say */ + int i = bt.talk_i + 1; + while (i < bt.nmon && !bt.mon[i].say) i++; + if (i < bt.nmon) { + bt.talk_i = i; + writer_start(&bt.bw, bt.mon[i].say, 0, 0, FONT_SMALL); + bt.bw.line_h = 9; + } else { + /* some monsters leave after they have spoken (Napstablook) */ + for (int k = 0; k < bt.nmon; k++) { + Monster *m = &bt.mon[k]; + if (m->alive && !m->gone && m->def->ends && m->def->ends(&bt, m)) m->gone = true, m->fade = 1; + } + if (all_gone()) win(); + else begin_attack(); + } + } + break; + case P_BOX_IN: + if (box_settled()) { + bt.sx = board_cx() * FX, bt.sy = board_cy() * FX; + bt.phase = P_ATTACK; + } + break; + case P_ATTACK: + soul_update(keys); + attack_run(&bt, bt.atk, bt.atk_t); + bullets_update(); + soul_hit_test(); + if (sv.hp <= 0) { + bt.phase = P_DEATH, bt.t = 0; + break; + } + if (++bt.atk_t >= bt.atk_len) { + bullets_clear(); + bt.phase = P_BOX_OUT; + box_menu(); + } + break; + case P_BOX_OUT: + if (box_settled()) begin_menu(); + break; + case P_WON: + if (!writer_update(&bt.w, pressed)) battle_end(bt.result == BR_SPARED ? BR_SPARED : BR_WON); + break; + case P_FLEE: + writer_update(&bt.w, 0); + if (bt.t >= 40) battle_end(BR_FLED); + break; + case P_DEATH: + if (bt.t >= 70) battle_end(BR_DIED); + break; + } +} + +/* ---------------------------------------------------------------- drawing */ +static void draw_monster(Monster *m, int i) { + const MonDef *d = m->def; + if (m->gone && !m->dust && m->fade >= 30) return; + if (!m->alive && !m->dust) return; + int x = m->x + (m->hurt ? (m->hurt / 2 % 2 ? 2 : -2) * (m->hurt > 10) : 0), y = m->y; + if (d->draw) { + d->draw(&bt, m, x, y); + return; + } + uint16_t s = m->spr_override ? (uint16_t)m->spr_override : m->hurt && d->spr_hurt ? d->spr_hurt : d->spr_idle; + int fr = m->hurt ? 0 : (int)(g_frame / (d->idle_speed ? d->idle_speed : 6)); + if (m->dust) { + /* turning to dust: drawn whiter and thinner, from the top down */ + int a = 255 - m->dust * 4; + if (a > 0) gfx_sprite_color(s, 0, x, y, 0, C_WHITE, (uint8_t)a); + return; + } + uint8_t alpha = m->fade ? (uint8_t)max_i(0, 128 - m->fade * 4) : 255; + gfx_sprite(s, fr, x, y, 0, alpha); + (void)i; +} + +static void draw_hud(void) { + char s[40]; + gfx_text(FONT_SMALL, 15, 201, sv.name, C_WHITE, 255); + snprintf(s, sizeof s, "LV %d", sv.lv); + gfx_text(FONT_SMALL, 66, 201, s, C_WHITE, 255); + gfx_sprite(SPR_HPNAME, 0, 122, 202, 0, 255); + int w = sv.maxhp * 6 / 10 + 1, f = max_i(0, sv.hp) * 6 / 10; + if (sv.hp > 0 && f == 0) f = 1; + gfx_rect(137, 200, w, 10, rgb565(0xC00000), 255); + gfx_rect(137, 200, f, 10, C_YELLOW, 255); + snprintf(s, sizeof s, "%d / %d", max_i(0, sv.hp), sv.maxhp); + gfx_text(FONT_SMALL, 137 + w + 8, 201, s, C_WHITE, 255); +} + +static void draw_buttons(void) { + static const uint16_t spr[4] = {SPR_FIGHTBT, SPR_TALKBT, SPR_ITEMBT, SPR_SPAREBT}; + bool menu = bt.phase >= P_MENU && bt.phase <= P_MERCY; + for (int i = 0; i < 4; i++) { + bool on = menu && bt.button == i; + gfx_sprite(spr[i], on ? 1 : 0, button_x[i], BUTTON_Y, 0, 255); + if (on && bt.phase == P_MENU) gfx_sprite(SPR_HEART, 0, button_x[i] + 8, BUTTON_Y + 11, 0, 255); + } +} + +/* "* Name" lines in the box, two columns or one */ +static void draw_list(const char *const *names, int n, int sel, bool two_cols, const uint16_t *colors) { + for (int i = 0; i < n; i++) { + int col = two_cols ? i % 2 : 0, row = two_cols ? i / 2 : i; + int x = 50 + col * 128, y = 133 + row * 16; + char s[48]; + snprintf(s, sizeof s, "* %s", names[i]); + gfx_text(FONT_MAIN, x, y, s, colors ? colors[i] : C_WHITE, 255); + if (i == sel) gfx_sprite(SPR_HEART, 0, x - 14, y + 7, 0, 255); + } +} + +static void draw_box_contents(void) { + switch (bt.phase) { + case P_MENU: + case P_RESULT: + case P_WON: + case P_FLEE: + writer_draw(&bt.w, C_WHITE); + break; + case P_TARGET: { + const char *names[MAX_MON]; + uint16_t cols[MAX_MON]; + int n = 0; + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].alive && !bt.mon[i].gone) { + names[n] = bt.mon[i].def->name; + cols[n] = bt.mon[i].spare && flag(F_FROGGIT_YELLOW) != 1 ? (flag(F_FROGGIT_YELLOW) == 2 ? rgb565(0xFF80C0) : C_YELLOW) : C_WHITE; + if (bt.button == B_FIGHT) { + /* the HP bar, in the game's green over red */ + int y = 133 + n * 16 + 3, hp = bt.mon[i].hp * 50 / max_i(1, bt.mon[i].maxhp); + gfx_rect(200, y, 50, 8, rgb565(0xC00000), 255); + gfx_rect(200, y, hp, 8, rgb565(0x00FF00), 255); + } + n++; + } + draw_list(names, n, bt.target, false, cols); + break; + } + case P_ACTS: { + Monster *m = &bt.mon[alive_index(bt.target)]; + const char *names[6] = {"Check"}; + int n = 1; + for (int i = 0; i < m->def->nacts; i++) names[n++] = m->def->acts[i]; + draw_list(names, n, bt.act, true, NULL); + break; + } + case P_ITEMS: { + const char *names[4]; + int page = bt.item / 4, n = 0; + for (int i = page * 4; i < page * 4 + 4 && i < item_count(); i++) names[n++] = item_info(sv.items[i])->short_name; + draw_list(names, n, bt.item % 4, true, NULL); + char s[16]; + snprintf(s, sizeof s, "PAGE %d", page + 1); + gfx_text(FONT_MAIN, 236, 165, s, C_WHITE, 255); + break; + } + case P_MERCY: { + const char *names[2] = {"Spare", "Flee"}; + bool any = false; + for (int i = 0; i < bt.nmon; i++) any |= bt.mon[i].alive && !bt.mon[i].gone && bt.mon[i].spare; + uint16_t cols[2] = {any && flag(F_FROGGIT_YELLOW) != 1 ? (flag(F_FROGGIT_YELLOW) == 2 ? rgb565(0xFF80C0) : C_YELLOW) : C_WHITE, C_WHITE}; + draw_list(names, bt.no_flee ? 1 : 2, bt.mercy, false, cols); + break; + } + case P_BAR: + case P_STRIKE: + gfx_sprite(SPR_TARGET, 0, 19, 128, 0, 255); + if (bt.phase == P_BAR || (bt.t / 2) % 2) { + int bx = 19 + bt.bar_x / FX - 3; + if (bt.bar_x >= 0) gfx_sprite(SPR_TARGETCHOICE, bt.phase == P_STRIKE ? (bt.t / 3) % 2 : 0, bx, 128, 0, 255); + } + break; + default: + break; + } +} + +static void draw_bubble(void) { + if (bt.phase != P_TALK || bt.talk_i < 0) return; + Monster *m = &bt.mon[bt.talk_i]; + int bx = m->x + 30, by = m->y - 70; + if (bx + 104 > 316) bx = 316 - 104; + int w = 100, h = 44; + gfx_rect(bx, by, w, h, C_WHITE, 255); + gfx_rect(bx - 6, by + 18, 6, 4, C_WHITE, 255); + bt.bw.x = bx + 6, bt.bw.y = by + 5; + writer_draw(&bt.bw, C_BLACK); +} + +static void draw_damage(void) { + for (int i = 0; i < bt.nmon; i++) { + Monster *m = &bt.mon[i]; + if (!m->dmg_t) continue; + int y = m->y - 70 - (m->dmg_t > 35 ? (45 - m->dmg_t) : 10); + char s[16]; + if (m->dmg_shown <= 0) { + gfx_text(FONT_MAIN, m->x - 16, y, "MISS", rgb565(0xC0C0C0), 255); + } else { + snprintf(s, sizeof s, "%d", m->dmg_shown); + gfx_text(FONT_MAIN, m->x - 4 * (int)strlen(s), y, s, C_RED, 255); + /* the HP bar, going down */ + int w = 60, shown = m->bar_shown - (int)((m->bar_shown - max_i(0, m->hp)) * min_i(45 - m->dmg_t, 15) / 15); + gfx_rect(m->x - w / 2, y + 14, w, 7, rgb565(0x404040), 255); + gfx_rect(m->x - w / 2, y + 14, shown * w / max_i(1, m->maxhp), 7, rgb565(0x00FF00), 255); + } + } +} + +void battle_draw(void) { + if (bt.phase == P_INTRO) { + /* the SOUL flickers where Frisk was, then flies to FIGHT */ + if (bt.t < 12) { + if ((bt.t / 2) % 2 == 0) gfx_sprite(SPR_HEART, 0, heart_x, heart_y, 0, 255); + return; + } + int k = bt.t - 12; + int tx = bt.scripted ? soul_x() : button_x[0] + 8, ty = bt.scripted ? soul_y() : BUTTON_Y + 11; + int x = heart_x + (tx - heart_x) * k / 12, y = heart_y + (ty - heart_y) * k / 12; + gfx_sprite(SPR_HEART, 0, x, y, 0, 255); + return; + } + if (bt.phase == P_DEATH) { + int x = soul_x(), y = soul_y(); + if (bt.t < 25) gfx_sprite(SPR_HEART, 0, x, y, 0, 255); + else if (bt.t < 45) gfx_sprite(SPR_HEARTBREAK, 0, x, y, 0, 255); + else + for (int k = 0; k < 6; k++) { + int dt = bt.t - 45; + gfx_sprite(SPR_HEARTSHARDS, (dt / 4) % 4, x + (k - 3) * dt / 2, y - 10 + dt * dt / 30 - (k % 3) * 6, 0, 255); + } + return; + } + if (bt.scripted) { + flowey_battle_draw(); + return; + } + gfx_sprite(SPR_BATTLEBG, 0, 0, 0, 0, 255); + for (int i = 0; i < bt.nmon; i++) draw_monster(&bt.mon[i], i); + /* the box */ + gfx_rect(bt.x0, bt.y0, bt.x1 - bt.x0, bt.y1 - bt.y0, C_WHITE, 255); + gfx_rect(bt.x0 + 2, bt.y0 + 2, bt.x1 - bt.x0 - 4, bt.y1 - bt.y0 - 4, C_BLACK, 255); + gfx_clip(bt.x0 + 2, bt.y0 + 2, bt.x1 - bt.x0 - 4, bt.y1 - bt.y0 - 4); + draw_box_contents(); + if (bt.phase == P_ATTACK) { + attack_draw(&bt, bt.atk, bt.atk_t); + bullets_draw(); + if (!bt.inv || (bt.inv / 2) % 2) gfx_sprite(SPR_HEART, bt.soul_mode, soul_x(), soul_y(), 0, 255); + } + gfx_clip_all(); + if (bt.phase == P_FLEE) gfx_sprite(SPR_HEARTGTFO, (bt.t / 3) % 2, button_x[3] + 8 - bt.t * 3, BUTTON_Y + 11, 0, 255); + if (bt.phase == P_STRIKE && bt.t < 18 && bt.strike_dmg >= 0) { + Monster *m = &bt.mon[bt.target]; + gfx_sprite(SPR_STRIKE, bt.t / 3, m->x, m->y - 30, 0, 255); + } + draw_damage(); + draw_bubble(); + draw_hud(); + draw_buttons(); +} diff --git a/games/undertale/src/battle.h b/games/undertale/src/battle.h index d64165ca..f9f5f29c 100644 --- a/games/undertale/src/battle.h +++ b/games/undertale/src/battle.h @@ -1,13 +1,167 @@ -/* Undertale: battles (encounters). */ +/* Undertale: battles. + * + * The original's battle is 640 x 480; here it is halved, as everything else: + * the box, the buttons and the bullets at half their size, the monsters at the + * size the game draws them (it doubles its sprites). Positions on the bullet + * board are kept in 1/16 pixels, so bullets move as finely as there. + * + * A battle is a formation (FORM_*: who is fought, where, its music none) of + * up to three monsters (MonDef: stats, texts, ACTs, attacks). A turn: the + * player picks FIGHT, ACT, ITEM or MERCY; the monsters talk in their bubbles; + * the box shrinks to the bullet board and the monsters attack the SOUL. */ #ifndef UT_BATTLE_H #define UT_BATTLE_H #include #include +#include "text.h" -void battle_start(int id); +enum { BR_WON, BR_SPARED, BR_FLED, BR_DIED, BR_SCRIPTED }; + +#define FX 16 /* fixed point: 1/16 pixel */ +#define MAX_MON 3 +#define MAX_BULLETS 96 + +/* the box: the menu's, wide; the board's for attacks, by default */ +#define BOX_X0 16 +#define BOX_Y0 125 +#define BOX_X1 303 +#define BOX_Y1 195 +#define BOARD_W 77 +#define BOARD_H 65 + +struct Battle; +struct Monster; + +typedef struct { + const char *name; + int16_t hp, at, df, exp, gold; + uint16_t spr_idle, spr_hurt; /* SPR_*: idle animation (its frames), hurt */ + uint8_t idle_speed; /* frames between idle frames */ + int8_t dx, dy; /* where it stands, from its slot */ + const char *check; /* after "* NAME - ATK n DEF n\n" */ + const char *acts[5]; /* besides Check */ + uint8_t nacts; + const char *encounter; /* the first turn's text, alone */ + const char *neutral[6]; /* flavour texts, at random */ + const char *quotes[6]; /* what it says, at random */ + const char *low_hp, *spareable; /* flavour texts then */ + uint8_t flags; /* MF_* */ + /* its own ways: an ACT (fills text, may set m->spare), its talk this turn, its attack this turn */ + void (*act)(struct Battle *b, struct Monster *m, int act, char *text, int cap); + const char *(*talk)(struct Battle *b, struct Monster *m); + int (*attack)(struct Battle *b, struct Monster *m); + const char *(*flavor)(struct Battle *b, struct Monster *m); + bool (*on_hit)(struct Battle *b, struct Monster *m, int dmg); /* true: its own way (no death) */ + void (*draw)(struct Battle *b, struct Monster *m, int x, int y); + bool (*ends)(struct Battle *b, struct Monster *m); /* after its talk: true, it leaves the battle */ + void (*on_spare)(struct Battle *b, struct Monster *m); /* spared while it isn't spareable (Toriel counts) */ +} MonDef; +enum { + MF_ONE_HIT = 1, /* dies in one hit (Whimsun) */ + MF_BOSS = 2, /* no fleeing */ + MF_NO_CHECK = 4, + MF_SPARE_START = 8, /* spareable from the start */ + MF_NOT_KILLABLE = 16, + MF_MISS_IS_SPARE = 32 /* a missed FIGHT counts as a spare (Toriel) */ +}; + +typedef struct Monster { + const MonDef *def; + int16_t hp, maxhp, at, df, exp, gold; + int16_t x, y; /* its feet's middle */ + bool alive, gone, spare; /* gone: killed, spared or ran */ + bool killed; + uint8_t fade, dust; /* fading out (spared or ran) / turning to dust: frames */ + uint8_t hurt; /* frames showing hurt */ + int16_t shake; /* hurt: its shake */ + int16_t acts[6]; /* each ACT, how often */ + int16_t state, state2, turns; + const char *say; /* its bubble this turn */ + int16_t dmg_shown, dmg_t; /* the damage number over it */ + int16_t bar_shown; /* its HP before the hit (the bar's fall) */ + int16_t spare_gold; /* the gold it gives when spared */ + int16_t spr_override; /* a sprite its ways show instead, 0 none */ +} Monster; + +/* the bullets: a pool, moved by kind each frame; the attack's code makes them and steers them */ +enum { BK_NONE, BK_LINEAR, BK_GRAVITY, BK_HOMING, BK_ORBIT, BK_SCRIPT }; +enum { BC_WHITE, BC_BLUE, BC_ORANGE, BC_GREEN }; +typedef struct { + uint8_t kind, color, frame, flags; + uint16_t spr; + int32_t x, y, vx, vy, ax, ay; /* 1/16 pixels (and per frame, per frame squared) */ + int16_t r; /* its hit radius (pixels), a box if w/h */ + int16_t w, h; + int16_t t, life; /* frames alive; dies at life (0: never) */ + int16_t a, b, c, d; /* the attack's own */ + uint8_t anim, alpha; + int8_t dmg; /* 0: the monster's AT */ + int16_t angle; /* drawn turned (1/256 turns) */ + uint8_t owner; /* the monster that made it */ +} Bullet; +enum { BF_NOCLIP = 1, BF_ONCE = 2, BF_HIDDEN = 4, BF_BOX = 8, BF_FRONT = 16, BF_HARMLESS = 32 }; + +typedef struct Battle { + int form; + int phase, t; + Monster mon[MAX_MON]; + int nmon; + int button, target, act, item, mercy, page; + Writer w; /* the box's text */ + char text[600]; + /* the box now, and where it is going */ + int16_t x0, y0, x1, y1, tx0, ty0, tx1, ty1; + /* the SOUL */ + int32_t sx, sy; /* its middle, 1/16 pixels */ + int soul_mode; + int inv; /* invincible for frames */ + int speed; /* 1/16 pixels a frame */ + /* the attack */ + int atk, atk_t, atk_len; + int atk_owner; + int turn; + int bar_x, bar_dir; /* FIGHT: the bar, 1/16 px */ + int strike_t, strike_dmg; + bool flee_ok, scripted, no_flee, no_buttons; + int result; + int exp_won, gold_won; + int kr; /* (for later) */ + int16_t state[8]; /* the formation's own */ + int32_t as[16]; /* the attack's own */ + int talk_i; /* whose bubble shows */ + Writer bw; /* the bubble's text */ + int hp_shown; + int last_action; /* 0 FIGHT, 1 ACT, 2 ITEM, 3 Spare, 4 Flee */ +} Battle; +extern Battle bt; +extern Bullet bullets[MAX_BULLETS]; + +void battle_start(int form); bool battle_over(void); -int battle_result(void); /* BR_*: how the last one ended */ +int battle_result(void); void battle_update(uint32_t keys, uint32_t pressed); void battle_draw(void); -enum { BR_WON, BR_SPARED, BR_FLED, BR_DIED, BR_SCRIPTED }; + +/* for the attacks (bullets.c) */ +Bullet *bullet_new(uint16_t spr, int x, int y, int vx, int vy); /* x, y in 1/16 px */ +void bullets_clear(void); +void bullets_update(void); +void bullets_draw(void); +bool soul_hit_test(void); /* bullets touching the SOUL hurt it */ +void soul_update(uint32_t keys); +void soul_hurt(int dmg, int color); +void board_set(int w, int h); /* the board, centred, as the game resizes it */ +void board_set_rect(int x0, int y0, int x1, int y1); +int board_cx(void), board_cy(void); /* its middle (pixels) */ +int soul_x(void), soul_y(void); /* (pixels) */ +int damage_to_player(int at); +int count_alive(void); + +/* the monsters and formations (monsters.c) */ +const MonDef *mon_def(int id); +int form_setup(int form, Battle *b); /* places the monsters; returns the encounter text's id */ +const char *form_text(int form); +void attack_run(Battle *b, int atk, int t); /* one frame of attack atk (ATK_*) */ +void attack_draw(Battle *b, int atk, int t); /* what it draws besides its bullets */ +int attack_length(int atk); #endif diff --git a/games/undertale/src/bullets.c b/games/undertale/src/bullets.c index 60389322..a4768b78 100644 --- a/games/undertale/src/bullets.c +++ b/games/undertale/src/bullets.c @@ -1,2 +1,149 @@ -/* The bullet board's bullets. */ +/* The bullet board: the SOUL, the bullets, what hurts (battle.h). */ +#include +#include "battle.h" #include "game.h" +#include "gfx.h" +#include "items.h" +#include "res.h" + +Bullet bullets[MAX_BULLETS]; + +Bullet *bullet_new(uint16_t spr, int x, int y, int vx, int vy) { + for (int i = 0; i < MAX_BULLETS; i++) + if (bullets[i].kind == BK_NONE) { + Bullet *b = &bullets[i]; + memset(b, 0, sizeof *b); + b->kind = BK_LINEAR, b->spr = spr, b->x = x, b->y = y, b->vx = vx, b->vy = vy; + b->alpha = 255; + Frame f; + if (frame_get(spr, 0, &f)) b->r = (int16_t)(((f.w < f.h ? f.w : f.h) * 2 / 5)); + if (b->r < 2) b->r = 2; + return b; + } + return NULL; +} + +void bullets_clear(void) { memset(bullets, 0, sizeof bullets); } + +int soul_x(void) { return bt.sx / FX; } +int soul_y(void) { return bt.sy / FX; } + +/* the SOUL: 8 x 8, moved inside the board by the arrows (X held: slower, as in the game) */ +void soul_update(uint32_t keys) { + int sp = bt.speed; + if (keys & K_X) sp /= 2; + int dx = ((keys & K_RIGHT) != 0) - ((keys & K_LEFT) != 0), dy = ((keys & K_DOWN) != 0) - ((keys & K_UP) != 0); + bt.sx += dx * sp, bt.sy += dy * sp; + int x0 = (bt.x0 + 2 + 4) * FX, x1 = (bt.x1 - 2 - 4) * FX, y0 = (bt.y0 + 2 + 4) * FX, y1 = (bt.y1 - 2 - 4) * FX; + if (bt.sx < x0) bt.sx = x0; + if (bt.sx > x1) bt.sx = x1; + if (bt.sy < y0) bt.sy = y0; + if (bt.sy > y1) bt.sy = y1; +} + +void bullets_update(void) { + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind == BK_NONE) continue; + if (b->kind != BK_SCRIPT) b->t++; + switch (b->kind) { + case BK_LINEAR: + case BK_GRAVITY: + b->vx += b->ax, b->vy += b->ay; + b->x += b->vx, b->y += b->vy; + break; + case BK_HOMING: { + /* turns towards the SOUL, at its speed */ + int dx = bt.sx - b->x, dy = bt.sy - b->y; + int d = abs_i(dx) + abs_i(dy); + if (d) { + b->vx += dx * b->a / d, b->vy += dy * b->a / d; + int cap = b->b; + if (b->vx > cap) b->vx = cap; + if (b->vx < -cap) b->vx = -cap; + if (b->vy > cap) b->vy = cap; + if (b->vy < -cap) b->vy = -cap; + } + b->x += b->vx, b->y += b->vy; + break; + } + case BK_ORBIT: { + /* around (a, b) in pixels, radius c (1/16 px), angle d (1/256 turns, x16) */ + b->d = (int16_t)(b->d + b->vx); + int r = b->c; + b->x = b->a * FX + r * gfx_cos(b->d / 16) / 1024; + b->y = b->b * FX + r * gfx_sin(b->d / 16) / 1024; + b->c = (int16_t)(b->c + b->vy); + break; + } + default: + break; + } + if (b->kind != BK_SCRIPT && b->anim && b->t % b->anim == 0) b->frame++; + if (b->life && b->t >= b->life) b->kind = BK_NONE; + /* far out of the board: gone */ + int px = b->x / FX, py = b->y / FX; + if (px < -60 || px > SCREEN_W + 60 || py < -60 || py > SCREEN_H + 60) b->kind = BK_NONE; + } +} + +void bullets_draw(void) { + for (int i = 0; i < MAX_BULLETS; i++) { + const Bullet *b = &bullets[i]; + if (b->kind == BK_NONE || (b->flags & BF_HIDDEN)) continue; + uint16_t color = b->color == BC_BLUE ? rgb565(0x14A9FF) : b->color == BC_ORANGE ? rgb565(0xFCA600) : b->color == BC_GREEN ? rgb565(0x00C000) : 0; + if (b->angle) gfx_sprite_ex(b->spr, b->frame, b->x / FX, b->y / FX, 256, 256, b->angle, color, b->alpha); + else if (color) gfx_sprite_color(b->spr, b->frame, b->x / FX, b->y / FX, 0, color, b->alpha); + else gfx_sprite(b->spr, b->frame, b->x / FX, b->y / FX, 0, b->alpha); + } +} + +/* the damage of a monster's bullet, as the game reckons it: its AT, one more at each of the SOUL's HP + * thresholds, less a fifth of DF (the shown one), at least 1 */ +int damage_to_player(int at) { + static const int16_t steps[] = {21, 30, 40, 50, 60, 70, 80, 90}; + int dmg = at; + for (int i = 0; i < 8; i++) + if (sv.maxhp >= steps[i]) dmg++; + int df = sv.df - 10 + armor_df(); + dmg -= (df + 2) / 5; + return dmg < 1 ? 1 : dmg; +} + +void soul_hurt(int dmg, int color) { + (void)color; + if (bt.inv) return; + sv.hp = (int16_t)(sv.hp - dmg); + if (sv.hp < 0) sv.hp = 0; + bt.inv = 30; +} + +bool soul_hit_test(void) { + int sx = bt.sx / FX, sy = bt.sy / FX; + bool hit = false; + static int last_x, last_y; + bool moved = sx != last_x || sy != last_y; + last_x = sx, last_y = sy; + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind == BK_NONE || (b->flags & (BF_HIDDEN | BF_HARMLESS))) continue; + int bx = b->x / FX, by = b->y / FX; + bool touch; + if (b->flags & BF_BOX) touch = sx + 3 > bx - b->w / 2 && sx - 3 < bx + b->w / 2 && sy + 3 > by - b->h / 2 && sy - 3 < by + b->h / 2; + else touch = (sx - bx) * (sx - bx) + (sy - by) * (sy - by) <= (b->r + 3) * (b->r + 3); + if (!touch) continue; + if (b->color == BC_BLUE && !moved) continue; /* blue: still, it passes */ + if (b->color == BC_ORANGE && moved) continue; /* orange: moving, it passes */ + if (b->color == BC_GREEN) { + sv.hp = (int16_t)min_i(sv.maxhp, sv.hp + (b->dmg ? b->dmg : 1)); + b->kind = BK_NONE; + continue; + } + if (bt.inv) continue; + int at = b->dmg ? b->dmg : bt.mon[b->owner].at; + soul_hurt(damage_to_player(at), b->color); + hit = true; + if (b->flags & BF_ONCE) b->kind = BK_NONE; + } + return hit; +} diff --git a/games/undertale/src/data.h b/games/undertale/src/data.h index e553aee7..6d246b80 100644 --- a/games/undertale/src/data.h +++ b/games/undertale/src/data.h @@ -21,42 +21,95 @@ #define SPR_SAVEPOINT 8 #define SPR_FLOWEY 9 #define SPR_HEART 10 -#define SPR_FACE_TORIELTALK 11 -#define SPR_FACE_TORIELTALKSIDE 12 -#define SPR_FACE_TORIELHAPPYTALK 13 -#define SPR_FACE_TORIELWHAT 14 -#define SPR_FACE_TORIELWHATSIDE 15 -#define SPR_FACE_TORIELMAD 16 -#define SPR_FACE_TORIELCOLD 17 -#define SPR_FACE_TORIELSURPRISED 18 -#define SPR_FACE_TORIELEMBARRASSED 19 -#define SPR_FACE_TORIELGLASSES 20 -#define SPR_FACE_TORIELREVENGETALK 21 -#define SPR_FACE_TORIELSCARED 22 -#define SPR_FACE_TORIELBLINK 23 -#define SPR_FACE_TORIELHAPPYBLINK 24 -#define SPR_FACE_TORIELBODY 25 -#define SPR_FACE_SANS 26 -#define SPR_FACE_SANSCHUCKLE 27 -#define SPR_FACE_SANSWINK 28 -#define SPR_FACE_PAPYRUS 29 -#define SPR_FACE_PAPYRUSEVIL 30 -#define SPR_FACE_PAPYRUSLAUGH 31 -#define SPR_FACE_PAPYRUSMAD 32 -#define SPR_FACE_PAPYRUSSIDE 33 -#define SPR_FLOWEYNICE 34 -#define SPR_FLOWEYNICESIDE 35 -#define SPR_FLOWEYSASSY 36 -#define SPR_FLOWEYEVIL 37 -#define SPR_FLOWEYGRIN 38 -#define SPR_FLOWEYPLAIN 39 -#define SPR_FLOWEYPISSED 40 -#define SPR_FLOWEYWINK 41 -#define SPR_FLOWEYLAUGH 42 -#define SPR_FLOWEYHURT 43 -#define SPR_FLOWEYTORIEL 44 -#define SPR_FLOWEYTORIEL2 45 -#define SPR_FLOWEYSIDESHOCK 46 +#define SPR_FIGHTBT 11 +#define SPR_TALKBT 12 +#define SPR_ITEMBT 13 +#define SPR_SPAREBT 14 +#define SPR_TARGET 15 +#define SPR_TARGETCHOICE 16 +#define SPR_HPNAME 17 +#define SPR_BATTLEBG 18 +#define SPR_STRIKE 19 +#define SPR_HEARTBREAK 20 +#define SPR_HEARTSHARDS 21 +#define SPR_HEARTGTFO 22 +#define SPR_FLYBULLET 23 +#define SPR_SMALLFROGBULLET 24 +#define SPR_BUTTERFLYBLLT 25 +#define SPR_BULLETMD 26 +#define SPR_BULLETSM 27 +#define SPR_CIRCLEBULLETMD1 28 +#define SPR_CIRCLEBULLETSM 29 +#define SPR_VEGBULLET 30 +#define SPR_CARROTBULLET 31 +#define SPR_ROACHBULLET 32 +#define SPR_ROACHDANCE 33 +#define SPR_TEARDROP 34 +#define SPR_FIREBULLET 35 +#define SPR_HANDBULLET 36 +#define SPR_SPINBULLET 37 +#define SPR_STREAMBULLET 38 +#define SPR_DIRBULLET 39 +#define SPR_BULLETGENMD 40 +#define SPR_DUMMY_B 41 +#define SPR_FROGGIT_B 42 +#define SPR_FROGGIT_HURT 43 +#define SPR_WHIMSUN_B 44 +#define SPR_WHIMSUN_HURT 45 +#define SPR_MOLDSMAL_B 46 +#define SPR_LOOX_B 47 +#define SPR_LOOX_HURT 48 +#define SPR_VEGETOID_B 49 +#define SPR_VEGETOID_HURT 50 +#define SPR_MIGOSP_B 51 +#define SPR_MIGOSP_HURT 52 +#define SPR_NAPSTABLOOK_B 53 +#define SPR_NAPSTA_HAT 54 +#define SPR_TORIEL_B 55 +#define SPR_TORIEL_HURT 56 +#define SPR_TORIEL_AWAY 57 +#define SPR_TORIEL_FIGHT 58 +#define SPR_TORIEL_DEAD 59 +#define SPR_INTROIMAGE 60 +#define SPR_INTROLAST 61 +#define SPR_UNDERTALETITLE 62 +#define SPR_GAMEOVERBG 63 +#define SPR_FACE_TORIELTALK 64 +#define SPR_FACE_TORIELTALKSIDE 65 +#define SPR_FACE_TORIELHAPPYTALK 66 +#define SPR_FACE_TORIELWHAT 67 +#define SPR_FACE_TORIELWHATSIDE 68 +#define SPR_FACE_TORIELMAD 69 +#define SPR_FACE_TORIELCOLD 70 +#define SPR_FACE_TORIELSURPRISED 71 +#define SPR_FACE_TORIELEMBARRASSED 72 +#define SPR_FACE_TORIELGLASSES 73 +#define SPR_FACE_TORIELREVENGETALK 74 +#define SPR_FACE_TORIELSCARED 75 +#define SPR_FACE_TORIELBLINK 76 +#define SPR_FACE_TORIELHAPPYBLINK 77 +#define SPR_FACE_TORIELBODY 78 +#define SPR_FACE_SANS 79 +#define SPR_FACE_SANSCHUCKLE 80 +#define SPR_FACE_SANSWINK 81 +#define SPR_FACE_PAPYRUS 82 +#define SPR_FACE_PAPYRUSEVIL 83 +#define SPR_FACE_PAPYRUSLAUGH 84 +#define SPR_FACE_PAPYRUSMAD 85 +#define SPR_FACE_PAPYRUSSIDE 86 +#define SPR_FLOWEYNICE 87 +#define SPR_FLOWEYNICESIDE 88 +#define SPR_FLOWEYSASSY 89 +#define SPR_FLOWEYEVIL 90 +#define SPR_FLOWEYGRIN 91 +#define SPR_FLOWEYPLAIN 92 +#define SPR_FLOWEYPISSED 93 +#define SPR_FLOWEYWINK 94 +#define SPR_FLOWEYLAUGH 95 +#define SPR_FLOWEYHURT 96 +#define SPR_FLOWEYTORIEL 97 +#define SPR_FLOWEYTORIEL2 98 +#define SPR_FLOWEYSIDESHOCK 99 #define AREA_RUINS 0 #define ROOM_AREA1 0 #define ROOM_AREA1_2 1 @@ -105,8 +158,9 @@ #define ROOM_BASEMENT3 44 #define ROOM_RUINSEXIT 45 #define FONT_MAIN 0 -#define FONT_SMALL 1 -#define NUM_SPRITES 47 +#define FONT_MENU 1 +#define FONT_SMALL 2 +#define NUM_SPRITES 100 #define NUM_ROOMS 46 -#define NUM_FONTS 2 +#define NUM_FONTS 3 #endif diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index f1ff3fbc..99abfcf6 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -4,6 +4,8 @@ enum { EV_NONE, EV_SIGN, /* a sign or anything that only says its text (self->arg: the text, in events.c) */ + EV_PHONE_MENU, /* CELL: calling Toriel */ + EV_SAVE, /* a SAVE Point */ EV_COUNT }; #endif diff --git a/games/undertale/src/flowey.c b/games/undertale/src/flowey.c new file mode 100644 index 00000000..a46156a0 --- /dev/null +++ b/games/undertale/src/flowey.c @@ -0,0 +1,211 @@ +/* The first battle: Flowey and his "friendliness pellets", then Toriel. A scripted battle: no buttons, the SOUL + * free in a small box, Flowey's words in his bubble (from the Undertale Wiki's records of the game). */ +#include +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "monsters.h" +#include "res.h" + +enum { + F_TALK1, F_PELLETS, F_AFTER, F_RING, F_FIREBALL, F_TORIEL_IN, F_TORIEL_TALK, F_DONE +}; +/* bt.state: [0] step, [1] times dodged, [2] Flowey's face (a sprite), [3] Flowey's x offset, [4] Toriel's x */ +static const char *talk_text; +static int ring_r; + +static void bubble(const char *s) { + talk_text = s; + writer_start(&bt.bw, s, 0, 0, FONT_SMALL); + bt.bw.line_h = 9; +} + +static const char intro_text[] = + "See that\nheart? That\nis your SOUL,\nthe very\nculmination\nof your\nbeing!|" + "Your SOUL\nstarts off\nweak, but can\ngrow strong\nif you gain a\nlot of LV.|" + "What's LV\nstand for?\nWhy, LOVE,\nof course!|" + "You want\nsome LOVE,\ndon't you?|" + "`7Don't worry,\nI'll share\nsome with\nyou!"; +static const char share_text[] = + "Down here,\nLOVE is\nshared\nthrough...|" + "Little\nwhite...\n\"friendliness\npellets.\"|" + "Are you\nready?|" + "Move around!\nGet as many\nas you can!"; +static const char hit_text[] = + "`4You idiot.|" + "In this\nworld, it's\nkill or BE\nkilled.|" + "Why would\nANYONE pass\nup an\nopportunity\nlike this!?|" + "`3Die."; +static const char miss1_text[] = "`6Hey buddy,\nyou missed\nthem.|`0Let's try\nagain, okay?"; +static const char miss2_text[] = "`6Is this a\njoke? Are you\nbraindead?|RUN. INTO.\nTHE.\nfriendliness\npellets"; +static const char miss3_text[] = "`2You know\nwhat's going\non here,\ndon't you?|You just\nwanted to see\nme suffer.|`3Die."; +static const char toriel_text[] = + "What a\nterrible\ncreature,\ntorturing\nsuch a poor,\ninnocent\nyouth...|" + "Ah, do not\nbe afraid, my\nchild.|" + "I am #YTORIEL#X,\ncaretaker of\nthe #YRUINS#X.|" + "I pass\nthrough this\nplace every\nday to see if\nanyone has\nfallen down.|" + "You are the\nfirst human\nto come here\nin a long\ntime.|" + "Come! I will\nguide you\nthrough the\ncatacombs."; + +static const uint16_t faces[] = {SPR_FLOWEYNICE, SPR_FLOWEYNICESIDE, SPR_FLOWEYSASSY, SPR_FLOWEYEVIL, SPR_FLOWEYGRIN, + SPR_FLOWEYPLAIN, SPR_FLOWEYPISSED, SPR_FLOWEYWINK, SPR_FLOWEYLAUGH, SPR_FLOWEYHURT}; + +void flowey_battle_start(void) { + bt.scripted = true; + bt.state[0] = F_TALK1; + bt.state[2] = 0; + board_set(84, 76); + bt.x0 = bt.tx0, bt.y0 = bt.ty0, bt.x1 = bt.tx1, bt.y1 = bt.ty1; + bt.sx = board_cx() * FX, bt.sy = board_cy() * FX + 8 * FX; + bubble(intro_text); +} + +static void pellets(void) { + /* five pellets in an arc over Flowey, then at the SOUL, a little aimed */ + bullets_clear(); + for (int k = 0; k < 5; k++) { + int x = 160 + (k - 2) * 14, y = 72 - (k == 0 || k == 4 ? 0 : k == 2 ? 14 : 9); + Bullet *b = bullet_new(SPR_SPINBULLET, x * FX, y * FX, 0, 0); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)(20 + k * 3), b->anim = 3, b->dmg = 19, b->flags = BF_NOCLIP; + } +} + +void flowey_battle_update(uint32_t keys, uint32_t pressed) { + int st = bt.state[0]; + if (st != F_FIREBALL && st != F_TORIEL_IN) soul_update(keys); + switch (st) { + case F_TALK1: + case F_AFTER: + case F_TORIEL_TALK: + bt.state[2] = bt.bw.face_expr; + if (!writer_update(&bt.bw, pressed)) { + if (st == F_TORIEL_TALK) { + bt.state[0] = F_DONE; + bt.result = BR_SCRIPTED; + return; + } + if (talk_text == intro_text) { + bubble(share_text); + bt.state[2] = 7; + } else if (talk_text == hit_text || talk_text == miss3_text) { + bt.state[0] = F_RING, bt.t = 0; + ring_r = 70; + bullets_clear(); + for (int k = 0; k < 24; k++) { + Bullet *b = bullet_new(SPR_SPINBULLET, 0, 0, 0, 0); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)(k * 256 / 24), b->anim = 3, b->flags = BF_HARMLESS | BF_NOCLIP; + } + bt.state[2] = 8; + } else { + bt.state[0] = F_PELLETS, bt.t = 0; + pellets(); + } + } + break; + case F_PELLETS: { + int alive = 0; + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + alive++; + if (b->a > 0) { + b->t++; + if (b->t % 3 == 0) b->frame++; + if (--b->a == 0) { + int dx = bt.sx - b->x, dy = bt.sy - b->y, d = abs_i(dx) + abs_i(dy); + if (!d) d = 1; + b->vx = dx * FX * 2 / d, b->vy = dy * FX * 2 / d; + } + continue; + } + /* a little homing */ + b->vx += (bt.sx > b->x ? 1 : -1) * FX / 32; + b->x += b->vx, b->y += b->vy; + if (++b->t % 3 == 0) b->frame++; + if (b->y > (bt.y1 + 10) * FX || b->x < 0 || b->x > SCREEN_W * FX) b->kind = BK_NONE; + int dx = b->x / FX - soul_x(), dy = b->y / FX - soul_y(); + if (dx * dx + dy * dy < 36) { + /* hit: 19, down to 1 */ + sv.hp = 1; + bullets_clear(); + bt.state[0] = F_AFTER; + bubble(hit_text); + bt.state[2] = 4; + return; + } + } + if (!alive) { + bt.state[1]++; + bt.state[0] = F_AFTER; + bubble(bt.state[1] == 1 ? miss1_text : bt.state[1] == 2 ? miss2_text : miss3_text); + } + break; + } + case F_RING: + /* the ring closes in, slowly; Flowey laughs */ + if (bt.t % 3 == 0 && ring_r > 14) ring_r--; + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->x = bt.sx + ring_r * gfx_cos(b->a + bt.t) * FX / 1024; + b->y = bt.sy + ring_r * gfx_sin(b->a + bt.t) * FX / 1024; + if (bt.t % 3 == 0) b->frame++; + } + if (ring_r <= 14 && bt.t > 150) bt.state[0] = F_FIREBALL, bt.t = 0; + break; + case F_FIREBALL: + /* a fireball from the right knocks Flowey away */ + if (bt.t == 10) { + bullets_clear(); + bt.state[2] = 9; + } + if (bt.t > 10) bt.state[3] = (int16_t)(bt.state[3] - 6); + if (bt.t == 30) sv.hp = sv.maxhp; + if (bt.t > 40) bt.state[0] = F_TORIEL_IN, bt.t = 0, bt.state[4] = 340; + break; + case F_TORIEL_IN: + bt.state[4] = (int16_t)max_i(160, bt.state[4] - 4); + if (bt.state[4] == 160 && bt.t > 30) { + bt.state[0] = F_TORIEL_TALK; + bubble(toriel_text); + } + break; + } +} + +void flowey_battle_draw(void) { + int st = bt.state[0]; + gfx_sprite(SPR_BATTLEBG, 0, 0, 0, 0, 255); + int fx = 160 + bt.state[3]; + if (st <= F_FIREBALL) { + int e = bt.state[2]; + if (e < 0 || e > 9) e = 0; + uint16_t s = faces[e]; + int talking = writer_talking(&bt.bw); + gfx_sprite(s, talking ? (int)(g_frame / 4) % 2 : 0, fx - 21, 72, 0, 255); + } + if (st == F_FIREBALL && bt.t < 12) gfx_sprite(SPR_FIREBULLET, (int)(g_frame / 2) % 2, 330 - bt.t * 15, 90, 0, 255); + if (st >= F_TORIEL_IN) gfx_sprite(SPR_TORIEL_B, 0, bt.state[4], 120, 0, 255); + gfx_rect(bt.x0, bt.y0, bt.x1 - bt.x0, bt.y1 - bt.y0, C_WHITE, 255); + gfx_rect(bt.x0 + 2, bt.y0 + 2, bt.x1 - bt.x0 - 4, bt.y1 - bt.y0 - 4, C_BLACK, 255); + bullets_draw(); + gfx_sprite(SPR_HEART, 0, soul_x(), soul_y(), 0, 255); + /* the bubble */ + if (st == F_TALK1 || st == F_AFTER || st == F_TORIEL_TALK) { + int bx = (st == F_TORIEL_TALK ? bt.state[4] : fx) + 30, by = 40; + gfx_rect(bx, by, 96, 72, C_WHITE, 255); + gfx_rect(bx - 6, by + 20, 6, 5, C_WHITE, 255); + bt.bw.x = bx + 5, bt.bw.y = by + 5; + writer_draw(&bt.bw, C_BLACK); + } + /* the HUD, without the buttons */ + char s[32]; + gfx_text(FONT_SMALL, 70, 201, "LV 1", C_WHITE, 255); + gfx_sprite(SPR_HPNAME, 0, 122, 202, 0, 255); + int w = sv.maxhp * 6 / 10 + 1, f = max_i(1, sv.hp * 6 / 10); + gfx_rect(137, 200, w, 10, rgb565(0xC00000), 255); + gfx_rect(137, 200, f, 10, C_YELLOW, 255); + snprintf(s, sizeof s, "%02d / %d", sv.hp, sv.maxhp); + gfx_text(FONT_SMALL, 137 + w + 8, 201, s, C_WHITE, 255); +} diff --git a/games/undertale/src/game.c b/games/undertale/src/game.c index 748ffb39..79e84ba1 100644 --- a/games/undertale/src/game.c +++ b/games/undertale/src/game.c @@ -79,7 +79,8 @@ void game_new(const char *name) { void game_init(void) { save_restore_copy(); - menu_title_open(); + /* back where Home left it, or the intro */ + if (!save_resume_load()) menu_title_open(); } void game_open_menu(void) { menu_open(); } diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index 9a1bc484..b4e9cb80 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -1,8 +1,500 @@ -/* The menus (menu.h). */ +/* The menus: the intro, the title, naming the fallen human, the C menu (ITEM, STAT, CELL), SAVE, and GAME OVER + * (menu.h). Their texts are the game's. */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" #include "game.h" +#include "gfx.h" +#include "items.h" #include "menu.h" -void menu_title_open(void) { game_new("Frisk"); } -void menu_open(void) {} -void menu_save_open(void) {} -void menu_update(uint32_t keys, uint32_t pressed) { (void)keys, (void)pressed; } -void menu_draw(void) {} +#include "res.h" +#include "save.h" +#include "text.h" +#include "world.h" + +static int st, sel, sub, t; /* the screen's step, what is selected, a second level, its frames */ +static Writer w; +static char buf[400]; +static char name[8]; +static int name_len; +static int letter; /* the naming screen's cursor */ +static int item_sel, item_act; +static bool msg_open; /* a text in the dialogue box over the menu */ + +enum { S_INTRO, S_TITLE, S_INSTR, S_NAME, S_CONFIRM, S_CONTINUE, S_GAMEOVER, S_FADEIN }; + +/* ---------------------------------------------------------------- the intro */ +static const char *const intro_lines[] = { + "Long ago, two races\nruled over Earth:\nHUMANS and MONSTERS.", + "One day, war broke\nout between the two\nraces.", + "After a long battle,\nthe humans were\nvictorious.", + "They sealed the monsters\nunderground with a magic\nspell.", + "Many years later...", + " MT. EBOTT\n 201X", + "Legends say that those\nwho climb the mountain\nnever return.", + "", "", "", "", +}; +#define INTRO_SLIDES 11 +static int slide; + +static void intro_slide(int k) { + slide = k, t = 0; + writer_start(&w, intro_lines[k], 60, 152, FONT_MAIN); + w.line_h = 16, w.speed = 2; +} + +void menu_title_open(void) { + g_mode = MODE_INTRO; + st = S_INTRO; + intro_slide(0); +} + +static void title_open(void) { + g_mode = MODE_TITLE; + st = S_TITLE, t = 0, sel = 0; +} + +/* ---------------------------------------------------------------- naming */ +static const char *const special_forbidden[][2] = { + {"alphys", "D-don't do that."}, {"asgore", "You cannot."}, {"asriel", "..."}, {"flowey", "I already CHOSE that name."}, + {"sans", "nope."}, {"toriel", "I think you should\nthink of your own\nname, my child."}, {"undyne", "Get your OWN name!"}, +}; +static const char *const special_allowed[][2] = { + {"frisk", "WARNING: This name will\nmake your life hell.\nProceed anyway?"}, {"murder", "That's a little on-the-\nnose, isn't it...?"}, + {"mercy", "That's a little on-the-\nnose, isn't it...?"}, {"aaaaaa", "Not very creative...?"}, + {"aaron", "Is this name correct? ;)"}, {"alphy", "Uh... OK?"}, {"bpants", "You are really scraping\nthe bottom of the barrel."}, + {"bratty", "Like, OK I guess."}, {"catty", "Bratty! Bratty!\nThat's MY name!"}, {"chara", "The true name."}, + {"gerson", "Wah ha ha! Why not?"}, {"jerry", "Jerry."}, {"metta", "OOOOH!!! ARE YOU\nPROMOTING MY BRAND?"}, + {"mett", "OOOOH!!! ARE YOU\nPROMOTING MY BRAND?"}, {"mtt", "OOOOH!!! ARE YOU\nPROMOTING MY BRAND?"}, + {"napsta", "............\n(They're powerless to\nstop you.)"}, {"blooky", "............\n(They're powerless to\nstop you.)"}, + {"papyru", "I'LL ALLOW IT!!!!"}, {"shyren", "...?"}, {"temmie", "hOI!"}, {"woshua", "Clean name."}, +}; +static const char *confirm_text; +static bool confirm_allowed; + +static bool same_lower(const char *a, const char *b) { + for (; *a && *b; a++, b++) { + char x = *a >= 'A' && *a <= 'Z' ? (char)(*a + 32) : *a; + if (x != *b) return false; + } + return !*a && !*b; +} + +static void name_done(void) { + name[name_len] = 0; + if (!name_len) { + confirm_text = "You must choose a name."; + confirm_allowed = false; + } else { + confirm_text = "Is this name correct?", confirm_allowed = true; + for (size_t i = 0; i < sizeof special_forbidden / sizeof special_forbidden[0]; i++) + if (same_lower(name, special_forbidden[i][0])) confirm_text = special_forbidden[i][1], confirm_allowed = false; + for (size_t i = 0; i < sizeof special_allowed / sizeof special_allowed[0]; i++) + if (same_lower(name, special_allowed[i][0])) confirm_text = special_allowed[i][1]; + if (same_lower(name, "gaster")) { + /* the game starts over */ + name_len = 0; + menu_title_open(); + return; + } + } + st = S_CONFIRM, sel = 0, t = 0; +} + +/* the letters: A-Z, then a-z, 7 a row, then Quit / Backspace / Done */ +#define LETTERS 52 +static char letter_at(int i) { return (char)(i < 26 ? 'A' + i : 'a' + i - 26); } +static void letter_xy(int i, int *x, int *y) { + int k = i < 26 ? i : i - 26, row = k / 7, col = k % 7; + *x = 60 + col * 32, *y = (i < 26 ? 58 : 122) + row * 14; +} + +static void name_input(uint32_t pressed) { + /* letter: 0..51, 52 Quit, 53 Backspace, 54 Done */ + if (pressed & K_RIGHT) letter = letter >= 52 ? (letter == 54 ? 52 : letter + 1) : (letter + 1) % LETTERS; + if (pressed & K_LEFT) letter = letter >= 52 ? (letter == 52 ? 54 : letter - 1) : (letter + LETTERS - 1) % LETTERS; + if (pressed & K_DOWN) { + if (letter >= 52) letter = letter == 52 ? 0 : letter == 53 ? 3 : 6; + else { + int k = letter < 26 ? letter : letter - 26; + if (k + 7 < 26) letter += 7; + else if (letter < 26) letter = 26 + k % 7; + else letter = k % 7 < 2 ? 52 : k % 7 < 5 ? 53 : 54; + } + } + if (pressed & K_UP) { + if (letter >= 52) letter = 26 + 21 + (letter == 52 ? 0 : letter == 53 ? 2 : 4); + else { + int k = letter < 26 ? letter : letter - 26; + if (k >= 7) letter -= 7; + else if (letter >= 26) letter = (k + 21 < 26) ? k + 21 : k + 14; + else letter = k < 2 ? 52 : k < 5 ? 53 : 54; + } + } + if (pressed & K_X && name_len) name_len--; + if (pressed & K_Z) { + if (letter < LETTERS) { + if (name_len < 6) name[name_len++] = letter_at(letter); + } else if (letter == 52) title_open(); + else if (letter == 53) { + if (name_len) name_len--; + } else name_done(); + } +} + +/* ---------------------------------------------------------------- the C menu */ +enum { M_MAIN, M_ITEMS, M_ITEM_ACT, M_STAT, M_CELL }; + +void menu_open(void) { + g_mode = MODE_MENU; + st = M_MAIN, sel = 0; + msg_open = false; +} + +static void menu_close(void) { g_mode = MODE_WORLD; } + +static void menu_say(const char *s) { + snprintf(buf, sizeof buf, "%s", s); + text_set_top(-1); + text_open(FACE_NONE, buf); + msg_open = true; +} + +static void c_menu_input(uint32_t pressed) { + if (msg_open) { + text_update(pressed); + if (!text_active()) { + msg_open = false; + if (st != M_MAIN) { + menu_close(); + return; + } + } + return; + } + switch (st) { + case M_MAIN: { + int n = flag(F_PHONE) ? 3 : 2; + if (pressed & K_UP) sel = (sel + n - 1) % n; + if (pressed & K_DOWN) sel = (sel + 1) % n; + if (pressed & (K_X | K_C)) menu_close(); + if (pressed & K_Z) { + if (sel == 0 && item_count()) st = M_ITEMS, item_sel = 0; + else if (sel == 1) st = M_STAT; + else if (sel == 2) st = M_CELL, sub = 0; + } + break; + } + case M_ITEMS: { + int n = item_count(); + if (pressed & K_UP) item_sel = (item_sel + n - 1) % n; + if (pressed & K_DOWN) item_sel = (item_sel + 1) % n; + if (pressed & K_X) st = M_MAIN; + if (pressed & K_Z) st = M_ITEM_ACT, item_act = 0; + break; + } + case M_ITEM_ACT: + if (pressed & K_LEFT) item_act = (item_act + 2) % 3; + if (pressed & K_RIGHT) item_act = (item_act + 1) % 3; + if (pressed & K_X) st = M_ITEMS; + if (pressed & K_Z) { + if (item_act == 0) { + item_use(item_sel, buf, sizeof buf, 0); + menu_say(buf); + } else if (item_act == 1) { + char s[300]; + item_info_text(sv.items[item_sel], s, sizeof s); + menu_say(s); + } else { + char s[120]; + snprintf(s, sizeof s, "* The %s was\n thrown away.", item_info(sv.items[item_sel])->name); + item_remove_at(item_sel); + menu_say(s); + } + } + break; + case M_STAT: + if (pressed & (K_X | K_Z)) st = M_MAIN; + break; + case M_CELL: + if (pressed & K_X) st = M_MAIN; + if (pressed & K_Z) { + menu_close(); + event_start(EV_PHONE_MENU, NULL); + } + break; + } +} + +static void panel(int x, int y, int w, int h) { + gfx_rect(x, y, w, h, C_WHITE, 255); + gfx_rect(x + 3, y + 3, w - 6, h - 6, C_BLACK, 255); +} + +static void draw_c_menu(void) { + bool low = pl.y + 15 - cam_y < 130; + int oy = low ? 135 : 0; + char s[64]; + /* the name and its numbers */ + oy = low ? 135 : 0; + panel(16, 26 + oy, 71, 55); + gfx_text(FONT_MENU, 23, 30 + oy, sv.name, C_WHITE, 255); + snprintf(s, sizeof s, "LV %d", sv.lv); + gfx_text(FONT_SMALL, 23, 50 + oy, s, C_WHITE, 255); + snprintf(s, sizeof s, "HP %d/%d", sv.hp, sv.maxhp); + gfx_text(FONT_SMALL, 23, 59 + oy, s, C_WHITE, 255); + snprintf(s, sizeof s, "G %d", sv.gold); + gfx_text(FONT_SMALL, 23, 68 + oy, s, C_WHITE, 255); + /* ITEM, STAT, CELL */ + int n = flag(F_PHONE) ? 3 : 2; + panel(16, 84, 71, 18 + 18 * n); + static const char *const opts[] = {"ITEM", "STAT", "CELL"}; + for (int i = 0; i < n; i++) { + uint16_t c = (i == 0 && !item_count()) ? rgb565(0x808080) : C_WHITE; + gfx_text(FONT_MENU, 41, 92 + 18 * i, opts[i], c, 255); + } + if (st == M_MAIN) gfx_sprite(SPR_HEART, 0, 32, 98 + 18 * sel, 0, 255); + if (st == M_ITEMS || st == M_ITEM_ACT) { + panel(94, 26, 173, 181); + for (int i = 0; i < item_count(); i++) { + gfx_text(FONT_MENU, 116, 38 + 16 * i, item_info(sv.items[i])->name, C_WHITE, 255); + if (st == M_ITEMS && i == item_sel) gfx_sprite(SPR_HEART, 0, 107, 44 + 16 * i, 0, 255); + } + static const char *const acts[] = {"USE", "INFO", "DROP"}; + for (int i = 0; i < 3; i++) { + gfx_text(FONT_MENU, 116 + i * 48, 180, acts[i], C_WHITE, 255); + if (st == M_ITEM_ACT && i == item_act) gfx_sprite(SPR_HEART, 0, 107 + i * 48, 186, 0, 255); + } + } + if (st == M_STAT) { + panel(94, 26, 173, 209); + snprintf(s, sizeof s, "\"%s\"", sv.name); + gfx_text(FONT_MENU, 108, 38, s, C_WHITE, 255); + snprintf(s, sizeof s, "LV %d", sv.lv); + gfx_text(FONT_MENU, 108, 68, s, C_WHITE, 255); + snprintf(s, sizeof s, "HP %d / %d", sv.hp, sv.maxhp); + gfx_text(FONT_MENU, 108, 84, s, C_WHITE, 255); + snprintf(s, sizeof s, "AT %d(%d)", sv.at - 10, weapon_at()); + gfx_text(FONT_MENU, 108, 114, s, C_WHITE, 255); + snprintf(s, sizeof s, "DF %d(%d)", sv.df - 10, armor_df()); + gfx_text(FONT_MENU, 108, 130, s, C_WHITE, 255); + snprintf(s, sizeof s, "EXP: %d", (int)sv.exp); + gfx_text(FONT_MENU, 190, 114, s, C_WHITE, 255); + snprintf(s, sizeof s, "NEXT: %d", sv.lv < 20 ? lv_exp_for(sv.lv + 1) - (int)sv.exp : 0); + gfx_text(FONT_MENU, 190, 130, s, C_WHITE, 255); + snprintf(s, sizeof s, "WEAPON: %s", item_info(sv.weapon)->name); + gfx_text(FONT_MENU, 108, 160, s, C_WHITE, 255); + snprintf(s, sizeof s, "ARMOR: %s", item_info(sv.armor)->name); + gfx_text(FONT_MENU, 108, 176, s, C_WHITE, 255); + snprintf(s, sizeof s, "GOLD: %d", sv.gold); + gfx_text(FONT_MENU, 108, 200, s, C_WHITE, 255); + if (sv.kills > 20) { + snprintf(s, sizeof s, "KILLS: %d", sv.kills); + gfx_text(FONT_MENU, 190, 200, s, C_WHITE, 255); + } + } + if (st == M_CELL) { + panel(94, 26, 173, 60); + gfx_text(FONT_MENU, 116, 38, "Toriel's Phone", C_WHITE, 255); + gfx_sprite(SPR_HEART, 0, 107, 44, 0, 255); + } +} + +/* ---------------------------------------------------------------- SAVE */ +static int save_state; /* 0 the choice, 1 saved */ + +void menu_save_open(void) { + g_mode = MODE_SAVE; + sel = 0, save_state = 0; +} + +static void draw_save(void) { + panel(54, 58, 212, 82); + char s[48]; + uint16_t c = save_state ? C_YELLOW : C_WHITE; + const Save *shown = &sv; + gfx_text(FONT_MENU, 68, 68, shown->name, c, 255); + snprintf(s, sizeof s, "LV %d", shown->lv); + gfx_text(FONT_MENU, 136, 68, s, c, 255); + unsigned secs = shown->time / 30; + snprintf(s, sizeof s, "%u:%02u", secs / 60, secs % 60); + gfx_text(FONT_MENU, 222, 68, s, c, 255); + RoomInfo ri; + room_info(g_room, &ri); + gfx_text(FONT_MENU, 68, 88, str(ri.name), c, 255); + if (save_state) gfx_text(FONT_MENU, 84, 116, "File saved.", c, 255); + else { + gfx_text(FONT_MENU, 84, 116, "Save", C_WHITE, 255); + gfx_text(FONT_MENU, 180, 116, "Return", C_WHITE, 255); + gfx_sprite(SPR_HEART, 0, sel ? 170 : 74, 122, 0, 255); + } +} + +static void save_input(uint32_t pressed) { + if (save_state) { + if (pressed & (K_Z | K_X)) g_mode = MODE_WORLD; + return; + } + if (pressed & (K_LEFT | K_RIGHT)) sel ^= 1; + if (pressed & K_X) g_mode = MODE_WORLD; + if (pressed & K_Z) { + if (sel) g_mode = MODE_WORLD; + else { + sv.room = (int16_t)g_room, sv.x = pl.x, sv.y = pl.y; + save_write(); + save_state = 1; + } + } +} + +/* ---------------------------------------------------------------- GAME OVER */ +void menu_gameover_open(void) { + g_mode = MODE_GAMEOVER; + st = S_GAMEOVER, t = 0; + snprintf(buf, sizeof buf, "You cannot give\nup just yet...|%s!\nStay determined...", sv.name); + writer_start(&w, buf, 90, 160, FONT_MAIN); + w.speed = 2; +} + +/* ---------------------------------------------------------------- the frame */ +void menu_update(uint32_t keys, uint32_t pressed) { + (void)keys; + t++; + switch (g_mode) { + case MODE_INTRO: + if (pressed & K_Z) { + title_open(); + return; + } + writer_update(&w, 0); + if (t > (slide == 10 ? 300 : slide >= 7 ? 90 : 180)) { + if (slide + 1 < INTRO_SLIDES) intro_slide(slide + 1); + else title_open(); + } + break; + case MODE_TITLE: + if (st == S_TITLE) { + if (pressed & K_Z && t > 15) { + if (save_exists()) st = S_CONTINUE, sel = 0; + else st = S_INSTR, sel = 0; + t = 0; + } + } else if (st == S_INSTR) { + if (pressed & (K_UP | K_DOWN)) sel ^= 1; + if (pressed & K_Z && t > 5) { + if (sel == 0) st = S_NAME, letter = 0, name_len = 0, t = 0; + } + } else if (st == S_NAME) { + name_input(pressed); + } else if (st == S_CONFIRM) { + if (!confirm_allowed) { + if (pressed & (K_Z | K_X)) st = S_NAME; + break; + } + if (pressed & (K_LEFT | K_RIGHT)) sel ^= 1; + if (pressed & K_X) st = S_NAME; + if (pressed & K_Z) { + if (sel == 0) st = S_NAME; + else { + if (same_lower(name, "frisk")) set_flag(F_HARDMODE, 1); + game_new(name); + st = S_FADEIN; + } + } + } else if (st == S_CONTINUE) { + if (pressed & (K_LEFT | K_RIGHT)) sel ^= 1; + if (pressed & K_Z) { + if (sel == 0) save_load(); + else st = S_NAME, letter = 0, name_len = 0; + } + } + break; + case MODE_MENU: + c_menu_input(pressed); + break; + case MODE_SAVE: + save_input(pressed); + break; + case MODE_GAMEOVER: + if (t > 40 && !writer_update(&w, pressed)) { + if (!save_load()) game_new(sv.name); + } + break; + } +} + +void menu_draw(void) { + char s[64]; + switch (g_mode) { + case MODE_INTRO: + if (slide < 10) gfx_sprite(SPR_INTROIMAGE, slide, 0, 0, 0, (uint8_t)min_i(255, t * 16)); + else gfx_sprite(SPR_INTROLAST, 0, 60, 28 - min_i(t / 2, 110), 0, 255); + writer_draw(&w, C_WHITE); + break; + case MODE_TITLE: + if (st == S_TITLE) { + gfx_sprite(SPR_UNDERTALETITLE, 0, 0, 0, 0, 255); + if (t > 30) gfx_text(FONT_SMALL, 128, 184, "[PRESS OK]", rgb565(0x808080), 255); + } else if (st == S_INSTR) { + static const char *const lines[] = {" --- Instruction --- ", "[OK] - Confirm", "[Back] - Cancel", + "[toolbox] - Menu (In-game)", "[Home] - Quit", "When HP is 0, you lose."}; + for (int i = 0; i < 6; i++) gfx_text(FONT_MAIN, 50, 30 + i * 18 + (i > 0) * 4, lines[i], rgb565(0xC0C0C0), 255); + gfx_text(FONT_MAIN, 74, 160, "Begin Game", sel == 0 ? C_YELLOW : C_WHITE, 255); + gfx_text(FONT_MAIN, 74, 180, "Settings", sel == 1 ? C_YELLOW : rgb565(0x808080), 255); + } else if (st == S_NAME) { + gfx_text(FONT_MAIN, 76, 18, "Name the fallen human.", C_WHITE, 255); + memcpy(s, name, (size_t)name_len), s[name_len] = 0; + gfx_text(FONT_MAIN, 128, 40, s, C_WHITE, 255); + for (int i = 0; i < LETTERS; i++) { + int x, y; + letter_xy(i, &x, &y); + char c[2] = {letter_at(i), 0}; + /* (the game's letters tremble; at half its size, one at a time) */ + bool shakes = (g_frame / 3 + (uint32_t)i * 7) % 23 == 0; + gfx_text_ex(FONT_MAIN, x, y, c, 1, i == letter ? C_YELLOW : C_WHITE, shakes, (uint32_t)(i * 77 + g_frame / 3), 0); + } + static const char *const opts[] = {"Quit", "Backspace", "Done"}; + static const int16_t ox[] = {60, 122, 220}; + for (int i = 0; i < 3; i++) gfx_text(FONT_MAIN, ox[i], 200, opts[i], letter == 52 + i ? C_YELLOW : C_WHITE, 255); + } else if (st == S_CONFIRM) { + gfx_text(FONT_MAIN, 76, 18, confirm_text, C_WHITE, 255); + memcpy(s, name, (size_t)name_len), s[name_len] = 0; + /* the name grows */ + int k = min_i(t, 60); + gfx_text_ex(FONT_MAIN, 128 - k / 2, 60 + k / 2, s, name_len, C_WHITE, 1, g_frame / 2, k / 10); + if (confirm_allowed) { + gfx_text(FONT_MAIN, 60, 200, "No", sel == 0 ? C_YELLOW : C_WHITE, 255); + gfx_text(FONT_MAIN, 228, 200, "Yes", sel == 1 ? C_YELLOW : C_WHITE, 255); + } else + gfx_text(FONT_MAIN, 60, 200, "Go back", C_YELLOW, 255); + } else if (st == S_CONTINUE) { + Save saved; + if (save_peek(&saved)) { + gfx_text(FONT_MENU, 70, 60, saved.name, C_WHITE, 255); + snprintf(s, sizeof s, "LV %d", saved.lv); + gfx_text(FONT_MENU, 140, 60, s, C_WHITE, 255); + unsigned secs = saved.time / 30; + snprintf(s, sizeof s, "%u:%02u", secs / 60, secs % 60); + gfx_text(FONT_MENU, 222, 60, s, C_WHITE, 255); + RoomInfo ri; + room_info(saved.room, &ri); + gfx_text(FONT_MENU, 70, 80, str(ri.name), C_WHITE, 255); + } + gfx_text(FONT_MENU, 84, 110, "Continue", sel == 0 ? C_YELLOW : C_WHITE, 255); + gfx_text(FONT_MENU, 190, 110, "Reset", sel == 1 ? C_YELLOW : C_WHITE, 255); + } + break; + case MODE_MENU: + draw_c_menu(); + break; + case MODE_SAVE: + draw_save(); + break; + case MODE_GAMEOVER: + gfx_sprite(SPR_GAMEOVERBG, 0, 0, 0, 0, (uint8_t)min_i(255, t * 6)); + if (t > 40) writer_draw(&w, C_WHITE); + break; + } +} diff --git a/games/undertale/src/menu.h b/games/undertale/src/menu.h index 18fcaa16..bc4589ab 100644 --- a/games/undertale/src/menu.h +++ b/games/undertale/src/menu.h @@ -5,6 +5,7 @@ void menu_title_open(void); void menu_open(void); void menu_save_open(void); +void menu_gameover_open(void); void menu_update(uint32_t keys, uint32_t pressed); void menu_draw(void); void game_new(const char *name); diff --git a/games/undertale/src/monsters.c b/games/undertale/src/monsters.c new file mode 100644 index 00000000..153e35dd --- /dev/null +++ b/games/undertale/src/monsters.c @@ -0,0 +1,696 @@ +/* The Ruins' monsters: stats, texts and ACTs (from the Undertale Wiki's records of the game), their formations, + * and their attacks, as the wiki describes them. */ +#include +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "monsters.h" +#include "res.h" + +/* ---------------------------------------------------------------- the ACTs */ +static void act_dummy(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + snprintf(t, (size_t)cap, "* You talk to the DUMMY.\n* ...|* It doesn't seem much for\n conversation.|* TORIEL seems happy with you."); + m->gone = true, m->fade = 1; + set_flag(F_DUMMY, 1); +} +static const char *flavor_dummy(Battle *b, Monster *m) { + if (b->turn >= 4) return "* Dummy tires of your aimless\n shenanigans."; + return NULL; +} + +static void act_froggit(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { + snprintf(t, (size_t)cap, "* Froggit didn't understand\n what you said, but was\n flattered anyway."); + m->state = 1; + } else { + snprintf(t, (size_t)cap, "* Froggit didn't understand\n what you said, but was scared\n anyway."); + m->state = 2; + } + m->spare = true; +} +static const char *talk_froggit(Battle *b, Monster *m) { + if (m->state == 1) { m->state = 3; return "(Blushes\ndeeply.)\nRibbit.."; } + if (m->state == 2) { m->state = 3; return "Shiver,\nshiver."; } + static const char *const q[] = {"Ribbit,\nribbit.", "Croak,\ncroak.", "Hop,\nhop.", "Meow."}; + return q[rnd_n(4)]; +} +static int attack_froggit(Battle *b, Monster *m) { return rnd_n(10) == 0 ? ATK_FROG_RAIN : rnd_n(2) ? ATK_FROG_FLIES : ATK_FROG_JUMP; } + +static void act_whimsun(Battle *b, Monster *m, int act, char *t, int cap) { + if (act == 0) { + snprintf(t, (size_t)cap, "* Halfway through your first\n word, Whimsun bursts into\n tears and runs away."); + m->gone = true, m->fade = 1; + m->spare_gold = m->state ? 2 : 0; + } else { + snprintf(t, (size_t)cap, "* You raise your arms and\n wiggle your fingers.\n* Whimsun freaks out!"); + m->state = 1; + } + (void)b; +} +static const char *talk_whimsun(Battle *b, Monster *m) { + if (m->state == 1) { m->state = 2; return "I can't\nhandle\nthis..."; } + static const char *const q[] = {"I'm sorry...", "*sniff sniff*", "I have no\nchoice..", "Forgive me..."}; + return q[rnd_n(4)]; +} +static const char *flavor_whimsun(Battle *b, Monster *m) { return m->state ? "* Whimsun is hyperventilating." : NULL; } +static int attack_whimsun(Battle *b, Monster *m) { return rnd_n(2) ? ATK_WHIM_RING : ATK_WHIM_COLS; } + +static void act_moldsmal(Battle *b, Monster *m, int act, char *t, int cap) { + if (act == 0) snprintf(t, (size_t)cap, "* You lie immobile with\n Moldsmal.\n* You feel like you understand\n the world a little better."); + else snprintf(t, (size_t)cap, "* You wiggle your hips.\n* Moldsmal wiggles back.\n* What a meaningful conversation!"); + m->spare_gold = 1; + (void)b; +} +static int attack_moldsmal(Battle *b, Monster *m) { return rnd_n(2) ? ATK_MOLD_ZIG : ATK_MOLD_BURST; } + +static void act_loox(Battle *b, Monster *m, int act, char *t, int cap) { + if (act == 0) { + snprintf(t, (size_t)cap, "* You don't pick on Loox."); + if (m->exp > 4) m->exp = (int16_t)(m->exp - 2); + m->spare = true, m->state = 2; + } else { + snprintf(t, (size_t)cap, "* You do something mean...\n* You pick on Loox. Loox is\n furious!"); + if (m->exp < 20 && !m->spare) m->exp = (int16_t)(m->exp + 5); + m->state = 1; + } + (void)b; +} +static const char *talk_loox(Battle *b, Monster *m) { + if (m->state == 1) { m->state = 0; m->state2 = 1; return "You rude\nlittle\nsnipe!"; } + if (m->state == 2) { m->state = 0; m->state2 = 0; return "Finally\nsomeone\ngets it."; } + if (b->turn <= 1) return "Please don't\npick on me."; + static const char *const q[] = {"Quit staring\nat me.", "I've got my\neye on you.", "How about a\nstaring\ncontest?", "Don't point\nthat at me.", "What an\neyesore."}; + return q[rnd_n(5)]; +} +static int attack_loox(Battle *b, Monster *m) { return rnd_n(2) ? ATK_LOOX_BOUNCE : ATK_LOOX_WORM; } + +static void act_vegetoid(Battle *b, Monster *m, int act, char *t, int cap) { + if (act == 0) { + snprintf(t, (size_t)cap, "* You try to talk with\n Vegetoid, but it just smiles."); + m->state = 3; + } else if (act == 1) { + if (m->spare || m->hp < m->maxhp / 2) { + snprintf(t, (size_t)cap, "* You took a bite out of\n Vegetoid.\n* You recovered 5 HP!"); + sv.hp = (int16_t)min_i(sv.maxhp, sv.hp + 5); + m->gone = true, m->fade = 1; + } else + snprintf(t, (size_t)cap, "* You tried to eat Vegetoid,\n but it wasn't weakened\n enough."); + } else { + snprintf(t, (size_t)cap, "* You pat your stomach.\n* Vegetoid offers a healthy\n meal."); + m->state = 1; + } + (void)b; +} +static const char *talk_vegetoid(Battle *b, Monster *m) { + if (m->state == 3) { m->state = 0; return "Plants Can't\nTalk Dummy"; } + if (m->state == 1) return "Eat Your\nGreens"; + if (m->state == 2) return "Ate Your\nGreens"; + static const char *const q[] = {"Farmed\nLocally,\nVery Locally", "Part Of A\nComplete\nBreakfast", "Fresh\nMorning\nTaste", "Contains\nVitamin A"}; + return q[rnd_n(4)]; +} +static int attack_vegetoid(Battle *b, Monster *m) { return rnd_n(2) ? ATK_VEG_FALL : ATK_VEG_CARROT; } + +static void act_migosp(Battle *b, Monster *m, int act, char *t, int cap) { + if (count_alive() == 1) { + snprintf(t, (size_t)cap, "* You talk to Migosp.\n* It doesn't seem to care about\n anything."); + m->state = 1; + } else + snprintf(t, (size_t)cap, "* You talk to Migosp.\n* It doesn't seem to want to\n listen."); + (void)b; +} +static const char *talk_migosp(Battle *b, Monster *m) { + if (count_alive() == 1) { + m->spare = true; + if (m->state == 1) { m->state = 0; return "Hiya~"; } + static const char *const q[] = {"Bein' me is\nthe best!", "La la~ Just\nbe yourself~", "Nothin' like\nalone time!", "Mmm, cha\ncha cha!", "Swing your\narms, baby"}; + return q[rnd_n(5)]; + } + if (m->state == 1) { m->state = 0; return "I DON'T\nCARE."; } + static const char *const q[] = {"FILTHY\nSINGLE\nMINDER..", "OBEY THE\nOVERMIND ..", "LEGION! WE\nARE LEGION", "HEED THE\nSWARM", "IN UNISON,\nNOW"}; + return q[rnd_n(5)]; +} +static const char *flavor_migosp(Battle *b, Monster *m) { + if (count_alive() == 1) return "* Migosp doesn't have a care\n in the world."; + return NULL; +} +static int attack_migosp(Battle *b, Monster *m) { + if (count_alive() == 1) return ATK_MIGOSP_DANCE; + return rnd_n(8) == 0 ? ATK_FROG_FLIES : ATK_MIGOSP_ROACH; +} + +/* ---------------------------------------------------------------- Napstablook */ +static void act_napsta(Battle *b, Monster *m, int act, char *t, int cap) { + /* state: cheers; state2: 1 after the hat, 2 morose (turns of it in b->state[1]) */ + if (act == 2) { /* Cheer */ + if (m->state2 == 2) { + snprintf(t, (size_t)cap, "* You try to console\n Napstablook..."); + b->state[1]++; + if (b->state[1] >= 8) m->state2 = 0, m->state = 0; + return; + } + m->state++; + if (m->state == 1) snprintf(t, (size_t)cap, "* You gave Napstablook a\n patient smile."); + else if (m->state == 2) snprintf(t, (size_t)cap, "* You told Napstablook a\n little joke."); + else if (m->state == 3) snprintf(t, (size_t)cap, "* Napstablook wants to show\n you something."); + else { + snprintf(t, (size_t)cap, "* ..."); + b->state[2] = 1; /* the end: Napstablook goes */ + } + } else if (act == 0) { /* Flirt */ + if (m->state >= 3) { + snprintf(t, (size_t)cap, "* You flirt with Napstablook."); + b->state[2] = 2; + } else { + snprintf(t, (size_t)cap, "* You try your best pickup\n line."); + m->state2 = 2, b->state[1] = 0; + } + } else { /* Threat */ + snprintf(t, (size_t)cap, "* You give Napstablook a\n cruel look."); + m->state2 = 2, b->state[1] = 0, b->state[3] = m->state >= 3; + m->state = 0; + } +} +static const char *talk_napsta(Battle *b, Monster *m) { + if (b->state[2] == 3) + return "umm... you do\nknow you cant\nkill ghosts,\nright?|we're sorta\nincorporeal\nand all|i was just\nlowering my\nhp because i\ndidnt want to\nbe rude|sorry... i\njust made\nthis more\nawkward...|pretend you\nbeat me...|oooooooooo"; + if (b->state[2] == 1) return "oh gee..."; + if (b->state[2] == 2) return "oh no..."; + if (b->state[3]) { b->state[3] = 0; return "i knew it..."; } + if (m->acts[0] && m->state2 == 2 && b->state[1] == 0 && b->state[4] != 1) { b->state[4] = 1; return "i'd just\nweigh you\ndown."; } + if (m->acts[1] && m->state2 == 2 && b->state[1] == 0 && b->state[4] != 2) { b->state[4] = 2; return "go ahead,\ndo it."; } + if (m->state == 1 && b->state[5] != 1) { b->state[5] = 1; return "heh..."; } + if (m->state == 2 && b->state[5] != 2) { b->state[5] = 2; return "heh heh..."; } + if (m->state == 3 && b->state[5] != 3) { b->state[5] = 3; return "let me\ntry...|i call it\n\"dapper\nblook\"|do you\nlike it..."; } + static const char *const q[] = {"nnnnnnggghhh.", "just pluggin\nalong...", "i'm fine,\nthanks."}; + return q[rnd_n(3)]; +} +static const char *flavor_napsta(Battle *b, Monster *m) { + if (m->state2 == 2) return NULL; + if (m->state == 1) return "* Napstablook looks just a\n little bit better."; + if (m->state == 2) return "* Cheering seems to have\n improved Napstablook's mood\n again."; + if (m->state >= 3) return "* Napstablook eagerly awaits\n your response."; + return NULL; +} +static int attack_napsta(Battle *b, Monster *m) { + if (b->state[2]) return -1; + if (b->turn == 2) return ATK_NAPSTA_TEXT; + if (m->state == 3 && b->state[5] == 3 && !b->state[6]) { b->state[6] = 1; return ATK_NAPSTA_HAT; } + if (m->state >= 3) return ATK_IDLE; + if (m->state2 == 2) return b->state[1] >= 6 ? ATK_NAPSTA_TEARS : ATK_NAPSTA_FLOOD; + return rnd_n(2) ? ATK_NAPSTA_TEARS : ATK_NAPSTA_WIGGLE; +} +static bool ends_napsta(Battle *b, Monster *m) { + if (b->state[2] == 3) m->killed = false, m->exp = 0; + if (b->state[2]) set_flag(F_NAPSTA, b->state[2] == 3 ? 2 : 1); + return b->state[2] != 0; +} +static bool hit_napsta(Battle *b, Monster *m, int dmg) { + m->hp = (int16_t)(m->hp - dmg); + m->hurt = 30; + if (m->hp <= 0) { + m->hp = 0; + b->state[2] = 3; /* "you cant kill ghosts": then gone, no EXP */ + } + return true; +} + +/* ---------------------------------------------------------------- the monsters */ +static const MonDef defs[MON_COUNT] = { + [MON_DUMMY] = { + .name = "Dummy", .hp = 15, .at = 0, .df = -5, .exp = 0, .gold = 0, .spr_idle = SPR_DUMMY_B, .spr_hurt = SPR_DUMMY_B, + .check = "A cotton heart and a button\n eye\n* You are the apple of my eye", + .acts = {"Talk"}, .nacts = 1, .neutral = {"* Dummy looks like it's going\n to fall over.", "* Dummy stands around\n absentmindedly."}, + .quotes = {"....."}, .act = act_dummy, .flavor = flavor_dummy, .flags = MF_SPARE_START}, + [MON_FROGGIT_FIRST] = { + .name = "Froggit", .hp = 20, .at = 4, .df = 1, .exp = 10, .gold = 20, .spr_idle = SPR_FROGGIT_B, .spr_hurt = SPR_FROGGIT_HURT, + .idle_speed = 8, .check = "Life is difficult for this\n enemy.", .acts = {"Compliment", "Threaten"}, .nacts = 2, + .neutral = {"* Froggit doesn't seem to know\n why it's here.", "* Froggit hops to and fro.", + "* The battlefield is filled\n with the smell of mustard\n seed.", "* You are intimidated by\n Froggit's raw strength.\n* Only kidding."}, + .low_hp = "* Froggit is trying to run\n away.", .spareable = "* Froggit seems reluctant to\n fight you.", + .act = act_froggit, .talk = talk_froggit, .attack = attack_froggit}, + [MON_FROGGIT] = { + .name = "Froggit", .hp = 30, .at = 4, .df = 4, .exp = 3, .gold = 2, .spr_idle = SPR_FROGGIT_B, .spr_hurt = SPR_FROGGIT_HURT, + .idle_speed = 8, .check = "Life is difficult for this\n enemy.", .acts = {"Compliment", "Threaten"}, .nacts = 2, + .neutral = {"* Froggit doesn't seem to know\n why it's here.", "* Froggit hops to and fro.", + "* The battlefield is filled\n with the smell of mustard\n seed.", "* You are intimidated by\n Froggit's raw strength.\n* Only kidding."}, + .low_hp = "* Froggit is trying to run\n away.", .spareable = "* Froggit seems reluctant to\n fight you.", + .act = act_froggit, .talk = talk_froggit, .attack = attack_froggit}, + [MON_WHIMSUN] = { + .name = "Whimsun", .hp = 10, .at = 4, .df = 0, .exp = 2, .gold = 2, .spr_idle = SPR_WHIMSUN_B, .spr_hurt = SPR_WHIMSUN_HURT, + .idle_speed = 4, .dy = -10, .check = "This monster is too sensitive\n to fight...", .acts = {"Console", "Terrorize"}, .nacts = 2, + .neutral = {"* Whimsun continues to mutter\n apologies.", "* Whimsun avoids eye contact.", "* Whimsun is fluttering.", + "* It's starting to smell like\n lavender and mothballs."}, + .flags = MF_ONE_HIT | MF_SPARE_START, .act = act_whimsun, .talk = talk_whimsun, .attack = attack_whimsun, .flavor = flavor_whimsun}, + [MON_MOLDSMAL] = { + .name = "Moldsmal", .hp = 50, .at = 4, .df = 0, .exp = 3, .gold = 3, .spr_idle = SPR_MOLDSMAL_B, .spr_hurt = SPR_MOLDSMAL_B, + .idle_speed = 6, .check = "Stereotypical: Curvaceously\n attractive, but no brains...", .acts = {"Imitate", "Flirt"}, .nacts = 2, + .neutral = {"* Moldsmal waits pensively.", "* Moldsmal burbles quietly.", "* Moldsmal is ruminating.", + "* The sound of slurping fills\n the room.", "* Moldsmal hasn't brushed its\n teeth."}, + .quotes = {"Squorch...", "Burble\nburb...", "*Slime\nsounds*", "*Sexy\nwiggle*"}, + .flags = MF_SPARE_START, .act = act_moldsmal, .attack = attack_moldsmal}, + [MON_LOOX] = { + .name = "Loox", .hp = 50, .at = 5, .df = 4, .exp = 7, .gold = 5, .spr_idle = SPR_LOOX_B, .spr_hurt = SPR_LOOX_HURT, + .idle_speed = 6, .check = "Don't pick on him.\n* Family name: Eyewalker", .acts = {"Don't Pick On", "Pick On"}, .nacts = 2, + .neutral = {"* Loox is staring right\n through you.", "* Loox is gazing at you.", "* Loox gnashes its teeth.", + "* Smells like eyedrops."}, + .low_hp = "* Loox is watering.", .act = act_loox, .talk = talk_loox, .attack = attack_loox}, + [MON_VEGETOID] = { + .name = "Vegetoid", .hp = 72, .at = 5, .df = 0, .exp = 6, .gold = 1, .spr_idle = SPR_VEGETOID_B, .spr_hurt = SPR_VEGETOID_HURT, + .idle_speed = 6, .check = "Serving Size: 1 Monster\n* Not monitored by the USDA", .acts = {"Talk", "Devour", "Dinner"}, .nacts = 3, + .neutral = {"* Vegetoid cackles softly.", "* Vegetoid's here for your\n health.", "* Vegetoid gave a mysterious\n smile.", + "* It smells like steamed\n carrots and peas."}, + .low_hp = "* Vegetoid seems kind of\n bruised.", .act = act_vegetoid, .talk = talk_vegetoid, .attack = attack_vegetoid}, + [MON_MIGOSP] = { + .name = "Migosp", .hp = 40, .at = 5, .df = 4, .exp = 5, .gold = 2, .spr_idle = SPR_MIGOSP_B, .spr_hurt = SPR_MIGOSP_HURT, + .idle_speed = 4, .check = "It seems evil, but it's just\n with the wrong crowd...", .acts = {"Talk"}, .nacts = 1, + .neutral = {"* Migosp skitters around.", "* Migosp is knitting its brow.", "* Migosp is whispering to the\n others.", + "* It's starting to smell like a\n roach motel."}, + .low_hp = "* Migosp refuses to give up.", .act = act_migosp, .talk = talk_migosp, .attack = attack_migosp, + .flavor = flavor_migosp}, + [MON_NAPSTABLOOK] = { + .name = "Napstablook", .hp = 88, .at = 3, .df = 4, .exp = 0, .gold = 0, .spr_idle = SPR_NAPSTABLOOK_B, .spr_hurt = SPR_NAPSTABLOOK_B, + .idle_speed = 6, .dy = -16, .check = "This monster doesn't seem to\n have a sense of humor...", .acts = {"Flirt", "Threat", "Cheer"}, .nacts = 3, + .neutral = {"* Napstablook is wishing they\n weren't here.", "* Napstablook is staring into\n the distance.", + "* Napstablook is pretending to\n sleep.", "* The faint odor of ectoplasm\n permeates the vicinity."}, + .flags = MF_BOSS, .act = act_napsta, .talk = talk_napsta, .attack = attack_napsta, .flavor = flavor_napsta, + .on_hit = hit_napsta, .ends = ends_napsta}, +}; + +extern const MonDef toriel_def; +const MonDef *mon_def(int id) { return id == MON_TORIEL ? &toriel_def : &defs[id]; } + +/* ---------------------------------------------------------------- formations */ +typedef struct { + uint8_t mon[MAX_MON]; + uint8_t n; + const char *text; +} Form; +static const Form forms[FORM_COUNT] = { + [FORM_DUMMY] = {{MON_DUMMY}, 1, "* You encountered the Dummy."}, + [FORM_FROGGIT_FIRST] = {{MON_FROGGIT_FIRST}, 1, "* Froggit attacks you!"}, + [FORM_FROGGIT] = {{MON_FROGGIT}, 1, "* Froggit hopped close!"}, + [FORM_WHIMSUN] = {{MON_WHIMSUN}, 1, "* Whimsun approached meekly!"}, + [FORM_FROGGIT_WHIMSUN] = {{MON_FROGGIT, MON_WHIMSUN}, 2, "* Froggit and Whimsun drew\n near!"}, + [FORM_FROGGIT2] = {{MON_FROGGIT, MON_FROGGIT}, 2, "* A pair of Froggits hop\n towards you."}, + [FORM_MOLDSMAL] = {{MON_MOLDSMAL}, 1, "* Moldsmal blocks the way!"}, + [FORM_MOLDSMAL2] = {{MON_MOLDSMAL, MON_MOLDSMAL}, 2, "* Moldsmal and Moldsmal block\n the way."}, + [FORM_MOLDSMAL3] = {{MON_MOLDSMAL, MON_MOLDSMAL, MON_MOLDSMAL}, 3, "* You're surrounded by\n Moldsmal!"}, + [FORM_MOLDSMAL_MIGOSP] = {{MON_MIGOSP, MON_MOLDSMAL}, 2, "* Migosp crawled up close!"}, + [FORM_LOOX] = {{MON_LOOX}, 1, "* Loox drew near!"}, + [FORM_LOOX2] = {{MON_LOOX, MON_LOOX}, 2, "* A pair of Loox decided to\n pick on you!"}, + [FORM_VEGETOID] = {{MON_VEGETOID}, 1, "* Vegetoid came out of the\n earth!"}, + [FORM_VEGETOID2] = {{MON_VEGETOID, MON_VEGETOID}, 2, "* A pair of Vegetoids came out\n of the ground!"}, + [FORM_VEGETOID_MIGOSP] = {{MON_MIGOSP, MON_VEGETOID}, 2, "* Vegetoid came out of the\n earth!"}, + [FORM_LOOX_VEG_MIGOSP] = {{MON_VEGETOID, MON_LOOX, MON_MIGOSP}, 3, "* Loox and co. decided to pick\n on you!"}, + [FORM_NAPSTABLOOK] = {{MON_NAPSTABLOOK}, 1, "* Here comes Napstablook."}, + [FORM_TORIEL] = {{MON_TORIEL}, 1, "* Toriel blocks the way!"}, + [FORM_FLOWEY] = {{MON_FLOWEY}, 1, ""}, +}; + +int form_setup(int form, Battle *b) { + const Form *f = &forms[form]; + static const int16_t xs[3][3] = {{160}, {108, 212}, {70, 160, 250}}; + b->nmon = f->n; + for (int i = 0; i < f->n; i++) { + Monster *m = &b->mon[i]; + memset(m, 0, sizeof *m); + m->def = mon_def(f->mon[i]); + m->x = (int16_t)(xs[f->n - 1][i] + m->def->dx), m->y = (int16_t)(120 + m->def->dy); + } + if (form == FORM_NAPSTABLOOK || form == FORM_TORIEL || form == FORM_FLOWEY) b->no_flee = form == FORM_FLOWEY; + return 0; +} +const char *form_text(int form) { return forms[form].text; } + +/* ---------------------------------------------------------------- attacks */ +/* the board's inside, in pixels */ +static int bx0(void) { return bt.x0 + 3; } +static int bx1(void) { return bt.x1 - 3; } +static int by0(void) { return bt.y0 + 3; } +static int by1(void) { return bt.y1 - 3; } +#define P(v) ((v) * FX) + +static Bullet *shot(uint16_t spr, int x, int y, int vx, int vy) { + Bullet *b = bullet_new(spr, P(x), P(y), vx, vy); + if (b) b->owner = (uint8_t)bt.atk_owner; + return b; +} + +static int toward(int from, int to, int sp, int dist) { return dist ? (to - from) * sp / dist : 0; } +static int isqrt(int v) { + int r = 0; + while ((r + 1) * (r + 1) <= v) r++; + return r; +} + +static void atk_frog_flies(int t) { + /* five flies come down one after another, stop, then dart at the SOUL */ + if (t < 0) return; + if (t < 50 && t % 10 == 0) { + Bullet *b = shot(SPR_FLYBULLET, bx0() + 6 + rnd_n(bx1() - bx0() - 12), by0() - 6, 0, P(3) / 2); + if (b) b->kind = BK_SCRIPT, b->anim = 3, b->a = (int16_t)(by0() + 6 + rnd_n(20)), b->b = 0; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + if (b->b == 0 && b->y / FX >= b->a) b->vy = 0, b->b = 1, b->c = 0; + else if (b->b == 1 && ++b->c >= 14) { + int dx = bt.sx - b->x, dy = bt.sy - b->y, d = isqrt((dx / 4) * (dx / 4) + (dy / 4) * (dy / 4)) * 4; + b->vx = toward(b->x, bt.sx, P(2), d), b->vy = toward(b->y, bt.sy, P(2), d); + b->b = 2; + } + b->x += b->vx, b->y += b->vy; + b->t++; + if (b->t % 3 == 0) b->frame++; + } +} + +static void atk_frog_jump(int t) { + /* a little frog hops from the bottom right to the other side, with random force */ + if (t < 0) return; + if (t == 0) { + Bullet *b = shot(SPR_SMALLFROGBULLET, bx1() - 8, by1() - 8, 0, 0); + if (b) b->kind = BK_SCRIPT, b->a = 20, b->r = 7; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + if (b->a > 0) { + b->frame = 0; + if (--b->a == 0) b->vx = -(P(1) + rnd_n(P(3) / 2)), b->vy = -(P(2) + rnd_n(P(1))); + continue; + } + b->frame = 1; + b->vy += P(1) / 7; + b->x += b->vx, b->y += b->vy; + if (b->y >= P(by1() - 8)) { + b->y = P(by1() - 8), b->vy = 0, b->vx = 0, b->a = 18; + } + } +} + +static void atk_frog_rain(int t) { + /* flies falling smoothly down the board, not aimed */ + if (t < 0) return; + if (t < 100 && t % 9 == 0) { + Bullet *b = shot(SPR_FLYBULLET, bx0() + 4 + rnd_n(bx1() - bx0() - 8), by0() - 6, 0, P(1)); + if (b) b->anim = 3; + } +} + +static void atk_whim_ring(int t) { + /* a ring of moths around the board's middle, growing and shrinking */ + int n = 10; + if (t < 0) return; + if (t == 0) + for (int k = 0; k < n; k++) { + Bullet *b = shot(SPR_BUTTERFLYBLLT, board_cx(), board_cy(), 0, 0); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)(k * 256 / n), b->anim = 4; + } + int r = 26 + gfx_sin(t * 2) * 14 / 1024; + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + int a = b->a + t; + b->x = P(board_cx()) + r * gfx_cos(a) * FX / 1024, b->y = P(board_cy()) + r * gfx_sin(a) * FX / 1024; + if (++b->t % 4 == 0) b->frame++; + } +} + +static void atk_whim_cols(int t) { + /* two columns of moths rising on either side of the SOUL, following it */ + if (t < 0) return; + if (t == 0) bt.as[0] = bt.sx; + bt.as[0] += (bt.sx - bt.as[0]) / 12; + if (t < 120 && t % 7 == 0) + for (int s = -1; s <= 1; s += 2) { + Bullet *b = shot(SPR_BUTTERFLYBLLT, 0, by1() + 6, 0, -P(3) / 2); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)s, b->anim = 4, b->x = bt.as[0] + s * P(16); + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->x = bt.as[0] + b->a * P(16); + b->y += b->vy; + if (++b->t % 4 == 0) b->frame++; + if (b->y < P(by0() - 10)) b->kind = BK_NONE; + } +} + +static void atk_mold_zig(int t) { + /* pellets falling in a zigzag */ + if (t < 0) return; + if (t < 110 && t % 10 == 0) { + Bullet *b = shot(SPR_BULLETMD, bx0() + 8 + rnd_n(bx1() - bx0() - 16), by0() - 4, P(1), P(1)); + if (b) b->kind = BK_SCRIPT; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + if (++b->t % 14 == 0) b->vx = -b->vx; + b->x += b->vx, b->y += b->vy; + } +} + +static void atk_mold_burst(int t) { + /* pellets that fall a little way, then burst into rings of smaller ones */ + if (t < 0) return; + if (t < 100 && t % 25 == 0) { + Bullet *b = shot(SPR_BULLETMD, bx0() + 10 + rnd_n(bx1() - bx0() - 20), by0() - 4, 0, P(1)); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)(12 + rnd_n(16)); + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->y += b->vy; + if (++b->t >= b->a) { + for (int k = 0; k < 8; k++) { + Bullet *s = shot(SPR_BULLETSM, b->x / FX, b->y / FX, gfx_cos(k * 32) * P(1) / 1024, gfx_sin(k * 32) * P(1) / 1024); + if (s) s->life = 60; + } + b->kind = BK_NONE; + } + } +} + +static void atk_loox_bounce(int t) { + /* spheres come in from the sides and bounce around the board, faster and faster */ + bool mad = bt.mon[bt.atk_owner].state2; + if (t < 0) return; + if (t < 40 && t % 8 == 0) { + int s = (t / 8) % 2 ? 1 : -1; + Bullet *b = shot(SPR_CIRCLEBULLETMD1, s < 0 ? bx0() - 4 : bx1() + 4, by0() + 8 + rnd_n(by1() - by0() - 16), -s * P(1), (rnd_n(2) ? 1 : -1) * P(1)); + if (b) b->kind = BK_SCRIPT, b->a = 0; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + if (++b->t % 20 == 0) b->vx += b->vx / (mad ? 4 : 8), b->vy += b->vy / (mad ? 4 : 8); + b->x += b->vx, b->y += b->vy; + if (b->t > 8) { + if (b->x < P(bx0() + 3) || b->x > P(bx1() - 3)) b->vx = -b->vx; + if (b->y < P(by0() + 3) || b->y > P(by1() - 3)) b->vy = -b->vy; + } + } +} + +static void atk_loox_worm(int t) { + /* worms of spheres wiggling across the board */ + bool mad = bt.mon[bt.atk_owner].state2; + if (t < 0) return; + int every = mad ? 16 : 24; + if (t < 110 && t % every == 0) { + int s = (t / every) % 2 ? 1 : -1, y = by0() + 10 + rnd_n(by1() - by0() - 20); + for (int k = 0; k < 4; k++) { + Bullet *b = shot(SPR_CIRCLEBULLETSM, (s < 0 ? bx0() - 4 - k * 6 : bx1() + 4 + k * 6), y, -s * (mad ? P(3) / 2 : P(1)), 0); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)y, b->b = (int16_t)(k * 20); + } + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->t++; + b->x += b->vx; + b->y = P(b->a) + gfx_sin(b->t * 6 + b->b) * P(6) / 1024; + if ((b->vx > 0 && b->x > P(bx1() + 8)) || (b->vx < 0 && b->x < P(bx0() - 8))) b->kind = BK_NONE; + } +} + +static void atk_veg_fall(int t) { + /* vegetables fall and bounce off the bottom; after Dinner, one of them is green */ + Monster *m = &bt.mon[bt.atk_owner]; + if (t < 0) return; + if (t < 100 && t % 14 == 0) { + Bullet *b = shot(SPR_VEGBULLET, bx0() + 8 + rnd_n(bx1() - bx0() - 16), by0() - 6, (rnd_n(2) ? 1 : -1) * rnd_n(P(1)), P(1)); + if (b) { + b->kind = BK_SCRIPT, b->frame = (uint8_t)rnd_n(3), b->a = 0; + if (m->state == 1 && t == 42) b->color = BC_GREEN; + } + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->vy += P(1) / 12; + b->x += b->vx, b->y += b->vy; + if (b->y > P(by1() - 5) && b->vy > 0 && !b->a) b->vy = -b->vy * 2 / 3, b->a = 1; + } + if (m->state == 1 && t == 99) m->state = 2, m->spare = true; +} + +static void atk_veg_carrot(int t) { + /* carrots dropping straight down */ + Monster *m = &bt.mon[bt.atk_owner]; + if (t < 0) return; + if (t < 110 && t % 11 == 0) { + Bullet *b = shot(SPR_CARROTBULLET, bx0() + 6 + rnd_n(bx1() - bx0() - 12), by0() - 8, 0, P(2)); + if (b && m->state == 1 && t == 44) b->color = BC_GREEN; + if (b) b->kind = BK_SCRIPT; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->y += b->vy; + if (b->y > P(by1())) b->kind = BK_NONE; + } + if (m->state == 1 && t == 109) m->state = 2, m->spare = true; +} + +static void atk_migosp_roach(int t) { + /* roaches flying up the left and the right halves */ + if (t < 0) return; + if (t < 110 && t % 8 == 0) { + int left = (t / 8) % 2, w = (bx1() - bx0()) / 2 - 8; + int x = left ? bx0() + 4 + rnd_n(w) : board_cx() + 4 + rnd_n(w); + Bullet *b = shot(SPR_ROACHBULLET, x, by1() + 6, 0, -P(3) / 2); + if (b) b->anim = 3; + } +} + +static void atk_migosp_dance(int t) { + /* a tiny roach dancing at the bottom: touching it ends the turn */ + if (t < 0) return; + if (t == 0) { + Bullet *b = shot(SPR_ROACHDANCE, board_cx(), by1() - 6, P(1), 0); + if (b) b->kind = BK_SCRIPT, b->anim = 5, b->flags = BF_HARMLESS; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->x += b->vx; + if (b->x < P(bx0() + 6) || b->x > P(bx1() - 6)) b->vx = -b->vx; + if (++b->t % 5 == 0) b->frame++; + int dx = b->x / FX - soul_x(), dy = b->y / FX - soul_y(); + if (dx * dx + dy * dy < 64) bt.atk_t = bt.atk_len; + } +} + +static void atk_napsta_tears(int t, int every) { + /* tears arching out of Napstablook's eyes, then falling straight */ + if (t < 0) return; + if (t < 120 && t % every == 0) { + int s = rnd_n(2) ? 1 : -1; + Bullet *b = shot(SPR_TEARDROP, board_cx() + s * 10, by0() - 4, s * (P(1) / 2 + rnd_n(P(1))), -P(1)); + if (b) b->kind = BK_GRAVITY, b->ay = P(1) / 16, b->dmg = 3; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind == BK_GRAVITY && b->vy > P(1)) b->vx = b->vx * 7 / 8; + } +} + +static void atk_napsta_wiggle(int t) { + /* long wiggly tears turning at the walls, falling once over the SOUL */ + if (t < 0) return; + if (t < 100 && t % 20 == 0) { + Bullet *b = shot(SPR_TEARDROP, bx0() + 6 + rnd_n(bx1() - bx0() - 12), by0() + 2, (rnd_n(2) ? 1 : -1) * P(3) / 2, 0); + if (b) b->kind = BK_SCRIPT, b->dmg = 3, b->a = 0; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->t++; + if (!b->a) { + b->x += b->vx; + b->y = b->y + (gfx_sin(b->t * 10) > 0 ? FX / 4 : -FX / 4); + if (b->x < P(bx0() + 4) || b->x > P(bx1() - 4)) b->vx = -b->vx; + if (abs_i(b->x - bt.sx) < P(3) && b->t > 15) b->a = 1, b->vy = P(2); + } else + b->y += b->vy; + } +} + +static void atk_napsta_text(int t) { + /* REALLY NOT FEELIN UP TO IT RIGHT NOW. SORRY. in grey, harmless: drawn by attack_draw */ + (void)t; +} + +static void atk_napsta_hat(int t) { + /* the tears rise to make a top hat on Napstablook's head */ + if (t < 0) return; + if (t < 60 && t % 4 == 0) { + Bullet *b = shot(SPR_TEARDROP, bx0() + 6 + rnd_n(bx1() - bx0() - 12), by1() - 2, 0, -P(2)); + if (b) b->flags |= BF_HARMLESS, b->kind = BK_SCRIPT; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->y += b->vy; + if (b->y < P(by0())) b->kind = BK_NONE; + } + if (t == 70) bt.mon[0].spr_override = SPR_NAPSTA_HAT; +} + +static const int16_t lengths[ATK_COUNT] = { + [ATK_FROG_FLIES] = 150, [ATK_FROG_JUMP] = 150, [ATK_FROG_RAIN] = 150, [ATK_WHIM_RING] = 150, [ATK_WHIM_COLS] = 150, + [ATK_MOLD_ZIG] = 150, [ATK_MOLD_BURST] = 150, [ATK_LOOX_BOUNCE] = 160, [ATK_LOOX_WORM] = 150, [ATK_VEG_FALL] = 150, + [ATK_VEG_CARROT] = 150, [ATK_MIGOSP_ROACH] = 150, [ATK_MIGOSP_DANCE] = 180, [ATK_NAPSTA_TEARS] = 150, + [ATK_NAPSTA_WIGGLE] = 150, [ATK_NAPSTA_TEXT] = 120, [ATK_NAPSTA_HAT] = 100, [ATK_NAPSTA_FLOOD] = 150, + [ATK_TOR_HANDS] = 170, [ATK_TOR_WAVES] = 180, [ATK_TOR_HELIX] = 180, [ATK_TOR_FALTER] = 150, [ATK_IDLE] = 60, +}; +int attack_length(int atk) { return atk >= 0 && atk < ATK_COUNT && lengths[atk] ? lengths[atk] : 150; } + +void toriel_attack(int atk, int t); /* toriel.c */ + +void attack_run(Battle *b, int atk, int t) { + (void)b; + switch (atk) { + case ATK_FROG_FLIES: atk_frog_flies(t); break; + case ATK_FROG_JUMP: atk_frog_jump(t); break; + case ATK_FROG_RAIN: atk_frog_rain(t); break; + case ATK_WHIM_RING: atk_whim_ring(t); break; + case ATK_WHIM_COLS: atk_whim_cols(t); break; + case ATK_MOLD_ZIG: atk_mold_zig(t); break; + case ATK_MOLD_BURST: atk_mold_burst(t); break; + case ATK_LOOX_BOUNCE: atk_loox_bounce(t); break; + case ATK_LOOX_WORM: atk_loox_worm(t); break; + case ATK_VEG_FALL: atk_veg_fall(t); break; + case ATK_VEG_CARROT: atk_veg_carrot(t); break; + case ATK_MIGOSP_ROACH: atk_migosp_roach(t); break; + case ATK_MIGOSP_DANCE: atk_migosp_dance(t); break; + case ATK_NAPSTA_TEARS: atk_napsta_tears(t, 9); break; + case ATK_NAPSTA_FLOOD: atk_napsta_tears(t, 3); break; + case ATK_NAPSTA_WIGGLE: atk_napsta_wiggle(t); break; + case ATK_NAPSTA_TEXT: atk_napsta_text(t); break; + case ATK_NAPSTA_HAT: atk_napsta_hat(t); break; + case ATK_TOR_HANDS: case ATK_TOR_WAVES: case ATK_TOR_HELIX: case ATK_TOR_FALTER: toriel_attack(atk, t); break; + default: break; + } +} + +void toriel_draw_attack(int atk, int t); /* toriel.c */ + +void attack_draw(Battle *b, int atk, int t) { + (void)b; + if (atk == ATK_NAPSTA_TEXT) { + /* the grey words drift down: harmless */ + static const char *const words[] = {"REALLY", "NOT", "FEELIN", "UP", "TO", "IT", "RIGHT", "NOW.", "SORRY."}; + for (int k = 0; k < 9; k++) { + int y = by0() - 10 + (t - k * 8) * 2 / 3; + if (y > by0() - 12 && y < by1()) gfx_text(FONT_SMALL, bx0() + 4 + (k * 23) % (bx1() - bx0() - 30), y, words[k], rgb565(0x808080), 255); + } + } + if (atk >= ATK_TOR_HANDS && atk <= ATK_TOR_FALTER) toriel_draw_attack(atk, t); +} diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h new file mode 100644 index 00000000..68eaaa33 --- /dev/null +++ b/games/undertale/src/monsters.h @@ -0,0 +1,23 @@ +/* Undertale: the monsters, their formations and their attacks. */ +#ifndef UT_MONSTERS_H +#define UT_MONSTERS_H + +enum { + MON_DUMMY, MON_FROGGIT_FIRST, MON_FROGGIT, MON_WHIMSUN, MON_MOLDSMAL, MON_LOOX, MON_VEGETOID, MON_MIGOSP, + MON_NAPSTABLOOK, MON_TORIEL, MON_FLOWEY, MON_COUNT +}; + +/* formations: who is fought */ +enum { + FORM_DUMMY, FORM_FROGGIT_FIRST, FORM_FROGGIT, FORM_WHIMSUN, FORM_FROGGIT_WHIMSUN, FORM_FROGGIT2, FORM_MOLDSMAL, + FORM_MOLDSMAL2, FORM_MOLDSMAL3, FORM_MOLDSMAL_MIGOSP, FORM_LOOX, FORM_LOOX2, FORM_VEGETOID, FORM_VEGETOID2, + FORM_VEGETOID_MIGOSP, FORM_LOOX_VEG_MIGOSP, FORM_NAPSTABLOOK, FORM_TORIEL, FORM_FLOWEY, FORM_COUNT +}; + +enum { + ATK_NONE, ATK_FROG_FLIES, ATK_FROG_JUMP, ATK_FROG_RAIN, ATK_WHIM_RING, ATK_WHIM_COLS, ATK_MOLD_ZIG, ATK_MOLD_BURST, + ATK_LOOX_BOUNCE, ATK_LOOX_WORM, ATK_VEG_FALL, ATK_VEG_CARROT, ATK_MIGOSP_ROACH, ATK_MIGOSP_DANCE, + ATK_NAPSTA_TEARS, ATK_NAPSTA_WIGGLE, ATK_NAPSTA_TEXT, ATK_NAPSTA_HAT, ATK_NAPSTA_FLOOD, + ATK_TOR_HANDS, ATK_TOR_WAVES, ATK_TOR_HELIX, ATK_TOR_FALTER, ATK_IDLE, ATK_COUNT +}; +#endif diff --git a/games/undertale/src/save.c b/games/undertale/src/save.c index 9355a6cc..46a9d62d 100644 --- a/games/undertale/src/save.c +++ b/games/undertale/src/save.c @@ -1,8 +1,170 @@ -/* Saves (save.h). */ +/* Saves (save.h): the game's SAVE (undertale.sav), the moment kept when Home quits (utresume.sav, read once + * on the next start), and a copy of both in a Python script: installing apps from the NumWorks website keeps + * only Python scripts, so the saves come back from it when the files themselves are gone. Each is a + * comment line "#>name:base64" (the way NumPlay and its big games keep theirs). */ +#include +#include "game.h" +#include "menu.h" +#include "plat.h" #include "save.h" -void save_restore_copy(void) {} -bool save_write(void) { return false; } -bool save_exists(void) { return false; } -bool save_load(void) { return false; } -void save_resume_write(void) {} -bool save_resume_load(void) { return false; } +#include "text.h" +#include "world.h" + +#define SAVE_NAME "undertale.sav" +#define RESUME_NAME "utresume.sav" +#define COPY_NAME "undertale_saves.py" +#define MAGIC 0x31305455u /* "UT01" */ + +typedef struct { + uint32_t magic; + uint32_t size; + Save s; +} SaveFile; + +static const char *const kept[] = {SAVE_NAME, RESUME_NAME}; +#define NKEPT (int)(sizeof kept / sizeof kept[0]) +static const char copy_head[] = + "# Undertale keeps a copy of your SAVE here, so that\n" + "# reinstalling it doesn't erase it. If you delete this file,\n" + "# the game writes it again: your SAVE stays either way.\n"; +static const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +static void copy_write(void) { + uint32_t total = 1 + (sizeof copy_head - 1) + 1, len; + int n = 0; + for (int k = 0; k < NKEPT; k++) + if (plat_load(kept[k], &len) && len) total += 2 + (uint32_t)strlen(kept[k]) + 1 + (len + 2) / 3 * 4 + 1, n++; + plat_remove(COPY_NAME); + if (!n) return; + uint8_t *o = plat_reserve(COPY_NAME, total), *p = o; + if (!o) return; + *p++ = 0; /* (the script's status byte: not imported) */ + memcpy(p, copy_head, sizeof copy_head - 1), p += sizeof copy_head - 1; + for (int k = 0; k < NKEPT; k++) { + const uint8_t *d = plat_load(kept[k], &len); + if (!d || !len) continue; + uint32_t nl = (uint32_t)strlen(kept[k]); + *p++ = '#', *p++ = '>'; + memcpy(p, kept[k], nl), p += nl; + *p++ = ':'; + for (uint32_t i = 0; i < len; i += 3, p += 4) { + /* (written out: GCC 15.2 for the calculator got a loop over the four wrong, see NumPlay's + * launcher/src/storage.c) */ + uint32_t left = len - i, v = (uint32_t)d[i] << 16 | (left > 1 ? d[i + 1] << 8 : 0) | (left > 2 ? d[i + 2] : 0); + p[0] = (uint8_t)b64[v >> 18 & 63]; + p[1] = (uint8_t)b64[v >> 12 & 63]; + p[2] = left > 1 ? (uint8_t)b64[v >> 6 & 63] : '='; + p[3] = left > 2 ? (uint8_t)b64[v & 63] : '='; + } + *p++ = '\n'; + } + *p++ = 0; + plat_reserved(COPY_NAME, (uint32_t)(p - o)); +} + +static int b64_value(uint8_t c) { + for (int i = 0; i < 64; i++) + if ((uint8_t)b64[i] == c) return i; + return -1; +} + +static const uint8_t *copy_line(int k, uint32_t *len) { + uint32_t n, nl = (uint32_t)strlen(kept[k]); + const uint8_t *c = plat_load(COPY_NAME, &n); + if (!c) return NULL; + for (uint32_t i = 0; i + nl + 3 <= n; i++) + if (c[i] == '#' && c[i + 1] == '>' && !memcmp(c + i + 2, kept[k], nl) && c[i + 2 + nl] == ':') { + const uint8_t *l = c + i + 3 + nl; + uint32_t m = 0; + while (l + m < c + n && l[m] != '\n' && l[m]) m++; + *len = m; + return l; + } + return NULL; +} + +void save_restore_copy(void) { + for (int k = 0; k < NKEPT; k++) { + uint32_t have, len; + if (plat_load(kept[k], &have)) continue; + const uint8_t *l = copy_line(k, &len); + if (!l || !len || len % 4) continue; + uint32_t size = len / 4 * 3 - (l[len - 1] == '=') - (l[len - 2] == '='); + uint8_t *out = plat_reserve(kept[k], size); + if (!out) continue; + l = copy_line(k, &len); + bool ok = l != NULL && len / 4 * 3 - (l[len - 1] == '=') - (l[len - 2] == '=') == size; + uint32_t o = 0; + for (uint32_t i = 0; ok && i < len; i += 4) { + int v0 = l[i] == '=' ? 0 : b64_value(l[i]), v1 = l[i + 1] == '=' ? 0 : b64_value(l[i + 1]); + int v2 = l[i + 2] == '=' ? 0 : b64_value(l[i + 2]), v3 = l[i + 3] == '=' ? 0 : b64_value(l[i + 3]); + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) ok = false; + uint32_t wd = (uint32_t)(v0 << 18 | v1 << 12 | v2 << 6 | v3); + if (o < size) out[o++] = (uint8_t)(wd >> 16); + if (o < size) out[o++] = (uint8_t)(wd >> 8); + if (o < size) out[o++] = (uint8_t)wd; + } + if (ok && o == size) plat_reserved(kept[k], size); + else plat_remove(kept[k]); + } +} + +static bool write_file(const char *name, const Save *s) { + SaveFile f; + memset(&f, 0, sizeof f); + f.magic = MAGIC, f.size = sizeof(Save), f.s = *s; + bool ok = plat_save(name, &f, sizeof f); + copy_write(); + return ok; +} + +static bool read_file(const char *name, Save *s) { + uint32_t len; + const uint8_t *d = plat_load(name, &len); + if (!d || len != sizeof(SaveFile)) return false; + SaveFile f; + memcpy(&f, d, sizeof f); + if (f.magic != MAGIC || f.size != sizeof(Save)) return false; + *s = f.s; + return true; +} + +bool save_write(void) { return write_file(SAVE_NAME, &sv); } +bool save_exists(void) { + Save s; + return read_file(SAVE_NAME, &s); +} +bool save_peek(Save *s) { return read_file(SAVE_NAME, s); } + +bool save_load(void) { + Save s; + if (!read_file(SAVE_NAME, &s)) return false; + sv = s; + memcpy(g_name, sv.name, sizeof g_name); + sv.hp = sv.maxhp; + g_mode = MODE_WORLD; + world_enter(sv.room, sv.x, sv.y, DIR_DOWN); + return true; +} + +/* Home: the moment kept as it is, room and place; read back once */ +void save_resume_write(void) { + if (g_mode != MODE_WORLD && g_mode != MODE_MENU && g_mode != MODE_SAVE) { + /* (in a battle: kept as it was before it) */ + } + Save s = sv; + s.room = (int16_t)g_room, s.x = pl.x, s.y = pl.y; + write_file(RESUME_NAME, &s); +} + +bool save_resume_load(void) { + Save s; + if (!read_file(RESUME_NAME, &s)) return false; + plat_remove(RESUME_NAME); + copy_write(); + sv = s; + memcpy(g_name, sv.name, sizeof g_name); + g_mode = MODE_WORLD; + world_enter(sv.room, sv.x, sv.y, DIR_DOWN); + return true; +} diff --git a/games/undertale/src/save.h b/games/undertale/src/save.h index 0458f15e..fc9b6aec 100644 --- a/games/undertale/src/save.h +++ b/games/undertale/src/save.h @@ -2,10 +2,12 @@ #ifndef UT_SAVE_H #define UT_SAVE_H #include +#include "game.h" void save_restore_copy(void); bool save_write(void); bool save_exists(void); bool save_load(void); +bool save_peek(Save *s); /* the SAVE's facts, without loading it */ void save_resume_write(void); bool save_resume_load(void); #endif diff --git a/games/undertale/src/toriel.c b/games/undertale/src/toriel.c new file mode 100644 index 00000000..932acdd1 --- /dev/null +++ b/games/undertale/src/toriel.c @@ -0,0 +1,252 @@ +/* Toriel, the Ruins' boss: her fire, her spares, her words (from the Undertale Wiki's records of the fight). */ +#include +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "monsters.h" +#include "res.h" + +/* b->state[0]: spares; [1]: talks; [2]: 1 she stopped fighting, 2 she gives up, 3 defeated, 4 betrayed */ +static const char *const spare_lines[] = { + ".....", "..... .....", "..... ..... .....", "...?", "What are\nyou doing?", "Attack or\nrun away!", + "What are you\nproving this\nway?", "Fight me or\nleave!", "Stop it.", "Stop looking\nat me that\nway.", "Go away!", "...", + "... ...", "I know you\nwant to go\nhome, but...", "But please...\ngo upstairs\nnow.", "I promise I\nwill take\ngood care of\nyou here.", + "I know we do\nnot have\nmuch, but...", "We can have\na good life\nhere.", "Why are you\nmaking this\nso difficult?", + "Please, go\nupstairs.", ".....", "Ha ha...", "Pathetic, is\nit not? I\ncannot save\neven a single\nchild.", "...", + "No, I\nunderstand.|You would\njust be\nunhappy\ntrapped down\nhere.|The RUINS\nare very small\nonce you get\nused to them.|It would not\nbe right for\nyou to grow up\nin a place\nlike this.|My\nexpectations...\nMy\nloneliness...\nMy fear...|For you, my\nchild... I\nwill put them\naside."}; +#define NSPARES (int)(sizeof spare_lines / sizeof spare_lines[0]) + +static void act_toriel(Battle *b, Monster *m, int act, char *t, int cap) { + int n = b->state[1]++; + if (n == 0) snprintf(t, (size_t)cap, "* You couldn't think of any\n conversation topics."); + else if (n == 1) snprintf(t, (size_t)cap, "* You tried to think of\n something to say again,\n but..."); + else snprintf(t, (size_t)cap, "* Ironically, talking does not\n seem to be the solution to\n this situation."); + (void)m; +} + +static const char *talk_toriel(Battle *b, Monster *m) { + if (b->state[2] == 3) + return "Urgh...|You are\nstronger than\nI thought...|Listen to me,\nsmall one...|If you go\nbeyond this\ndoor,|Keep walking\nas far as you\ncan.|Eventually\nyou will reach\nan exit.|... ....|#RASGORE#X...\nDo not let\n#RASGORE#X\ntake your\nsoul.|His plan\ncannot be\nallowed to\nsucceed.|......|Be good,\nwon't you?|M y c h i l d ."; + if (b->state[2] == 4) + return "You...|... at my\nmost\nvulnerable\nmoment...|To think I\nwas worried\nyou wouldn't\nfit in out\nthere...|Eheheheh!!!\nYou really are\nno different\nthan them!|Ha... ha..."; + if (b->last_action == 3) { + int k = b->state[0] - 1; + if (k >= 0 && k < NSPARES) return spare_lines[k]; + } + return NULL; +} + +static void spare_toriel(Battle *b, Monster *m) { + (void)m; + b->state[0]++; + if (b->state[0] >= 12) b->no_flee = true; +} + +static const char *flavor_toriel(Battle *b, Monster *m) { + /* her DF falls when the SOUL is weak, and when she is */ + m->df = (int16_t)(sv.hp < 3 ? -15 : m->hp < 150 ? -140 : 1); + if (b->state[0] >= 12) return "* ..."; + return NULL; +} + +/* she uses one of her attacks; her fire falters when the SOUL is weak, and stops after enough spares */ +static int attack_toriel(Battle *b, Monster *m) { + if (b->state[2]) return -1; + if (b->state[0] >= 12) return -1; + if (sv.hp <= 2 || b->state[0] >= 11) return ATK_TOR_FALTER; + int k = b->turn % 3; + return k == 0 ? ATK_TOR_HANDS : k == 1 ? ATK_TOR_WAVES : ATK_TOR_HELIX; +} + +static bool hit_toriel(Battle *b, Monster *m, int dmg) { + /* hit once she stopped fighting: at once, betrayed */ + if (b->state[0] >= 12) { + m->hp = 0, m->hurt = 30; + b->state[2] = 4; + return true; + } + if (dmg >= m->hp) { + m->hp = 0, m->hurt = 30; + b->state[2] = 3; + return true; + } + return false; +} + +static bool ends_toriel(Battle *b, Monster *m) { + if (b->state[2] == 3 || b->state[2] == 4) { + m->killed = true, m->alive = false, m->dust = 1; + set_flag(F_TORIEL_FIGHT, 2); + sv.kills++; + return true; + } + if (b->state[0] >= 25) { + set_flag(F_TORIEL_FIGHT, 1); + m->spare = true; + return true; + } + return false; +} + +static void draw_toriel(Battle *b, Monster *m, int x, int y) { + uint16_t s = SPR_TORIEL_B; + if (m->hurt) s = SPR_TORIEL_HURT; + else if (b->state[2] == 3 || b->state[2] == 4 || m->hp <= 0) s = SPR_TORIEL_DEAD; + else if (b->atk == ATK_TOR_FALTER && b->phase >= 10) s = SPR_TORIEL_AWAY; + if (m->dust) { + int a = 255 - m->dust * 4; + if (a > 0) gfx_sprite_color(SPR_TORIEL_DEAD, 0, x, y, 0, C_WHITE, (uint8_t)a); + return; + } + gfx_sprite(s, 0, x, y, 0, 255); +} + +const MonDef toriel_def = { + .name = "Toriel", .hp = 440, .at = 6, .df = 1, .exp = 150, .gold = 0, .spr_idle = SPR_TORIEL_B, .spr_hurt = SPR_TORIEL_HURT, + .check = "Knows best for you.", .acts = {"Talk"}, .nacts = 1, + .neutral = {"* Toriel looks through you.", "* Toriel prepares a magical\n attack.", "* Toriel takes a deep breath.", + "* Toriel is acting aloof."}, + .flags = MF_BOSS | MF_MISS_IS_SPARE, .on_spare = spare_toriel, .act = act_toriel, .talk = talk_toriel, .attack = attack_toriel, .flavor = flavor_toriel, + .on_hit = hit_toriel, .ends = ends_toriel, .draw = draw_toriel, +}; + +/* ---------------------------------------------------------------- her attacks */ +#define P(v) ((v) * FX) +static int bx0(void) { return bt.x0 + 3; } +static int bx1(void) { return bt.x1 - 3; } +static int by0(void) { return bt.y0 + 3; } +static int by1(void) { return bt.y1 - 3; } + +static Bullet *fire(int x, int y, int vx, int vy, int dmg) { + Bullet *b = bullet_new(SPR_FIREBULLET, P(x), P(y), vx, vy); + if (b) b->owner = (uint8_t)bt.atk_owner, b->dmg = (int8_t)dmg, b->anim = 4; + return b; +} + +/* the paws: from the top-left (and, later, the bottom-right) they sweep across, leaving fire that then flies + * at the SOUL and bounces off the walls; touching a paw ends it */ +static void tor_hands(int t) { + bool two = bt.turn >= 4; + if (t < 0) { + board_set(110, 80); + return; + } + int sweep = 40; + for (int k = 0; k < (two ? 2 : 1); k++) { + if (t <= sweep) { + /* the arc: from one top corner to the other, dipping down */ + int a = t * 128 / sweep; /* half a turn */ + int cx = board_cx(), r = (bx1() - bx0()) / 2 - 6; + int x = cx - r * gfx_cos(a) / 1024, y = (k ? by1() - 6 - r * gfx_sin(a) / 1024 / 3 : by0() + 6 + r * gfx_sin(a) / 1024 / 3); + if (k) x = cx + r * gfx_cos(a) / 1024; + bt.as[2 * k] = x, bt.as[2 * k + 1] = y; + if (t % 4 == 0) { + Bullet *b = fire(x, y, 0, 0, 3); + if (b) b->kind = BK_SCRIPT, b->a = 0; + } + } + /* the paw touching the SOUL: 4 and the attack is over */ + int px = (int)bt.as[2 * k], py = (int)bt.as[2 * k + 1]; + if (t <= sweep + 6 && abs_i(px - soul_x()) < 12 && abs_i(py - soul_y()) < 8) { + soul_hurt(damage_to_player(4), 0); + bt.atk_t = bt.atk_len; + } + } + if (t == sweep + 4) + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + int dx = bt.sx - b->x, dy = bt.sy - b->y, d = abs_i(dx) + abs_i(dy); + if (!d) d = 1; + b->vx = dx * P(2) / d, b->vy = dy * P(2) / d, b->a = 1; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || !b->a) continue; + b->x += b->vx, b->y += b->vy; + if (b->x < P(bx0() + 3) || b->x > P(bx1() - 3)) b->vx = -b->vx; + if (b->y < P(by0() + 3) || b->y > P(by1() - 3)) b->vy = -b->vy; + if (++b->t > 90) b->kind = BK_NONE; + } +} + +/* two streams of fire falling, crossing over each other, with holes to slip through */ +static void tor_waves(int t) { + bool hard = bt.turn >= 6; + if (t < 0) { + board_set(110, hard ? 60 : 80); + return; + } + if (t < 150 && t % 4 == 0) { + int w = bx1() - bx0() - 16; + for (int s = 0; s < 2; s++) { + if ((t / 4 + s * 3) % 9 >= 7) continue; /* the holes */ + int x = board_cx() + (s ? 1 : -1) * w / 2 * gfx_sin(t * 2) / 1024; + Bullet *b = fire(x, by0() - 4, 0, P(3) / 2, 4); + if (b) b->kind = BK_SCRIPT; + } + } + if (hard && t % 30 == 0) { + fire(bx0() + 3, by0() + 10 + rnd_n(by1() - by0() - 20), 0, 0, 4); + fire(bx1() - 3, by0() + 10 + rnd_n(by1() - by0() - 20), 0, 0, 4); + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + b->t++; + if (b->y < P(by1() - 3)) b->y += b->vy; + else if (b->t > 120) b->kind = BK_NONE; /* (they gather at the bottom a while) */ + } +} + +/* thicker streams that stay in their lanes: safe between them */ +static void tor_helix(int t) { + if (t < 0) { + board_set(120, 80); + return; + } + if (t < 150 && t % 5 == 0) { + int lanes = 3, w = bx1() - bx0(); + for (int l = 0; l < lanes; l++) { + int cx = bx0() + w * (2 * l + 1) / (2 * lanes) + 10 * gfx_sin(t * 3 + l * 85) / 1024; + for (int k = -1; k <= 1; k++) fire(cx + k * 6, by0() - 4, 0, P(3) / 2, 4); + } + } +} + +/* her fire falls anywhere, but turns away from the SOUL: she cannot bring herself to hurt it */ +static void tor_falter(int t) { + if (t < 0) { + board_set(110, 80); + return; + } + if (t < 120 && t % 6 == 0) { + Bullet *b = fire(bx0() + 4 + rnd_n(bx1() - bx0() - 8), by0() - 4, 0, P(3) / 2, 0); + if (b) b->kind = BK_SCRIPT, b->flags |= BF_HARMLESS; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT) continue; + int dx = b->x - bt.sx, dy = b->y - bt.sy; + if (abs_i(dx) < P(16) && abs_i(dy) < P(16)) b->x += dx > 0 ? P(2) : -P(2); + b->y += b->vy; + if (b->y > P(by1() + 6)) b->kind = BK_NONE; + } +} + +void toriel_attack(int atk, int t) { + switch (atk) { + case ATK_TOR_HANDS: tor_hands(t); break; + case ATK_TOR_WAVES: tor_waves(t); break; + case ATK_TOR_HELIX: tor_helix(t); break; + case ATK_TOR_FALTER: tor_falter(t); break; + } +} + +void toriel_draw_attack(int atk, int t) { + if (atk == ATK_TOR_HANDS && t <= 46) { + bool two = bt.turn >= 4; + for (int k = 0; k < (two ? 2 : 1); k++) gfx_sprite(SPR_HANDBULLET, 0, (int)bt.as[2 * k], (int)bt.as[2 * k + 1], k ? GFX_FLIPX : 0, 255); + } +} diff --git a/games/undertale/tools/pack.py b/games/undertale/tools/pack.py index 0b03f50f..d941607b 100644 --- a/games/undertale/tools/pack.py +++ b/games/undertale/tools/pack.py @@ -137,10 +137,32 @@ def halve(img): return Image.fromarray(b.astype(np.uint8), "RGBA") +def shrink(img): + """art drawn for the original's 640 x 480 battle -> half its size: each 2 x 2 block becomes its most common + opaque colour (or clear, if most of it is)""" + a = np.array(img.convert("RGBA")) + h, w = a.shape[:2] + a = np.pad(a, ((0, h % 2), (0, w % 2), (0, 0))) + H, W = a.shape[0] // 2, a.shape[1] // 2 + out = np.zeros((H, W, 4), np.uint8) + for y in range(H): + for x in range(W): + block = a[2 * y:2 * y + 2, 2 * x:2 * x + 2].reshape(4, 4) + op = block[block[:, 3] >= 128] + if len(op) < 2: + continue + cols, counts = np.unique(op[:, :3], axis=0, return_counts=True) + # ties: the darker colour keeps outlines + best = sorted(zip(counts, [-int(c.sum()) for c in cols], range(len(cols))))[-1][2] + out[y, x, :3] = cols[best] + out[y, x, 3] = 255 + return Image.fromarray(out, "RGBA") + + def load_frames(ref, src): """'demo:spr_name' (all its numbered frames), 'wiki:File.png' or .gif (all frames, halved), 'png:path'""" kind, name = src.split(":", 1) - if kind == "demo": + if kind in ("demo", "demo2"): d = os.path.join(ref, "demo", "mac", "sprites") out, k = [], 0 while os.path.exists(os.path.join(d, "%s %d.png" % (name, k))): @@ -148,7 +170,7 @@ def load_frames(ref, src): k += 1 if not out: raise FileNotFoundError(src) - return out + return [shrink(f) for f in out] if kind == "demo2" else out if kind == "demobg": return [Image.open(os.path.join(ref, "demo", "mac", "bgs", name + ".png")).convert("RGBA")] if kind in ("wiki", "wiki1"): @@ -160,6 +182,9 @@ def load_frames(ref, src): return frames if kind == "png": return [Image.open(os.path.join(HERE, name)).convert("RGBA")] + if kind == "wiki2": # a wiki file of the 640 x 480 battle, at the game's size: halved + im = Image.open(os.path.join(ref, "wiki", "sprites", name)) + return [shrink(fr.convert("RGBA")) for fr in ImageSequence.Iterator(im)] raise ValueError(src) @@ -374,6 +399,21 @@ def main(): imgs = [] for s in (src if isinstance(src, list) else [src]): imgs += load_frames(ref, s) + if opts.get("clear_black"): # drawn over black anyway: its black is clear, and costs nothing + out = [] + for im in imgs: + a = np.array(im) + a[(a[:, :, 0] < 8) & (a[:, :, 1] < 8) & (a[:, :, 2] < 8)] = 0 + out.append(Image.fromarray(a, "RGBA")) + imgs = out + if opts.get("dedupe"): # GIFs repeat a frame for its duration: once each + out = [] + for im in imgs: + if not out or im.tobytes() != out[-1].tobytes(): + out.append(im) + imgs = out + if "every" in opts: + imgs = imgs[::opts["every"]] if "frames" in opts: imgs = [imgs[i] for i in opts["frames"]] if "scale" in opts: diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index 1891747b..78e27a63 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -20,7 +20,50 @@ ("toriel_r", "demo:spr_toriel_r", {"origin": (0, 0), "keep": True}), ("savepoint", "demo:spr_savepoint", {"origin": (0, 0), "keep": True}), ("flowey", "demo:spr_flowey", {"origin": (0, 0), "keep": True}), - ("heart", "demo:spr_heart", {"center": True, "keep": True}), + # the SOUL, 8 x 8 as the game's 16 x 16 halved; frame 1: blue + ("heart", "demo2:spr_heart", {"center": True, "keep": True}), +] + [ + # the battle: its buttons (orange, then yellow when chosen), the FIGHT target and its bar, the slash, the HP label + (n, "demo2:spr_" + n, {"keep": True}) for n in [ + "fightbt", "talkbt", "itembt", "sparebt", "target", "targetchoice", "hpname", "battlebg"] +] + [ + ("strike", "demo2:spr_strike", {"center": True, "keep": True}), + ("heartbreak", "demo2:spr_heartbreak", {"center": True, "keep": True}), + ("heartshards", "demo2:spr_heartshards", {"center": True, "keep": True}), + ("heartgtfo", "demo2:spr_heartgtfo", {"center": True, "keep": True}), +] + [ + # bullets, their middle at their origin + (n, "demo2:spr_" + n, {"center": True}) for n in [ + "flybullet", "smallfrogbullet", "butterflybllt", "bulletmd", "bulletsm", "circlebulletmd1", "circlebulletsm", + "vegbullet", "carrotbullet", "roachbullet", "roachdance", "teardrop", "firebullet", "handbullet", "spinbullet", + "streambullet", "dirbullet", "bulletgenmd"] +] + [ + # the monsters, from the wiki (the game's battle sprites, halved); their origin at their feet + ("dummy_b", "wiki:Dummy_battle.png", {"feet": True}), + ("froggit_b", "wiki:Froggit_battle_idle.gif", {"feet": True, "dedupe": True, "every": 2}), + ("froggit_hurt", "wiki:Froggit_battle_hurt.png", {"feet": True}), + ("whimsun_b", "wiki:Whimsun_battle_idle.gif", {"feet": True, "dedupe": True, "every": 4}), + ("whimsun_hurt", "wiki:Whimsun_battle_hurt.png", {"feet": True}), + ("moldsmal_b", "wiki:Moldsmal_battle.gif", {"feet": True, "dedupe": True, "every": 4}), + ("loox_b", "wiki:Loox_battle_idle.gif", {"feet": True, "dedupe": True}), + ("loox_hurt", "wiki:Loox_battle_hurt.png", {"feet": True}), + ("vegetoid_b", "wiki:Vegetoid_battle_idle.gif", {"feet": True, "dedupe": True}), + ("vegetoid_hurt", "wiki:Vegetoid_battle_hurt.png", {"feet": True}), + ("migosp_b", "wiki:Migosp_battle_idle.gif", {"feet": True, "dedupe": True, "every": 2}), + ("migosp_hurt", "wiki:Migosp_battle_hurt.png", {"feet": True}), + ("napstablook_b", "wiki:Napstablook_battle_idle.gif", {"feet": True, "dedupe": True}), + ("napsta_hat", "demo:spr_blookhat", {"feet": True}), + ("toriel_b", "wiki:Toriel_battle.png", {"feet": True}), + ("toriel_hurt", "wiki:Toriel_battle_hurt.png", {"feet": True}), + ("toriel_away", "wiki:Toriel_battle_shocked.png", {"feet": True}), + ("toriel_fight", "wiki:Toriel_battle_in_fight.png", {"feet": True}), + ("toriel_dead", "wiki:Toriel_battle_fatal_Neutral.png", {"feet": True}), +] + [ + # the intro's pictures, the title, GAME OVER + ("introimage", "demo:spr_introimage", {"keep": True, "clear_black": True}), + ("introlast", "demo:spr_introlast", {"keep": True, "clear_black": True}), + ("undertaletitle", "demo:spr_undertaletitle", {"clear_black": True}), + ("gameoverbg", "demo2:spr_gameoverbg", {"clear_black": True}), ] + [ # faces in the dialogue box (the demo's: a head, and Toriel's shoulders under it); 2 frames: talking ("face_" + n, "demo:spr_face_" + n, {"keep": True}) for n in [ @@ -38,6 +81,8 @@ FONTS = [ # the dialogue's font: Pixel Operator Mono Bold, 8 pixels a letter dict(name="main", ttf="PixelOperatorMono-Bold.ttf", size=16, height=12, advance=8, ascent=13), + # the menus' text: Pixel Operator Bold + dict(name="menu", ttf="PixelOperator-Bold.ttf", size=16, height=12, ascent=13), # small text (the menu's numbers) dict(name="small", ttf="PixelOperator8.ttf", size=8, height=8, ascent=8), ] From 69b1699427c2f588135c53afdf28cac215ab295a Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Wed, 14 Oct 2026 20:20:30 +0000 Subject: [PATCH 03/19] Undertale: the whole Ruins, from the golden flowers to the door out Every room of the Ruins, joined as in the game: dark doorways and chutes become doors (tools/rooms.py LINKS), the objects the wiki's map paints in are taken out for the game to draw (rocks, spikes, Froggits, Napstablook, SAVE stars), leaf piles are walked on, the house's rooms have their floors. Toriel's puzzles and lessons, the phone and her calls, the Monster Candy, the cracked floors and the rooms under them, the rocks (the one that talks back too), the leaf puzzle, the mouse hole, Napstablook, the Spider Bake Sale, the Froggits' hall and its yellow names, the one switch and its six rooms, the four rotating rooms, the balcony and the Toy Knife, Toriel's tree, her house, the bed and the pie, the basement, her fight, Flowey's judgement and the end of what is made so far. Events are protothreads on GCC's labels as values now: a wait inside a switch used to end its event. Rocks can be pushed; a fade can stay black (sleeping). tests/check.py plays the menus, every battle, the saves and the whole Ruins (tests/ruins.path) on the host build. --- games/undertale/src/battle.c | 28 +- games/undertale/src/battle.h | 3 + games/undertale/src/data.bin | Bin 0 -> 578824 bytes games/undertale/src/data.h | 138 +++++--- games/undertale/src/event.c | 8 +- games/undertale/src/event.h | 31 +- games/undertale/src/events.c | 95 ++++- games/undertale/src/events.h | 20 ++ games/undertale/src/flags.h | 5 + games/undertale/src/flowey.c | 1 - games/undertale/src/game.c | 5 +- games/undertale/src/icon.png | Bin 0 -> 286 bytes games/undertale/src/menu.c | 16 +- games/undertale/src/menu.h | 1 + games/undertale/src/monsters.c | 3 +- games/undertale/src/rooms.c | 51 ++- games/undertale/src/ruins.h | 12 + games/undertale/src/ruins1.c | 393 +++++++++++++++++++++ games/undertale/src/ruins2.c | 574 +++++++++++++++++++++++++++++++ games/undertale/src/ruins3.c | 319 +++++++++++++++++ games/undertale/src/save.c | 1 + games/undertale/src/save.h | 1 + games/undertale/src/text.c | 41 ++- games/undertale/src/text.h | 6 +- games/undertale/src/toriel.c | 6 + games/undertale/src/world.c | 165 ++++++++- games/undertale/src/world.h | 15 + games/undertale/tests/check.py | 115 +++++++ games/undertale/tests/play.c | 195 ++++++++++- games/undertale/tests/ruins.path | 241 +++++++++++++ games/undertale/tools/pack.py | 93 ++++- games/undertale/tools/rooms.py | 156 +++++++-- games/undertale/tools/sprites.py | 16 + 33 files changed, 2632 insertions(+), 122 deletions(-) create mode 100644 games/undertale/src/data.bin create mode 100644 games/undertale/src/icon.png create mode 100644 games/undertale/src/ruins.h create mode 100644 games/undertale/src/ruins1.c create mode 100644 games/undertale/src/ruins2.c create mode 100644 games/undertale/src/ruins3.c create mode 100644 games/undertale/tests/check.py create mode 100644 games/undertale/tests/ruins.path diff --git a/games/undertale/src/battle.c b/games/undertale/src/battle.c index e6118f21..9fe32d25 100644 --- a/games/undertale/src/battle.c +++ b/games/undertale/src/battle.c @@ -23,7 +23,7 @@ static int prev_mode; enum { P_INTRO, P_MENU, P_TARGET, P_ACTS, P_ITEMS, P_MERCY, P_BAR, P_STRIKE, P_RESULT, P_TALK, P_BOX_IN, P_ATTACK, - P_BOX_OUT, P_WON, P_FLEE, P_DEATH, P_END + P_BOX_OUT, P_WON, P_FLEE, P_DEATH, P_END, P_GLARE }; enum { B_FIGHT, B_ACT, B_ITEM, B_MERCY }; @@ -117,6 +117,17 @@ void battle_start(int form) { bool battle_over(void) { return over; } int battle_result(void) { return bt.result; } +int battle_ui(void) { + switch (bt.phase) { + case P_MENU: return BUI_MENU; + case P_TARGET: return BUI_TARGET; + case P_ACTS: return BUI_ACTS; + case P_ITEMS: return BUI_ITEMS; + case P_MERCY: return BUI_MERCY; + case P_BAR: return BUI_BAR; + default: return BUI_NONE; + } +} static void battle_end(int result) { bt.result = result; @@ -174,6 +185,13 @@ static void strike_land(void) { /* ---------------------------------------------------------------- the turns */ static void begin_menu(void) { + /* the first Froggit: Toriel comes and glares at it, and it leaves */ + if (bt.form == FORM_FROGGIT_FIRST && bt.turn >= 1 && count_alive()) { + bt.phase = P_GLARE, bt.t = 0; + box_menu(); + say(""); + return; + } bt.phase = P_MENU; box_menu(); say(flavor_text()); @@ -286,8 +304,6 @@ static void do_spare(void) { static void do_flee(void) { bool can = !bt.no_flee; bt.last_action = 4; - for (int i = 0; i < bt.nmon; i++) - if (bt.mon[i].alive && !bt.mon[i].gone && (bt.mon[i].def->flags & MF_BOSS)) can = false; if (!can) { after_player_turn(); return; @@ -521,6 +537,10 @@ void battle_update(uint32_t keys, uint32_t pressed) { case P_DEATH: if (bt.t >= 70) battle_end(BR_DIED); break; + case P_GLARE: + if (bt.t == 40) bt.mon[0].gone = true, bt.mon[0].fade = 1; + if (bt.t >= 80) win(); + break; } } @@ -710,6 +730,8 @@ void battle_draw(void) { } gfx_sprite(SPR_BATTLEBG, 0, 0, 0, 0, 255); for (int i = 0; i < bt.nmon; i++) draw_monster(&bt.mon[i], i); + if (bt.phase == P_GLARE || (bt.form == FORM_FROGGIT_FIRST && bt.phase == P_WON)) + gfx_sprite(SPR_TORIEL_B, 0, 330 - min_i(bt.phase == P_GLARE ? bt.t : 30, 30) * 2, 120, 0, 255); /* the box */ gfx_rect(bt.x0, bt.y0, bt.x1 - bt.x0, bt.y1 - bt.y0, C_WHITE, 255); gfx_rect(bt.x0 + 2, bt.y0 + 2, bt.x1 - bt.x0 - 4, bt.y1 - bt.y0 - 4, C_BLACK, 255); diff --git a/games/undertale/src/battle.h b/games/undertale/src/battle.h index f9f5f29c..ce537418 100644 --- a/games/undertale/src/battle.h +++ b/games/undertale/src/battle.h @@ -139,6 +139,9 @@ extern Bullet bullets[MAX_BULLETS]; void battle_start(int form); bool battle_over(void); int battle_result(void); +/* what the battle waits for (for the tests): a button, a target, an ACT, an item, MERCY's choice or nothing */ +enum { BUI_NONE, BUI_MENU, BUI_TARGET, BUI_ACTS, BUI_ITEMS, BUI_MERCY, BUI_BAR }; +int battle_ui(void); void battle_update(uint32_t keys, uint32_t pressed); void battle_draw(void); diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin new file mode 100644 index 0000000000000000000000000000000000000000..b89314e3a2b9a5c2f90e48eb6840cf71d0da9153 GIT binary patch literal 578824 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%0D4}V}5gMQ&nCSoeX5QO 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 #include "event.h" +#include "events.h" #include "game.h" static Ev cur; @@ -11,10 +12,15 @@ void event_start(int id, Obj *self) { memset(&cur, 0, sizeof cur); cur.id = id, cur.self = self; running = true; - event_update(); /* (it starts this frame: a talk opens at once) */ + if (id != EV_ENCOUNTER) event_update(); /* (it starts this frame: a talk opens at once) */ } bool event_running(void) { return running; } +bool event_blocking(void) { return running && !cur.free; } + +void event_cancel(void) { running = false; } +void event_cur_arg(int v) { cur.v[0] = v; } +int g_exclaim; void event_update(void) { if (!running) return; diff --git a/games/undertale/src/event.h b/games/undertale/src/event.h index a850806b..b408f2f4 100644 --- a/games/undertale/src/event.h +++ b/games/undertale/src/event.h @@ -2,9 +2,10 @@ * * An event is a C function called once a frame until it says it is done; * the macros below make it read like the game's scripts (each SAY waits for - * its text, each WAIT for its frames). Its locals don't last over a wait: - * what has to is kept in c->v. One event runs at a time; while it does, - * Frisk doesn't move unless it lets him. */ + * its text, each WAIT for its frames). They are protothreads on GCC's labels + * as values (a wait can be anywhere, in a switch too). The function's locals + * don't last over a wait: what has to is kept in c->v. One event runs at a + * time; while it does, Frisk doesn't move unless it lets him. */ #ifndef UT_EVENT_H #define UT_EVENT_H #include @@ -12,20 +13,30 @@ #include "world.h" typedef struct Ev { - int id, line, t; + int id, t; + void *at; /* where it waits (NULL: from the start) */ + bool free; /* Frisk walks while it runs (FREE()), the others stop him */ int v[6]; Obj *self; } Ev; -#define EV_BEGIN switch (c->line) { case 0: +#define EV_CAT2(a, b) a##b +#define EV_CAT(a, b) EV_CAT2(a, b) +#define EV_BEGIN do { if (c->at) goto *c->at; } while (0); { #define EV_END } return 1 -#define EV_YIELD do { c->line = __LINE__; return 0; case __LINE__:; } while (0) -#define WAIT_UNTIL(cond) do { c->line = __LINE__; case __LINE__: if (!(cond)) return 0; } while (0) -#define WAIT(n) do { c->t = (n); c->line = __LINE__; case __LINE__: if (c->t-- > 0) return 0; } while (0) +#define EV_FALL __attribute__((fallthrough)) +#define EV_WAIT_(cond, n) do { c->at = &&EV_CAT(ev_at_, n); EV_CAT(ev_at_, n): if (!(cond)) return 0; } while (0) +#define WAIT_UNTIL(cond) EV_WAIT_(cond, __COUNTER__) +#define EV_WAITN_(N, n) do { c->t = (N); c->at = &&EV_CAT(ev_at_, n); EV_CAT(ev_at_, n): if (c->t-- > 0) return 0; } while (0) +#define WAIT(N) EV_WAITN_(N, __COUNTER__) #define SAY(face, s) do { text_open(face, s); WAIT_UNTIL(!text_active()); } while (0) #define SAYF(face, ...) do { text_openf(face, __VA_ARGS__); WAIT_UNTIL(!text_active()); } while (0) #define NARRATE(s) SAY(FACE_NONE, s) #define CHOICE() text_choice() +#define FREE(b) (c->free = (b)) +/* a list to choose from in the dialogue box (the phone's): CHOOSE waits, CHOSEN() is -1 for Back */ +#define CHOOSE(opts, n) do { text_open_menu(opts, n); WAIT_UNTIL(!text_active()); } while (0) +#define CHOSEN() text_choice() /* an object walks to (x, y) at sp pixels a frame; WALK waits for it */ #define WALK_TO(o, X, Y, SP) do { (o)->tx = (int16_t)(X), (o)->ty = (int16_t)(Y), (o)->speed = (uint8_t)(SP), (o)->walking = 1; } while (0) #define WALK(o, X, Y, SP) do { WALK_TO(o, X, Y, SP); WAIT_UNTIL(!(o)->walking); } while (0) @@ -36,7 +47,11 @@ typedef struct Ev { void event_start(int id, Obj *self); bool event_running(void); +bool event_blocking(void); /* running, and Frisk can't walk */ void event_update(void); +void event_cancel(void); +void event_cur_arg(int v); /* the event just started: its v[0] */ +extern int g_exclaim; /* frames of the "!" over Frisk (an encounter) */ int event_run(Ev *c); /* events.c: the events, by id */ void pl_walk_to(int x, int y, int sp); bool pl_walking(void); diff --git a/games/undertale/src/events.c b/games/undertale/src/events.c index 8dadaf7a..c8ba2d84 100644 --- a/games/undertale/src/events.c +++ b/games/undertale/src/events.c @@ -1,10 +1,101 @@ -/* The events (event.h). */ +/* The events (event.h): the common ones (signs, SAVE Points, the phone), then each area's. */ +#include +#include #include "event.h" #include "events.h" +#include "battle.h" #include "game.h" +#include "menu.h" +#include "ruins.h" + +static int ev_sign(Ev *c) { + EV_BEGIN; + if (c->self && c->self->text) SAY(FACE_NONE, c->self->text); + EV_END; +} + +void say_on_entry(const char *text) { + static Obj note; + note.text = text; + event_start(EV_SIGN, ¬e); +} + +static char save_text[200]; +static int ev_save(Ev *c) { + EV_BEGIN; + /* its words, the HP restored, then SAVE */ + if (sv.hp < sv.maxhp) snprintf(save_text, sizeof save_text, "%s|* (HP fully restored.)", c->self ? c->self->text : ""); + else snprintf(save_text, sizeof save_text, "%s", c->self ? c->self->text : ""); + sv.hp = sv.maxhp; + SAY(FACE_NONE, save_text); + menu_save_open(); + WAIT_UNTIL(g_mode == MODE_WORLD); + EV_END; +} + +static int ev_phone(Ev *c) { + static const char *const opts[] = {"Say Hello", "Puzzle Help", "About Yourself", "Call Her \"Mom\"", "Flirt"}; + EV_BEGIN; + NARRATE("* Dialing..."); + CHOOSE(opts, 5); + switch (CHOSEN()) { + case 0: + set_flag(F_CALL_HELLO, flag(F_CALL_HELLO) + 1); + if (flag(F_CALL_HELLO) == 1) + SAY(FACE_TORIEL, "`0* This is TORIEL.|* You only wanted to say\n hello...?\n* Well then.|`2* 'Hello!'|`0* I hope that suffices.\n* Hee hee."); + else if (flag(F_CALL_HELLO) == 2) + SAY(FACE_TORIEL, "`0* This is TORIEL.|* You want to say hello again?|`2* 'Salutations!'|`0* Is that enough?"); + else if (flag(F_CALL_HELLO) == 3) + SAY(FACE_TORIEL, "`0* This is TORIEL.|`1* Are you bored?\n* I should have given a book\n to you.|* My apologies.|`0* Why not use your imagination\n to divert yourself?|* Pretend you are...\n* A monarch!|`2* Rule over the leaf pile with\n a fist of iron.|`0* Can you do that for me?"); + else + SAY(FACE_TORIEL, "`0* This is TORIEL.|* Hello, my child.|`1* Sorry, I do not have much to\n say.|`0* It was nice to hear your\n voice, though."); + break; + case 1: + SAY(FACE_TORIEL, "`0* This is TORIEL.|* Help with a puzzle...?|`1* Um, you have not left the\n room, have you?|`0* Wait patiently for me and we\n can solve it together!"); + break; + case 2: + SAY(FACE_TORIEL, "`0* This is TORIEL.|* You want to know more about\n me?|`1* Well, I am afraid there is\n not much to say.|`2* I am just a silly little lady\n who worries too much!"); + break; + case 3: + set_flag(F_CALL_MOM, 1); + SAY(FACE_TORIEL, "`0* This is TORIEL.|`3* Huh? Did you just call me...\n \"Mom\"?|`8* Well... I suppose...|* Would that make you happy?|* To call me... \"Mother?\"|`2* Well then, call me whatever\n you like!"); + break; + case 4: + set_flag(F_CALL_FLIRT, flag(F_CALL_FLIRT) + 1); + if (flag(F_CALL_FLIRT) == 1) + SAY(FACE_TORIEL, "`3* ... huh???|`8* Oh, heh.. heh...\n* Ha ha ha!|`2* How adorable...\n* I could pinch your cheek!|`0* You can certainly find better\n than an old woman like me."); + else if (flag(F_CALL_MOM)) + SAY(FACE_TORIEL, "`3* Oh dear, are you serious...?|* And after you said you want\n to call me \"mother...\"|`1* You are an... ...\n \"interesting\" child."); + else + SAY(FACE_TORIEL, "`3* Oh dear, are you serious...?|`1* I do not know if this is\n pathetic, or endearing."); + break; + default: + break; + } + EV_END; +} + +static int ev_encounter(Ev *c) { + EV_BEGIN; + g_exclaim = 18; + WAIT(18); + g_exclaim = 0; + BATTLE(c->v[0]); + EV_END; +} int event_run(Ev *c) { switch (c->id) { - default: return 1; + case EV_ENCOUNTER: return ev_encounter(c); + case EV_SIGN: return ev_sign(c); + case EV_SAVE: return ev_save(c); + case EV_PHONE_MENU: return ev_phone(c); } + int r = ruins1_event(c); + if (r >= 0) return r; + r = ruins2_event(c); + if (r >= 0) return r; + r = ruins3_event(c); + if (r >= 0) return r; + return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index 99abfcf6..82a1ac7e 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -1,11 +1,31 @@ /* Undertale: the events, by id. */ #ifndef UT_EVENTS_H #define UT_EVENTS_H +/* who is who in a room (Obj.name), for the events to find */ +enum { + ACTOR_NONE, ACTOR_TORIEL, ACTOR_FLOWEY, ACTOR_DUMMY, ACTOR_DOOR, ACTOR_SPIKES, ACTOR_SPIKES2, ACTOR_FROGGIT, + ACTOR_PILLAR, ACTOR_NAPSTA, ACTOR_ROCK, ACTOR_ROCK2, ACTOR_ROCK3, ACTOR_SWITCH, ACTOR_SWITCH2, ACTOR_SWITCH3, + ACTOR_CANDY, ACTOR_TRIGGER, ACTOR_TRIGGER2, ACTOR_ITEM, ACTOR_CHAIR, ACTOR_PIE, ACTOR_ANY +}; + enum { EV_NONE, EV_SIGN, /* a sign or anything that only says its text (self->arg: the text, in events.c) */ EV_PHONE_MENU, /* CELL: calling Toriel */ EV_SAVE, /* a SAVE Point */ + EV_ENCOUNTER, /* a random encounter: v[0] its formation */ + EV_FLOWEY_MEET, EV_RUINS1_TORIEL, EV_RUINS2_TORIEL, EV_RUINS3_TORIEL, EV_RUINS3_SWITCH, EV_RUINS4_TORIEL, + EV_RUINS4_DUMMY, EV_RUINS5_TORIEL, EV_RUINS6_TORIEL, EV_RUINS6_PILLAR, EV_RUINS6_REVEAL, EV_RUINS7_CALL, + EV_RUINS7_FROGGIT, + /* ruins2.c */ + EV_FALLING, EV_COLOR_SWITCH, EV_CANDY, EV_CALL, EV_ROCK_TALK, EV_ROCK_OFF, EV_NAPSTA_SLEEP, EV_NAPSTA_LIE, EV_WEB, + EV_FROGGIT, EV_ITEM, EV_ONE_SWITCH, EV_VEGGIE, EV_TORIEL_TREE, + /* ruins3.c */ + EV_HOME_TOUR, EV_TORIEL_CHAIR, EV_BED, EV_STAIRS, EV_BASEMENT_TALK, EV_TORIEL_DOOR, EV_FLOWEY_END, EV_RUINS_DOOR, EV_COUNT }; +/* Toriel's calls on the way (EV_CALL's v[0]) */ +enum { CALL_FLAVOR, CALL_FLAVOR2, CALL_ALLERGY, CALL_ITEMS }; +/* a text when Frisk comes in (a room's setup) */ +void say_on_entry(const char *text); #endif diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index 46305f19..8a925eb1 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -50,6 +50,11 @@ enum { F_FIRST_FROGGIT, F_TORIEL_SNAIL, F_WHIMSUN_TALK, + F_CALL_HELLO, F_CALL_MOM, F_CALL_FLIRT, + F_NAPSTA_LIE, /* Napstablook went away from the room under the one switch puzzle */ + F_HOME_TOUR, /* Toriel showed Frisk the house */ + F_SNAIL_TALK, + F_BED_SLEPT, /* 1 slept; 2 the pie taken */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/flowey.c b/games/undertale/src/flowey.c index a46156a0..e19fa64c 100644 --- a/games/undertale/src/flowey.c +++ b/games/undertale/src/flowey.c @@ -176,7 +176,6 @@ void flowey_battle_update(uint32_t keys, uint32_t pressed) { void flowey_battle_draw(void) { int st = bt.state[0]; - gfx_sprite(SPR_BATTLEBG, 0, 0, 0, 0, 255); int fx = 160 + bt.state[3]; if (st <= F_FIREBALL) { int e = bt.state[2]; diff --git a/games/undertale/src/game.c b/games/undertale/src/game.c index 79e84ba1..87489290 100644 --- a/games/undertale/src/game.c +++ b/games/undertale/src/game.c @@ -1,4 +1,5 @@ /* The game's state, its modes and its frame (game.h). */ +#include #include #include "battle.h" #include "event.h" @@ -68,8 +69,10 @@ int item_count(void) { /* ---------------------------------------------------------------- a new game */ void game_new(const char *name) { + char n[sizeof sv.name]; + snprintf(n, sizeof n, "%s", name); /* (it can be sv.name) */ memset(&sv, 0, sizeof sv); - strncpy(sv.name, name, sizeof sv.name - 1); + memcpy(sv.name, n, sizeof n); memcpy(g_name, sv.name, sizeof g_name); sv.lv = 1, sv.maxhp = sv.hp = 20, sv.at = (uint8_t)lv_at(1), sv.df = (uint8_t)lv_df(1); sv.weapon = ITEM_STICK, sv.armor = ITEM_BANDAGE; diff --git a/games/undertale/src/icon.png b/games/undertale/src/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..608fe4b0f9feeff1d2a42f67f126a1ecbeb17e38 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^=0I%0!3HEFdlM!Dsi&SUjv*Cu-p)GB*Q&td68-4^ z|4r|DOs*yD*lRS|()wVBx@-skouY5;`>uYt=%%vLXoUyg)U{O& z`ttQFwAC#`RNA|q1Wc6Cn&j*Xk`g_+a8jM${!O>ew_H5`^~%)AAeq#Rt!Gxmxu*Z$ z84NXG 30 && !writer_update(&w, pressed)) menu_title_open(); + break; } } @@ -496,5 +507,8 @@ void menu_draw(void) { gfx_sprite(SPR_GAMEOVERBG, 0, 0, 0, 0, (uint8_t)min_i(255, t * 6)); if (t > 40) writer_draw(&w, C_WHITE); break; + case MODE_END: + if (t > 30) writer_draw(&w, C_WHITE); + break; } } diff --git a/games/undertale/src/menu.h b/games/undertale/src/menu.h index bc4589ab..ff41316b 100644 --- a/games/undertale/src/menu.h +++ b/games/undertale/src/menu.h @@ -6,6 +6,7 @@ void menu_title_open(void); void menu_open(void); void menu_save_open(void); void menu_gameover_open(void); +void menu_end_open(void); /* the Ruins' door: what comes next isn't made yet */ void menu_update(uint32_t keys, uint32_t pressed); void menu_draw(void); void game_new(const char *name); diff --git a/games/undertale/src/monsters.c b/games/undertale/src/monsters.c index 153e35dd..2f7f1867 100644 --- a/games/undertale/src/monsters.c +++ b/games/undertale/src/monsters.c @@ -320,7 +320,8 @@ int form_setup(int form, Battle *b) { m->def = mon_def(f->mon[i]); m->x = (int16_t)(xs[f->n - 1][i] + m->def->dx), m->y = (int16_t)(120 + m->def->dy); } - if (form == FORM_NAPSTABLOOK || form == FORM_TORIEL || form == FORM_FLOWEY) b->no_flee = form == FORM_FLOWEY; + /* Toriel and Flowey can't be fled from; Napstablook can */ + if (form == FORM_TORIEL || form == FORM_FLOWEY) b->no_flee = true; return 0; } const char *form_text(int form) { return forms[form].text; } diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index 20063886..fe113eaa 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -1,14 +1,55 @@ /* The rooms' objects and their random encounters. */ +#include +#include "battle.h" #include "event.h" #include "events.h" #include "game.h" +#include "monsters.h" +#include "ruins.h" #include "world.h" void room_setup(int room, int from) { - (void)from; - switch (room) { - default: break; - } + ruins1_setup(room, from); + ruins2_setup(room, from); + ruins3_setup(room, from); } -void encounter_step(void) {} +/* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ +void room_update(void) { + ruins2_update(); +} + +/* random encounters: a room's formations and how many steps between them (the game counts its steps, + * then a "!" shows over Frisk) */ +typedef struct { + uint8_t room; + uint8_t forms[6]; + uint8_t n; +} Encounters; +static const Encounters enc[] = { + {ROOM_RUINS7, {FORM_FROGGIT, FORM_WHIMSUN}, 2}, + {ROOM_RUINS8, {FORM_FROGGIT, FORM_WHIMSUN}, 2}, + {ROOM_RUINS9, {FORM_FROGGIT, FORM_WHIMSUN}, 2}, + {ROOM_RUINS10, {FORM_FROGGIT, FORM_WHIMSUN, FORM_FROGGIT_WHIMSUN, FORM_FROGGIT2, FORM_MOLDSMAL}, 5}, + {ROOM_RUINS11, {FORM_FROGGIT_WHIMSUN, FORM_FROGGIT2, FORM_MOLDSMAL, FORM_MOLDSMAL2, FORM_MOLDSMAL3}, 5}, + {ROOM_RUINS15, {FORM_LOOX, FORM_VEGETOID, FORM_LOOX_VEG_MIGOSP, FORM_VEGETOID_MIGOSP, FORM_MOLDSMAL_MIGOSP, FORM_LOOX2}, 6}, + {ROOM_RUINS16, {FORM_LOOX, FORM_VEGETOID, FORM_MOLDSMAL_MIGOSP, FORM_VEGETOID2}, 4}, + {ROOM_RUINS17A, {FORM_LOOX, FORM_VEGETOID, FORM_MOLDSMAL_MIGOSP}, 3}, + {ROOM_RUINS17B, {FORM_LOOX, FORM_VEGETOID, FORM_MOLDSMAL_MIGOSP}, 3}, + {ROOM_RUINS17C, {FORM_LOOX, FORM_VEGETOID, FORM_MOLDSMAL_MIGOSP}, 3}, + {ROOM_RUINS17D, {FORM_LOOX, FORM_VEGETOID, FORM_MOLDSMAL_MIGOSP}, 3}, +}; +static int steps_left = 120; +bool g_no_encounters; /* (the tests' --noenc) */ + +void encounter_step(void) { + if (!pl.moving || g_no_encounters) return; + const Encounters *e = NULL; + for (unsigned i = 0; i < sizeof enc / sizeof enc[0]; i++) + if (enc[i].room == g_room) e = &enc[i]; + if (!e) return; + if (--steps_left > 0) return; + steps_left = 100 + rnd_n(200); + event_start(EV_ENCOUNTER, NULL); + event_cur_arg(e->forms[rnd_n(e->n)]); +} diff --git a/games/undertale/src/ruins.h b/games/undertale/src/ruins.h new file mode 100644 index 00000000..ed5d85f3 --- /dev/null +++ b/games/undertale/src/ruins.h @@ -0,0 +1,12 @@ +/* Undertale: the Ruins' rooms and events (ruins1.c, ruins2.c, ruins3.c). */ +#ifndef UT_RUINS_H +#define UT_RUINS_H +#include "event.h" +void ruins1_setup(int room, int from); +int ruins1_event(Ev *c); /* -1: not one of its */ +void ruins2_setup(int room, int from); +int ruins2_event(Ev *c); +void ruins2_update(void); +void ruins3_setup(int room, int from); +int ruins3_event(Ev *c); +#endif diff --git a/games/undertale/src/ruins1.c b/games/undertale/src/ruins1.c new file mode 100644 index 00000000..c32bc2e9 --- /dev/null +++ b/games/undertale/src/ruins1.c @@ -0,0 +1,393 @@ +/* The Ruins, from the bed of golden flowers to the leaf pile: Flowey, then Toriel guiding the fallen human + * through her puzzles, the Dummy, the spikes, the independence test. Texts are the game's. */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "menu.h" +#include "monsters.h" +#include "ruins.h" +#include "save.h" +#include "world.h" + +/* ---------------------------------------------------------------- the rooms' things */ +void ruins1_setup(int room, int from) { + (void)from; + switch (room) { + case ROOM_AREA1: + if (flag(F_FLOWEY_MET)) obj_sign(120, 6015, 60, 40, "* (Golden flowers.)\n* (They must have broken your\n fall.)"); + break; + case ROOM_AREA1_2: + if (!flag(F_FLOWEY_MET)) { + static const uint16_t s[4] = {SPR_FLOWEY}; + Obj *f = obj_npc(ACTOR_FLOWEY, s, 508, 5768, DIR_DOWN, 0); + if (f) f->flags = OF_SOLID, obj_set_box(f, 4, 16, 17, 8); + obj_trigger(430, 5800, 180, 40, EV_FLOWEY_MEET, ACTOR_TRIGGER); + } + break; + case ROOM_RUINS1: + obj_save(510, 5275, "* (The shadow of the ruins\n looms above, filling you with\n determination.)"); + if (flag(F_TORIEL_MET) && !flag(F_RUINS1_DONE)) { + obj_toriel(504, 5330, DIR_DOWN); + obj_trigger(380, 5380, 280, 180, EV_RUINS1_TORIEL, ACTOR_TRIGGER); + } + break; + case ROOM_RUINS2: + obj_sign(440, 4880, 20, 20, "* \"Only the fearless may\n proceed.\"|* \"Brave ones, foolish ones.\"|* \"Both walk not the middle\n road.\""); + for (int k = 0; k < 6; k++) { + static const int16_t px[6] = {540, 580, 560, 540, 580, 560}, py[6] = {4938, 4938, 4958, 4978, 4978, 4998}; + Obj *p = obj_deco(SPR_O_GROUNDSWITCH1, px[k], py[k], false); + if (p) p->flags |= OF_BACK, p->frame = flag(F_RUINS2_DONE) && (k == 0 || k == 1 || k == 3 || k == 4) ? 1 : 0, p->arg = (int16_t)k; + } + { + Obj *lever = obj_deco(SPR_O_SWITCH, 560, 4888, false); + if (lever) lever->flags |= OF_BACK, lever->frame = flag(F_RUINS2_DONE) ? 1 : 0, lever->name = ACTOR_SWITCH; + } + if (!flag(F_RUINS2_DONE)) { + Obj *d = obj_deco(SPR_O_RUINSDOOR1, 480, 4860, true); + if (d) d->name = ACTOR_DOOR, obj_set_box(d, 0, 30, 40, 30); + obj_toriel(500, 4952, DIR_DOWN); + obj_trigger(400, 4920, 240, 140, EV_RUINS2_TORIEL, ACTOR_TRIGGER); + } + break; + case ROOM_RUINS3: { + obj_sign(488, 4724, 20, 18, "* \"Stay on the path.\""); + static const int16_t sx[3] = {742, 942, 980}; + for (int k = 0; k < 3; k++) { + Obj *s = obj_deco(SPR_O_SWITCH, sx[k], 4650, false); + if (!s) continue; + s->name = (uint8_t)(ACTOR_SWITCH + k), s->flags = OF_TALK | OF_BACK, s->event = EV_RUINS3_SWITCH; + obj_set_box(s, 0, 0, 20, 34); + s->frame = flag(F_RUINS3_SW1 + k) ? 1 : 0; + } + obj_spikes(1060, 4740, 1, 2, !flag(F_RUINS3_DONE), ACTOR_SPIKES); + if (!flag(F_RUINS3_DONE)) { + obj_toriel(470, 4716, DIR_DOWN); + if (!flag(F_RUINS3_SW1) && !flag(F_RUINS3_SW2)) obj_trigger(440, 4760, 120, 70, EV_RUINS3_TORIEL, ACTOR_TRIGGER); + } + break; + } + case ROOM_RUINS4: { + Obj *d = obj_deco(SPR_O_DUMMY, 1300, 4690, true); + if (d) d->name = ACTOR_DUMMY, d->flags |= OF_TALK, d->event = EV_RUINS4_DUMMY, obj_set_box(d, 2, 14, 16, 18); + if (!flag(F_DUMMY)) { + obj_toriel(1236, 4690, DIR_RIGHT); + obj_trigger(1080, 4680, 120, 140, EV_RUINS4_TORIEL, ACTOR_TRIGGER); + } + break; + } + case ROOM_RUINS5: + obj_sign(1680, 4478, 20, 20, "* \"The western room is the\n eastern room's blueprint.\""); + if (!flag(F_RUINS5_DONE)) { + obj_toriel(1250, 4470, DIR_DOWN); + obj_trigger(1230, 4500, 90, 100, EV_RUINS5_TORIEL, ACTOR_TRIGGER); + } + break; + case ROOM_RUINS6: { + Obj *p = obj_deco(SPR_O_PILLAR, 4602, 4400, true); + if (p) p->name = ACTOR_PILLAR, p->flags |= OF_TALK, p->event = EV_RUINS6_PILLAR, obj_set_box(p, 4, 44, 32, 16); + if (!flag(F_RUINS6_DONE)) { + obj_toriel(2330, 4466, DIR_RIGHT); + obj_trigger(2280, 4440, 120, 110, EV_RUINS6_TORIEL, ACTOR_TRIGGER); + } + break; + } + case ROOM_RUINS7: { + obj_save(5010, 4500, "* (Playfully crinkling through\n the leaves fills you with\n determination.)"); + static const uint16_t fs[4] = {SPR_O_SMALLFROG}; + if (!sv.kills) obj_npc(ACTOR_FROGGIT, fs, 4901, 4440, DIR_DOWN, EV_RUINS7_FROGGIT); + if (flag(F_PHONE) && !flag(F_LEAFPILE_CALL)) event_start(EV_RUINS7_CALL, NULL); + break; + } + } +} + +/* ---------------------------------------------------------------- the events */ +static const char flowey_hi[] = + "`0* Howdy!^2 I'm #YFLOWEY#X.^2\n* #YFLOWEY#X the #YFLOWER#X!|" + "`1* Hmmm...|" + "`0* You're new to the\n UNDERGROUND, aren'tcha?|" + "`1* Golly, you must be so\n confused.|" + "`0* Someone ought to teach you\n how things work around here!|" + "`0* I guess little old me will\n have to do.|" + "`7* Ready?^2 Here we go!"; + +static int ev_flowey_meet(Ev *c) { + Obj *f, *t; + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + SAY(FACE_FLOWEY, flowey_hi); + BATTLE(FORM_FLOWEY); + /* Toriel stands where Flowey was */ + f = obj_find(ACTOR_FLOWEY); + if (f) f->kind = OBJ_NONE; + obj_toriel(500, 5742, DIR_DOWN); + set_flag(F_FLOWEY_MET, 1); + set_flag(F_TORIEL_MET, 1); + WAIT(10); + SAY(FACE_TORIEL, "`0* This way."); + t = obj_find(ACTOR_TORIEL); + if (t) WALK_TO(t, 504, 5580, 2); + WAIT_UNTIL(!(t = obj_find(ACTOR_TORIEL)) || !t->walking); + if ((t = obj_find(ACTOR_TORIEL))) t->kind = OBJ_NONE; + EV_END; +} + +static int ev_ruins1_toriel(Ev *c) { + Obj *t = obj_find(ACTOR_TORIEL); + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + c->v[0] = 0; + /* she goes up the stairs, then through the door */ + if (!t) return 1; + WALK(t, 580, 5300, 2); + WALK(t, 606, 5250, 2); + WALK(t, 606, 5160, 2); + WALK(t, 504, 5150, 2); + WALK(t, 504, 5100, 2); + t->kind = OBJ_NONE; + set_flag(F_RUINS1_DONE, 1); + EV_END; +} + +static int ev_ruins2_toriel(Ev *c) { + Obj *t = obj_find(ACTOR_TORIEL); + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + if (!t) return 1; + t->dir = DIR_DOWN; + SAY(FACE_TORIEL, "`0* Welcome to your new\n home, innocent one.|* Allow me to educate you in\n the operation of the RUINS."); + /* over the switches, not the middle road */ + WALK(t, 534, 4952, 2); + WALK(t, 534, 4898, 2); + c->v[0] = 0; + for (c->v[1] = 0; c->v[1] < MAX_OBJS; c->v[1]++) + if (objs[c->v[1]].kind == OBJ_DECO && objs[c->v[1]].spr[0] == SPR_O_GROUNDSWITCH1 && objs[c->v[1]].arg == 0) objs[c->v[1]].frame = 1; + WALK(t, 574, 4898, 2); + for (c->v[1] = 0; c->v[1] < MAX_OBJS; c->v[1]++) + if (objs[c->v[1]].kind == OBJ_DECO && objs[c->v[1]].spr[0] == SPR_O_GROUNDSWITCH1 && objs[c->v[1]].arg == 1) objs[c->v[1]].frame = 1; + WALK(t, 574, 4938, 2); + for (c->v[1] = 0; c->v[1] < MAX_OBJS; c->v[1]++) + if (objs[c->v[1]].kind == OBJ_DECO && objs[c->v[1]].spr[0] == SPR_O_GROUNDSWITCH1 && objs[c->v[1]].arg == 4) objs[c->v[1]].frame = 1; + WALK(t, 534, 4938, 2); + for (c->v[1] = 0; c->v[1] < MAX_OBJS; c->v[1]++) + if (objs[c->v[1]].kind == OBJ_DECO && objs[c->v[1]].spr[0] == SPR_O_GROUNDSWITCH1 && objs[c->v[1]].arg == 3) objs[c->v[1]].frame = 1; + WALK(t, 544, 4880, 2); + t->dir = DIR_UP; + WAIT(12); + { + Obj *l = obj_find(ACTOR_SWITCH), *d = obj_find(ACTOR_DOOR); + if (l) l->frame = 1; + if (d) d->kind = OBJ_NONE; + } + WAIT(15); + t->dir = DIR_DOWN; + SAY(FACE_TORIEL, "`0* The RUINS are full of\n puzzles.|* Ancient fusions between\n diversions and doorkeys.|* One must solve them to move\n from room to room.|* Please adjust yourself to\n the sight of them."); + set_flag(F_RUINS2_DONE, 1); + WALK(t, 484, 4900, 2); + WALK(t, 484, 4840, 2); + t->kind = OBJ_NONE; + EV_END; +} + +static int ev_ruins3_toriel(Ev *c) { + Obj *t = obj_find(ACTOR_TORIEL); + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + if (!t) return 1; + SAY(FACE_TORIEL, "`0* To make progress here, you\n will need to trigger several\n switches.|* Do not worry, I have\n labelled the ones that you\n need to flip."); + WALK(t, 560, 4716, 3); + WALK(t, 990, 4716, 3); + t->dir = DIR_LEFT; + EV_END; +} + +static int ev_ruins3_switch(Ev *c) { + int k = c->self ? c->self->name - ACTOR_SWITCH : 0; + EV_BEGIN; + if (flag(F_RUINS3_SW1 + k)) { + NARRATE("* (The switch is already\n flipped.)"); + return 1; + } + if (k == 2 && !flag(F_RUINS3_DONE) && obj_find(ACTOR_TORIEL)) { + SAY(FACE_TORIEL, "`3* Oh? That switch is not\n one of the ones I labelled.|`0* Please, my child,\n flip only the switches\n I marked for you."); + return 1; + } + set_flag(F_RUINS3_SW1 + k, 1); + c->self->frame = 1; + NARRATE("* (You flipped the switch.)"); + if (flag(F_RUINS3_SW1) && flag(F_RUINS3_SW2) && !flag(F_RUINS3_DONE)) { + set_flag(F_RUINS3_DONE, 1); + { + Obj *s = obj_find(ACTOR_SPIKES); + if (s) s->frame = 1, s->flags &= (uint16_t)~OF_SOLID; + } + WAIT(10); + if (obj_find(ACTOR_TORIEL)) { + SAY(FACE_TORIEL, "`2* Splendid!\n* I am proud of you, little\n one.|`0* Let us move to the next\n room."); + WALK(obj_get(ACTOR_TORIEL), 1040, 4730, 3); + WALK(obj_get(ACTOR_TORIEL), 1100, 4730, 3); + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + } + } + EV_END; +} + +static int ev_ruins4_toriel(Ev *c) { + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + SAY(FACE_TORIEL, "`0* As a human living in the\n UNDERGROUND, monsters may\n attack you.|* You will need to be prepared\n for this situation.|`2* However, worry not!\n* The process is simple.|`0* When you encounter a\n monster, you will enter a\n FIGHT.|* While you are in a FIGHT,\n strike up a friendly\n conversation.|* Stall for time.\n* I will come to resolve the\n conflict.|* Practice talking to the\n dummy."); + EV_END; +} + +static int ev_ruins4_dummy(Ev *c) { + EV_BEGIN; + if (flag(F_DUMMY)) { + NARRATE("* (A cotton dummy.)"); + return 1; + } + BATTLE(FORM_DUMMY); + if (battle_result() == BR_FLED) { + set_flag(F_DUMMY, 3); + SAY(FACE_TORIEL, "`3* ...ah, you ran away...|`0* Truthfully, that was not a\n poor choice.|* It is better to avoid\n conflict whenever possible.|* That, however, is only a\n dummy.|* It cannot harm you.|* It is made of cotton.|* It has no desire for\n revenge...|* Nevertheless, there is no\n harm in practicing.|* Come now."); + } else if (bt.mon[0].killed) { + set_flag(F_DUMMY, 2); + if (c->self) c->self->kind = OBJ_NONE; + SAY(FACE_TORIEL, "`3* Ah, the dummies are not for\n fighting!\n* They are for talking!|`1* We do not want to hurt\n anybody, do we...?|`0* Come now."); + } else if (bt.turn >= 5 && !flag(F_DUMMY)) { + set_flag(F_DUMMY, 4); + SAY(FACE_TORIEL, "`3* ...you stared so intently\n at that dummy that it got\n bored of you.|`0* I am sure there is a lesson\n in that somewhere...|* Come now, let us continue."); + } else { + set_flag(F_DUMMY, 1); + SAY(FACE_TORIEL, "`2* Ah, very good!\n* You are very good."); + } + if (obj_find(ACTOR_TORIEL)) { + WALK(obj_get(ACTOR_TORIEL), 1244, 4640, 2); + WALK(obj_get(ACTOR_TORIEL), 1244, 4560, 2); + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + } + EV_END; +} + +/* the spikes' safe way: the cells of the blueprint (tools/rooms.py has the same) */ +static const int16_t spike_path[][2] = { + {1916, 4497}, {2000, 4497}, {2000, 4458}, {2060, 4458}, {2060, 4497}, {2160, 4497}, {2160, 4458}, {2236, 4458}}; + +static int ev_ruins5_toriel(Ev *c) { + Obj *t = obj_find(ACTOR_TORIEL); + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + if (!t) return 1; + /* she goes ahead; halfway, a Froggit */ + FREE(true); + WALK(t, 1500, 4470, 3); + WALK(obj_get(ACTOR_TORIEL), 1820, 4480, 3); + obj_get(ACTOR_TORIEL)->dir = DIR_LEFT; + WAIT_UNTIL(pl.x > 1500); + FREE(false); + BATTLE(FORM_FROGGIT_FIRST); + FREE(true); + WAIT_UNTIL(pl.x > 1740); + FREE(false); + t = obj_find(ACTOR_TORIEL); + t->dir = DIR_LEFT; + SAY(FACE_TORIEL, "`0* This is the puzzle,\n but...|* Here, take my hand for a\n moment."); + /* hand in hand over the spikes */ + PL_WALK(t->x - 14, t->y + 10, 3); + for (c->v[0] = 0; c->v[0] < (int)(sizeof spike_path / sizeof spike_path[0]); c->v[0]++) { + WALK_TO(obj_get(ACTOR_TORIEL), spike_path[c->v[0]][0] + 6, spike_path[c->v[0]][1] - 30, 2); + pl_walk_to(spike_path[c->v[0]][0] - 16 > pl.x ? spike_path[c->v[0]][0] - 16 : pl.x, spike_path[c->v[0]][1] - 20, 2); + WAIT_UNTIL(!obj_get(ACTOR_TORIEL)->walking && !pl_walking()); + } + pl_walk_to(2240, 4444, 2); + WAIT_UNTIL(!pl_walking()); + obj_get(ACTOR_TORIEL)->dir = DIR_LEFT; + SAY(FACE_TORIEL, "`0* Puzzles seem too dangerous\n for now."); + set_flag(F_RUINS5_DONE, 1); + WALK(obj_get(ACTOR_TORIEL), 2320, 4440, 3); + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + EV_END; +} + +static int ev_ruins6_toriel(Ev *c) { + Obj *t = obj_find(ACTOR_TORIEL); + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + if (!t) return 1; + t->dir = DIR_LEFT; + SAY(FACE_TORIEL, "`0* You have done excellently\n thus far, my child.|`1* However...^2 I have a\n difficult request to ask of\n you.|* ...|`0* I would like you to walk to\n the end of the room by\n yourself.|`1* Forgive me for this."); + /* she hurries off, and hides behind the pillar */ + FREE(true); + WALK(obj_get(ACTOR_TORIEL), 4560, 4466, 6); + WALK(obj_get(ACTOR_TORIEL), 4606, 4392, 3); + obj_get(ACTOR_TORIEL)->dir = DIR_DOWN; + obj_get(ACTOR_TORIEL)->flags &= (uint16_t)~OF_SOLID; + obj_trigger(4470, 4430, 16, 130, EV_RUINS6_REVEAL, ACTOR_TRIGGER2); + EV_END; +} + +static int ev_ruins6_pillar(Ev *c) { + Obj *t = obj_find(ACTOR_TORIEL); + EV_BEGIN; + if (!t || flag(F_RUINS6_DONE)) { + NARRATE("* (A pillar.)"); + return 1; + } + SAY(FACE_TORIEL, "`0* ..."); + EV_END; +} + +static int ev_ruins6_reveal(Ev *c) { + Obj *t = obj_find(ACTOR_TORIEL); + EV_BEGIN; + if (!t) return 1; + if (c->self) c->self->kind = OBJ_NONE; + WALK(t, 4570, 4440, 2); + t->dir = DIR_LEFT; + SAY(FACE_TORIEL, "`0* Greetings, my child.|* Do not worry, I did not\n leave you.|* I was merely behind this\n pillar the whole time.|`2* Thank you for trusting me.|`0* However, there was an\n important reason for this\n exercise.|* ...^2 to test your\n independence.|`1* I must attend to some\n business, and you must stay\n alone for a while.|`0* Please remain here.|* It's dangerous to explore\n by yourself.|`2* I have an idea.|* I will give you a CELL\n PHONE.|`0* If you have a need for\n anything, just call.|* Be good, alright?"); + set_flag(F_PHONE, 1); + WALK(obj_get(ACTOR_TORIEL), 4700, 4470, 3); + WALK(obj_get(ACTOR_TORIEL), 4860, 4470, 3); + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + set_flag(F_RUINS6_DONE, 1); + /* (the game saves here when she leaves) */ + sv.room = (int16_t)g_room, sv.x = pl.x, sv.y = pl.y; + save_write_auto(); + EV_END; +} + +static int ev_ruins7_call(Ev *c) { + EV_BEGIN; + WAIT_UNTIL(!world_fading()); + set_flag(F_LEAFPILE_CALL, 1); + NARRATE("* Ring..."); + SAY(FACE_TORIEL, "`0* Hello?\n* This is TORIEL.|* You have not left the room,\n have you?|* There are a few puzzles\n ahead that I have yet to\n explain.|* It would be dangerous to\n try to solve them yourself.|* Be good, alright?"); + EV_END; +} + +static int ev_ruins7_froggit(Ev *c) { + EV_BEGIN; + NARRATE("* Ribbit, ribbit.|* (Excuse me, human.)|* (You look like you're going to\n be fighting a lot of\n monsters.)|* (Let me give you some\n advice.)|* (If you ACT a certain way or\n FIGHT until you almost defeat\n them...)|* (They might not want to\n battle you anymore.)|* (If a monster does not want\n to fight you, please...)|* (Use some MERCY, human.)\n* Ribbit."); + EV_END; +} + +int ruins1_event(Ev *c) { + switch (c->id) { + case EV_FLOWEY_MEET: return ev_flowey_meet(c); + case EV_RUINS1_TORIEL: return ev_ruins1_toriel(c); + case EV_RUINS2_TORIEL: return ev_ruins2_toriel(c); + case EV_RUINS3_TORIEL: return ev_ruins3_toriel(c); + case EV_RUINS3_SWITCH: return ev_ruins3_switch(c); + case EV_RUINS4_TORIEL: return ev_ruins4_toriel(c); + case EV_RUINS4_DUMMY: return ev_ruins4_dummy(c); + case EV_RUINS5_TORIEL: return ev_ruins5_toriel(c); + case EV_RUINS6_TORIEL: return ev_ruins6_toriel(c); + case EV_RUINS6_PILLAR: return ev_ruins6_pillar(c); + case EV_RUINS6_REVEAL: return ev_ruins6_reveal(c); + case EV_RUINS7_CALL: return ev_ruins7_call(c); + case EV_RUINS7_FROGGIT: return ev_ruins7_froggit(c); + } + return -1; +} diff --git a/games/undertale/src/ruins2.c b/games/undertale/src/ruins2.c new file mode 100644 index 00000000..38ad625b --- /dev/null +++ b/games/undertale/src/ruins2.c @@ -0,0 +1,574 @@ +/* The Ruins, from the Monster Candy to Toriel's tree: the cracked floors, the rocks, Napstablook, the Spider + * Bake Sale, the Froggits' hall, the one switch, the rotating rooms, the balcony over Home. Toriel calls on + * the way. Texts are the game's (the Undertale Wiki's records of them) where known. */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "ruins.h" +#include "save.h" +#include "world.h" + +/* ---------------------------------------------------------------- falling through a cracked floor */ +/* where each fall lands: the room under, Frisk's top-left there (x -1: where he was; y -1: 400 under) */ +typedef struct { + uint8_t room; + int16_t x, y; +} Fall; +enum { FALL_RUINS8, FALL_LEAVES, FALL_ONE_A, FALL_ROTATE = FALL_ONE_A + 6 }; +static const Fall falls[] = { + [FALL_RUINS8] = {ROOM_RUINS8B, 5258, 5132}, + [FALL_LEAVES] = {ROOM_RUINS10B, -1, -1}, + [FALL_ONE_A] = {ROOM_RUINS16A, 8340, 4945}, {ROOM_RUINS16B, 8460, 4945}, {ROOM_RUINS16C, 8580, 4945}, + {ROOM_RUINS16D, 8340, 5065}, {ROOM_RUINS16E, 8460, 5065}, {ROOM_RUINS16F, 8580, 5065}, + [FALL_ROTATE] = {ROOM_RUINS17X, 9270, 4570}, +}; + +static Obj *crack(int x, int y, int w, int h, int fall) { + Obj *o = obj_trigger(x, y, w, h, EV_FALLING, ACTOR_NONE); + if (o) o->arg = (int16_t)fall; + return o; +} + +static int ev_fall(Ev *c) { + EV_BEGIN; + { + const Fall *f = &falls[c->self ? c->self->arg : c->v[4]]; + c->v[0] = f->room; + c->v[1] = f->x < 0 ? pl.x : f->x; + c->v[2] = f->y < 0 ? pl.y + 400 : f->y; + } + if (g_room == ROOM_RUINS10) set_flag(F_FALL_LEAVES, flag(F_FALL_LEAVES) + 1); + pl.hidden = true; + WAIT(6); + FADE_TO(c->v[0], c->v[1], c->v[2] - 60, DIR_DOWN); + pl.hidden = false; + /* down onto the leaves */ + for (c->v[3] = 0; c->v[3] < 12; c->v[3]++) { + pl.y = (int16_t)(pl.y + 5); + world_camera(); + WAIT(0); + } + WAIT(10); + EV_END; +} + +/* the leaf puzzle: the tiles that give way (under them, the leaves) */ +static const int16_t leaf_holes[][4] = { + {6160, 4740, 80, 160}, {6280, 4780, 20, 100}, {6340, 4840, 20, 60}, {6400, 4780, 60, 40}, {6400, 4820, 40, 60}}; +/* the one switch puzzle: its six cracks */ +static const int16_t one_cracks[6][2] = {{8342, 4582}, {8462, 4582}, {8582, 4582}, {8342, 4702}, {8462, 4702}, {8582, 4702}}; + +/* ---------------------------------------------------------------- the rotating rooms */ +/* each room's three switches: x, y, colour (0 red, 1 blue, 2 green), right? A hidden one is under a pillar + * (its box the pillar's) */ +typedef struct { + int16_t x, y, w, h; + uint8_t color, right, hidden; +} CSwitch; +static const CSwitch cswitch[4][3] = { + {{9020, 4780, 20, 20, 0, 0, 0}, {8800, 4680, 20, 20, 1, 0, 0}, {8970, 4620, 20, 20, 2, 0, 0}}, + {{8830, 4397, 20, 20, 0, 0, 0}, {8916, 4156, 48, 78, 1, 1, 1}, {8990, 4320, 20, 20, 2, 0, 0}}, + {{8400, 4200, 20, 20, 0, 1, 0}, {8620, 4300, 20, 20, 1, 0, 0}, {8460, 4360, 20, 20, 2, 0, 0}}, + {{8576, 3676, 48, 78, 0, 0, 1}, {8490, 3920, 20, 20, 1, 0, 0}, {8416, 3716, 48, 78, 2, 1, 1}}, +}; +static int rotate_fails; + +static int rotate_index(int room) { + switch (room) { + case ROOM_RUINS17A: return 0; + case ROOM_RUINS17B: return 1; + case ROOM_RUINS17C: return 2; + case ROOM_RUINS17D: return 3; + default: return -1; + } +} + +static void rotate_setup(int k) { + for (int i = 0; i < 3; i++) { + const CSwitch *s = &cswitch[k][i]; + Obj *o = obj_sign(s->x, s->y, s->w, s->h, NULL); + if (o) o->event = EV_COLOR_SWITCH, o->arg = (int16_t)(k * 3 + i), o->name = (uint8_t)(ACTOR_SWITCH + i); + if (o && !s->hidden) obj_set_box(o, 2, 6, 16, 14); + } + static const char *const plaque[4] = { + "* \"The far door is not an\n exit.\"|* \"It simply marks a rotation\n in perspective.\"", + "* \"If you can read this,\n press the blue switch.\"", + "* \"If you can read this,\n press the red switch.\"", + "* \"If you can read this,\n press the green switch.\""}; + static const int16_t px[4][2] = {{8800, 4536}, {8800, 4238}, {8622, 4238}, {8502, 3656}}; + obj_sign(px[k][0], px[k][1], 40, 20, plaque[k]); + /* the doors' spikes: where Frisk came in, down; the far door's, up until the right switch */ + switch (k) { + case 0: + obj_spikes(8760, 4620, 1, 2, false, ACTOR_NONE); + obj_spikes(8960, 4840, 2, 1, false, ACTOR_NONE); + break; + case 1: + obj_spikes(8960, 4140, 2, 1, false, ACTOR_NONE); + obj_spikes(8760, 4340, 1, 2, !flag(F_ROTATE2), ACTOR_SPIKES); + break; + case 2: + obj_spikes(8660, 4340, 1, 2, false, ACTOR_NONE); + obj_spikes(8440, 4140, 2, 1, !flag(F_ROTATE3), ACTOR_SPIKES); + break; + case 3: + obj_spikes(8440, 3960, 2, 1, false, ACTOR_NONE); + obj_spikes(8660, 3740, 1, 2, !flag(F_ROTATE4), ACTOR_SPIKES); + break; + } +} + +static int ev_color_switch(Ev *c) { + EV_BEGIN; + { + int k = c->self ? c->self->arg : 0; + const CSwitch *s = &cswitch[k / 3][k % 3]; + if (flag(F_ROTATE1 + k / 3) && s->right) { + NARRATE("* (The switch is already\n pressed.)"); + return 1; + } + c->v[0] = k; + } + if (cswitch[c->v[0] / 3][c->v[0] % 3].hidden) NARRATE("* (You found a switch hidden\n behind the pillar.)"); + NARRATE("* (You pressed the switch.)"); + if (cswitch[c->v[0] / 3][c->v[0] % 3].right) { + set_flag(F_ROTATE1 + c->v[0] / 3, 1); + obj_spikes_set(obj_find(ACTOR_SPIKES), false); + return 1; + } + rotate_fails++; + /* the floor gives way */ + c->self = NULL, c->v[4] = FALL_ROTATE; + c->at = NULL, c->id = EV_FALLING; + return ev_fall(c); + EV_END; +} + +/* ---------------------------------------------------------------- the rooms' things */ +static const uint16_t frog_spr[4] = {SPR_O_SMALLFROG}; + +static Obj *item_here(uint16_t spr, int x, int y, int item, int f) { + if (flag(f)) return NULL; + Obj *o = obj_deco(spr, x, y, false); + if (o) o->flags |= OF_TALK | OF_BACK, o->event = EV_ITEM, o->arg = (int16_t)item, o->arg2 = (int16_t)f; + return o; +} + +/* the second rock puzzle's talking rock, by how far it has been asked */ +static void rock3_place(Obj *r) { + int s = flag(F_RUINS11_ROCK); + static const int16_t at[6][2] = {{6720, 4875}, {6740, 4875}, {6740, 4855}, {6780, 4875}, {6740, 4875}, {6780, 4875}}; + r->x = at[s][0], r->y = at[s][1]; +} + +void ruins2_setup(int room, int from) { + (void)from; + int k = rotate_index(room); + if (k >= 0) rotate_setup(k); + switch (room) { + case ROOM_RUINS7A: { + static const uint16_t dish[3] = {SPR_O_CANDYDISH, SPR_O_CANDYDISH2, SPR_O_CANDYDISH_BAD}; + Obj *d = obj_deco(dish[flag(F_CANDY_SPILT) ? 2 : 0], 4950, 4215, true); + if (d) d->flags |= OF_TALK, d->event = EV_CANDY, d->name = ACTOR_CANDY; + break; + } + case ROOM_RUINS8: + crack(5244, 4683, 72, 79, FALL_RUINS8); + break; + case ROOM_RUINS9: { + obj_sign(5600, 4640, 20, 20, "* \"Three out of four gray rocks\n recommend you push them.\""); + Obj *r = obj_rock(5620, 4735, ACTOR_ROCK, 0); + if (r && flag(F_RUINS9_ROCK)) r->x = 5680; + obj_spikes(5740, 4680, 1, 6, !flag(F_RUINS9_ROCK), ACTOR_SPIKES); + if (!flag(F_FLAVOR_CALL)) event_start(EV_CALL, NULL), event_cur_arg(CALL_FLAVOR); + break; + } + case ROOM_RUINS10: + obj_sign(6380, 4740, 20, 20, "* \"Didn't you read the sign\n downstairs?\""); + if (flag(F_FALL_LEAVES) < 10) + for (unsigned i = 0; i < sizeof leaf_holes / sizeof leaf_holes[0]; i++) + crack(leaf_holes[i][0] + 2, leaf_holes[i][1] + 2, leaf_holes[i][2] - 4, leaf_holes[i][3] - 4, FALL_LEAVES); + if (flag(F_FLAVOR_CALL) == 1) event_start(EV_CALL, NULL), event_cur_arg(CALL_FLAVOR2); + break; + case ROOM_RUINS10B: + obj_sign(6380, 5140, 20, 20, "* \"Please don't step on the\n leaves.\""); + break; + case ROOM_RUINS11: { + obj_rock(6700, 4795, ACTOR_ROCK, 0); + obj_rock(6680, 4835, ACTOR_ROCK2, 0); + Obj *r = obj_rock(6720, 4875, ACTOR_ROCK3, EV_ROCK_TALK); + if (r) rock3_place(r); + int s = flag(F_RUINS11_ROCK); + obj_spikes(6880, 4820, 2, 3, s != 3 && s != 5, ACTOR_SPIKES); + if (s == 3) obj_trigger(6830, 4800, 30, 100, EV_ROCK_OFF, ACTOR_TRIGGER); + if (flag(F_FLAVOR_CALL) == 2) event_start(EV_CALL, NULL), event_cur_arg(CALL_ALLERGY); + break; + } + case ROOM_RUINS12: + obj_save(7170, 4860, "* (Knowing the mouse might one\n day leave its hole and get\n the cheese...)|* (It fills you with\n determination.)"); + obj_sign(7240, 4860, 30, 20, "* (The cheese has been stuck\n to the table for so long...)|* (...it's crystallized.)"); + obj_sign(7164, 4798, 14, 12, "* (Squeak!)"); + break; + case ROOM_RUINS13: + if (!flag(F_NAPSTA)) { + Obj *n = obj_deco(SPR_O_NAPSTABLOOK_GR, 7525, 4832, true); + if (n) n->name = ACTOR_NAPSTA, n->flags |= OF_TALK, n->event = EV_NAPSTA_SLEEP, obj_set_box(n, -7, -14, 44, 44); + obj_trigger(7496, 4818, 20, 44, EV_NAPSTA_SLEEP, ACTOR_TRIGGER); + } + break; + case ROOM_RUINS14: { + obj_sign(7834, 4818, 22, 20, "* \"Spider Bake Sale\"|* \"All proceeds go to real\n spiders.\""); + Obj *w = obj_sign(7788, 4782, 30, 30, NULL); + if (w) w->event = EV_WEB, w->arg = 0; + w = obj_sign(7850, 4758, 48, 50, NULL); + if (w) w->event = EV_WEB, w->arg = 1; + break; + } + case ROOM_RUINS15: { + static const int16_t fx[3] = {7660, 7780, 7900}; + for (int i = 0; i < 3; i++) { + if (i == 0 && flag(F_SKIPS) > 5) continue; + Obj *f = obj_npc(ACTOR_FROGGIT, frog_spr, fx[i], 4540, DIR_DOWN, EV_FROGGIT); + if (f) f->arg = (int16_t)i, f->flags |= OF_ANIM, f->anim_speed = 20; + } + if (!flag(F_ITEM_CALL)) { + Obj *t = obj_trigger(7960, 4540, 40, 80, EV_CALL, ACTOR_TRIGGER); + if (t) t->arg = CALL_ITEMS; + } + break; + } + case ROOM_RUINS16: + obj_sign(8180, 4520, 20, 20, "* \"There is just one switch.\""); + for (int i = 0; i < 6; i++) crack(one_cracks[i][0], one_cracks[i][1], 16, 17, FALL_ONE_A + i); + obj_spikes(8680, 4620, 1, 2, !flag(F_ONESWITCH), ACTOR_SPIKES); + break; + case ROOM_RUINS16A: + case ROOM_RUINS16F: { + Obj *v = obj_deco(SPR_O_VEGETABLEOUTSIDE, room == ROOM_RUINS16A ? 8300 : 8660, room == ROOM_RUINS16A ? 4980 : 5117, true); + if (v) v->flags |= OF_TALK, v->event = EV_VEGGIE; + break; + } + case ROOM_RUINS16B: { + Obj *s = obj_deco(SPR_O_SWITCH, 8460, 4935, false); + if (s) s->flags |= OF_TALK | OF_BACK, s->event = EV_ONE_SWITCH, s->frame = flag(F_ONESWITCH) ? 1 : 0, obj_set_box(s, 0, 0, 20, 30); + break; + } + case ROOM_RUINS16D: + item_here(SPR_O_RIBBON, 8260, 5120, ITEM_FADED_RIBBON, F_RIBBON); + break; + case ROOM_RUINS16E: + if (flag(F_NAPSTA) == 1 && !flag(F_NAPSTA_LIE)) { + Obj *n = obj_deco(SPR_O_NAPSTABLOOK_GR, 8495, 5117, true); + if (n) n->name = ACTOR_NAPSTA, n->flags |= OF_TALK, n->event = EV_NAPSTA_LIE; + } + break; + case ROOM_RUINS17B: + if (rotate_fails >= 2 && !flag(F_ROTATE2)) say_on_entry("* (You notice a switch hidden\n behind the pillar.)"); + break; + case ROOM_RUINS19: { + Obj *f = obj_npc(ACTOR_FROGGIT, frog_spr, 9400, 3700, DIR_DOWN, EV_FROGGIT); + if (f) f->arg = 3, f->flags |= OF_ANIM, f->anim_speed = 20; + break; + } + case ROOM_RUINS20: + item_here(SPR_O_GROUNDKNIFE, 9364, 3566, ITEM_TOY_KNIFE, F_TOYKNIFE); + break; + case ROOM_RUINS21: + obj_save(8940, 3120, "* (Seeing such a cute, tidy\n house in the RUINS gives\n you determination.)"); + obj_sign(9004, 3290, 34, 30, "* (Every time this old tree\n grows any leaves, they fall\n right off.)"); + if (!flag(F_TORIEL_HOME)) { + Obj *t = obj_toriel(8996, 3240, DIR_DOWN); + if (t) t->spr[0] = SPR_O_TORIEL_D_PHONE, t->flags &= (uint16_t)~OF_WALKANIM; + obj_trigger(8880, 3330, 280, 40, EV_TORIEL_TREE, ACTOR_TRIGGER); + } + break; + } +} + +/* each frame: the rocks on their switches */ +void ruins2_update(void) { + if (g_room == ROOM_RUINS9 && !flag(F_RUINS9_ROCK)) { + Obj *r = obj_find(ACTOR_ROCK); + if (r && r->x >= 5676 && r->x <= 5684) { + set_flag(F_RUINS9_ROCK, 1); + r->x = 5680; + r->flags &= (uint16_t)~OF_SOLID; /* it stays */ + obj_spikes_set(obj_find(ACTOR_SPIKES), false); + } + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_candy(Ev *c) { + EV_BEGIN; + if (flag(F_CANDY_SPILT)) { + NARRATE("* Look at what you've done."); + return 1; + } + if (item_count() >= NUM_ITEMS) { + NARRATE("* You tried to take a piece of\n candy, but you didn't have\n any room."); + return 1; + } + set_flag(F_CANDY_TAKEN, flag(F_CANDY_TAKEN) + 1); + if (flag(F_CANDY_TAKEN) >= (flag(F_HARDMODE) ? 3 : 4)) { + set_flag(F_CANDY_SPILT, 1); + if (c->self) c->self->spr[0] = SPR_O_CANDYDISH_BAD; + NARRATE("* You took too much too fast.\n* The candy spills onto the\n floor."); + return 1; + } + item_add(ITEM_MONSTER_CANDY); + if (flag(F_CANDY_TAKEN) == 1) NARRATE("* You took a piece of candy.\n* (Press [TOOLBOX] to open\n the menu.)"); + else if (flag(F_CANDY_TAKEN) == 2) NARRATE("* You took more candy.\n* How disgusting..."); + else if (flag(F_HARDMODE)) NARRATE("* In this hellish world, you\n can only take 3 pieces of\n candy..."); + else NARRATE("* You take another piece.\n* You feel like the scum of\n the earth..."); + EV_END; +} + +static const char call_hello[] = "* Ring...|`0* Hello?\n* This is TORIEL.|"; + +static int ev_call(Ev *c) { + EV_BEGIN; + if (c->self) c->v[0] = c->self->arg, c->self->kind = OBJ_NONE; + WAIT_UNTIL(!world_fading()); + WAIT(15); + switch (c->v[0]) { + case CALL_FLAVOR: + set_flag(F_FLAVOR_CALL, 1); + SAY(FACE_TORIEL, "* Ring...|`0* Hello?\n* This is TORIEL.|* For no reason in\n particular...|* Which do you prefer?|* Cinnamon or butterscotch?@Cinnamon@Bscotch"); + set_flag(F_FLAVOR, CHOICE() ? 2 : 1); + SAY(FACE_TORIEL, "`0* Oh, I see.\n* Thank you very much!"); + break; + case CALL_FLAVOR2: + set_flag(F_FLAVOR_CALL, 2); + SAYF(FACE_TORIEL, "%s* You do not DISLIKE\n %s, do you?|* I know what your preference\n is, but...|* Would you turn up your nose\n if you found it on your\n plate?|* Right, right, I understand.|* Thank you for being\n patient, by the way.", + call_hello, flag(F_FLAVOR) == 2 ? "cinnamon" : "butterscotch"); + break; + case CALL_ALLERGY: + set_flag(F_FLAVOR_CALL, 3), set_flag(F_ALLERGY_CALL, 1); + SAY(FACE_TORIEL, "* Ring...|`0* Hello?|* You do not have any\n allergies, do you?|`1* Huh? Why am I asking?|`0* No reason...\n* No reason at all."); + break; + case CALL_ITEMS: + set_flag(F_ITEM_CALL, 1); + SAY(FACE_TORIEL, "* Ring...|`0* Hello?|* I just realized that it has\n been a while since I have\n cleaned up.|* I was not expecting to have\n company so soon.|* There are probably a lot of\n things lying about here and\n there.|* You can pick them up, but do\n not carry more than you\n need.|* Someday you might see\n something you really like.|* You will want to leave room\n in your pockets for that."); + break; + } + EV_END; +} + +static int ev_rock_talk(Ev *c) { + Obj *r = obj_find(ACTOR_ROCK3); + EV_BEGIN; + if (!r) return 1; + switch (flag(F_RUINS11_ROCK)) { + case 0: + SAY(FACE_NONE, "* WHOA there, pardner!\n* Who said you could push me\n around?|* ...|* Huh? You want me to move?\n* Well, why didn't ya just\n say so?"); + set_flag(F_RUINS11_ROCK, 1); + WALK(obj_get(ACTOR_ROCK3), 6740, 4875, 1); + NARRATE("* (The rock moved a little,\n and stopped.)"); + break; + case 1: + SAY(FACE_NONE, "* Huh? Not far enough?\n* Alright, alright."); + set_flag(F_RUINS11_ROCK, 2); + WALK(obj_get(ACTOR_ROCK3), 6740, 4855, 1); + break; + case 2: + NARRATE("* (You tell the rock it's\n going the wrong way.)"); + SAY(FACE_NONE, "* Oh! Why didn't ya say so,\n pardner?"); + set_flag(F_RUINS11_ROCK, 3); + WALK(obj_get(ACTOR_ROCK3), 6740, 4875, 1); + WALK(obj_get(ACTOR_ROCK3), 6780, 4875, 1); + obj_spikes_set(obj_find(ACTOR_SPIKES), false); + obj_trigger(6830, 4800, 30, 100, EV_ROCK_OFF, ACTOR_TRIGGER); + break; + case 3: + case 5: + SAY(FACE_NONE, "* Well, here I am, pardner."); + break; + case 4: + NARRATE("* (You ask the rock to stay\n on the switch.)"); + SAY(FACE_NONE, "* Huh? You want me to stay\n put?|* Well, alright.\n* It's easier when you just\n ask, you know."); + set_flag(F_RUINS11_ROCK, 5); + WALK(obj_get(ACTOR_ROCK3), 6780, 4875, 1); + obj_spikes_set(obj_find(ACTOR_SPIKES), false); + break; + } + EV_END; +} + +static int ev_rock_off(Ev *c) { + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + if (flag(F_RUINS11_ROCK) != 3) return 1; + set_flag(F_RUINS11_ROCK, 4); + WALK(obj_get(ACTOR_ROCK3), 6740, 4875, 1); + obj_spikes_set(obj_find(ACTOR_SPIKES), true); + NARRATE("* (The rock rolled off the\n switch.)"); + EV_END; +} + +static int ev_napsta_sleep(Ev *c) { + EV_BEGIN; + if (flag(F_NAPSTA)) return 1; + NARRATE("* (This ghost keeps saying 'z'\n out loud repeatedly,\n pretending to sleep.)|* Move it with force?@Yes@No"); + if (CHOICE() != 0) { + /* he steps back out of its way */ + PL_WALK(pl.x - 12, pl.y, 2); + return 1; + } + BATTLE(FORM_NAPSTABLOOK); + if (!flag(F_NAPSTA)) set_flag(F_NAPSTA, battle_result() == BR_FLED ? 3 : 1); + obj_get(ACTOR_NAPSTA)->kind = OBJ_NONE; + { + Obj *t = obj_find(ACTOR_TRIGGER); + if (t) t->kind = OBJ_NONE; + } + EV_END; +} + +static int ev_napsta_lie(Ev *c) { + EV_BEGIN; + SAY(FACE_NONE, "* oh...^2 it's you...|* i was just lying here...|* ...^2 i'll get out of your\n way..."); + for (c->v[0] = 255; c->v[0] > 0; c->v[0] -= 15) { + obj_get(ACTOR_NAPSTA)->alpha = (uint8_t)c->v[0]; + WAIT(1); + } + obj_get(ACTOR_NAPSTA)->kind = OBJ_NONE; + set_flag(F_NAPSTA_LIE, 1); + EV_END; +} + +static int ev_web(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (c->v[0] == 0) NARRATE("* (There's a note on the web.)\n* \"Spider Donut: 7G\"|* Leave 7G in the web?@Yes@No"); + else NARRATE("* (There's a note on the web.)\n* \"Spider Cider: 18G\"|* Leave 18G in the web?@Yes@No"); + if (CHOICE() != 0) return 1; + { + int cost = c->v[0] ? 18 : 7; + if (sv.gold < cost) { + NARRATE("* You didn't have enough gold."); + return 1; + } + if (item_count() >= NUM_ITEMS) { + NARRATE("* You are carrying too many\n items."); + return 1; + } + sv.gold = (uint16_t)(sv.gold - cost); + item_add(c->v[0] ? ITEM_SPIDER_CIDER : ITEM_SPIDER_DONUT); + set_flag(c->v[0] ? F_CIDER_BOUGHT : F_DONUT_BOUGHT, 1); + } + if (c->v[0] == 0) NARRATE("* Some spiders crawled down\n and gave you a donut."); + else NARRATE("* Some spiders crawled down\n and gave you a jug."); + EV_END; +} + +static int ev_froggit(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + switch (c->v[0]) { + case 0: + NARRATE("* Ribbit, ribbit.|* (Excuse me, human.)|* (Did you know you can press\n [BACK] to read text faster?)|* (Some say it's rude, but\n the words won't mind.)"); + break; + case 1: + NARRATE("* Ribbit, ribbit.|* (Hey, human.)|* (Have you seen the key with\n a 4 on your calculator?)|* (I'm told 4 means \"four\n frogs.\")|* (But I only see three frogs\n in this room...)"); + break; + case 2: + if (!flag(F_FROGGIT_YELLOW)) + NARRATE("* Ribbit, ribbit.|* (When a monster's name is\n #YYELLOW#X, you can SPARE it.)|* (Some think that makes\n things too easy.)|* (Shall I tell everyone to\n stop using yellow names?)@Yes@No"); + else if (flag(F_FROGGIT_YELLOW) == 1) + NARRATE("* Ribbit, ribbit.|* (Since I told everyone not\n to use yellow names, everyone\n threw theirs out.)|* (Shall I ask them to use\n #PPINK#X names instead?)@Yes@No"); + else + NARRATE("* Ribbit, ribbit.|* (Pink names...^2 Or should\n everyone go back to\n #YYELLOW#X?)@Yellow@Pink"); + if (flag(F_FROGGIT_YELLOW) == 2) set_flag(F_FROGGIT_YELLOW, CHOICE() == 0 ? 0 : 2); + else if (CHOICE() == 0) set_flag(F_FROGGIT_YELLOW, flag(F_FROGGIT_YELLOW) + 1); + NARRATE("* Ribbit."); + break; + case 3: + NARRATE("* Ribbit, ribbit.|* (I saw #BTORIEL#X come out of\n here just a little while\n ago.)|* (She was carrying some\n groceries.)|* (I didn't ask what they were\n for...)|* (We're all too intimidated\n to talk to her.)"); + break; + } + EV_END; +} + +static int ev_item(Ev *c) { + EV_BEGIN; + if (!c->self) return 1; + if (item_count() >= NUM_ITEMS) { + NARRATE("* (You're carrying too much.)"); + return 1; + } + item_add(c->self->arg); + set_flag(c->self->arg2, 1); + c->v[0] = c->self->arg; + c->self->kind = OBJ_NONE; + SAYF(FACE_NONE, "* (You got the %s.)", item_info(c->v[0])->name); + EV_END; +} + +static int ev_one_switch(Ev *c) { + EV_BEGIN; + if (flag(F_ONESWITCH)) { + NARRATE("* (The switch is already\n flipped.)"); + return 1; + } + set_flag(F_ONESWITCH, 1); + if (c->self) c->self->frame = 1; + NARRATE("* (You flipped the switch.)\n* (Somewhere, spikes lowered.)"); + EV_END; +} + +static int ev_veggie(Ev *c) { + EV_BEGIN; + NARRATE("* (It's a vegetable.)|* (...it looks back at you.)"); + BATTLE(FORM_VEGETOID); + if (c->self) c->self->kind = OBJ_NONE; + EV_END; +} + +static int ev_toriel_tree(Ev *c) { + Obj *t = obj_find(ACTOR_TORIEL); + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + if (!t) return 1; + SAY(FACE_TORIEL, "`0* Hello?\n* This is TORIEL.|`7* ...!"); + t = obj_get(ACTOR_TORIEL); + t->spr[0] = SPR_TORIEL_D; + t->flags |= OF_WALKANIM; + WALK(t, 8996, pl.y - 52, 3); + SAY(FACE_TORIEL, "`7* How did you get here, my\n child?|`3* Are you hurt?"); + if (sv.hp >= sv.maxhp) SAY(FACE_TORIEL, "`0* Not a scratch...\n* Impressive!|`1* But still..."); + else if (sv.hp > 2) SAY(FACE_TORIEL, "`0* There, there, I will heal\n you."); + else SAY(FACE_TORIEL, "`5* Who did this to you?\n* You will get an apology."); + sv.hp = sv.maxhp; + SAY(FACE_TORIEL, "`1* I should not have left you\n alone for so long.|* It was irresponsible to try\n to surprise you like this.|* Err...|`0* Well, I suppose I cannot\n hide it any longer.|`2* Come, small one!"); + set_flag(F_TORIEL_HOME, 1); + WALK(obj_get(ACTOR_TORIEL), 9006, 3070, 3); + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + EV_END; +} + +int ruins2_event(Ev *c) { + switch (c->id) { + case EV_FALLING: return ev_fall(c); + case EV_COLOR_SWITCH: return ev_color_switch(c); + case EV_CANDY: return ev_candy(c); + case EV_CALL: return ev_call(c); + case EV_ROCK_TALK: return ev_rock_talk(c); + case EV_ROCK_OFF: return ev_rock_off(c); + case EV_NAPSTA_SLEEP: return ev_napsta_sleep(c); + case EV_NAPSTA_LIE: return ev_napsta_lie(c); + case EV_WEB: return ev_web(c); + case EV_FROGGIT: return ev_froggit(c); + case EV_ITEM: return ev_item(c); + case EV_ONE_SWITCH: return ev_one_switch(c); + case EV_VEGGIE: return ev_veggie(c); + case EV_TORIEL_TREE: return ev_toriel_tree(c); + } + return -1; +} diff --git a/games/undertale/src/ruins3.c b/games/undertale/src/ruins3.c new file mode 100644 index 00000000..e2ccb720 --- /dev/null +++ b/games/undertale/src/ruins3.c @@ -0,0 +1,319 @@ +/* The end of the Ruins: Toriel's home, the basement where she goes to destroy the exit, her fight, and Flowey + * waiting past the door. Texts are the game's (the Undertale Wiki's records of them) where known. */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "ruins.h" +#include "save.h" +#include "world.h" + +/* ---------------------------------------------------------------- the rooms' things */ +void ruins3_setup(int room, int from) { + (void)from; + switch (room) { + case ROOM_TORHOUSE1: + obj_sign(8880, 2740, 24, 22, "* (Inside is an old calendar\n from the beginning of 201X.)"); + obj_sign(9100, 2728, 44, 24, "* (It's a bookshelf.)\n* (The books are worn out.)"); + if (flag(F_TORIEL_HOME) && !flag(F_HOME_TOUR)) { + obj_toriel(8996, 2800, DIR_DOWN); + event_start(EV_HOME_TOUR, NULL); + } + if (!flag(F_TORIEL_BASEMENT)) obj_trigger(9078, 2734, 12, 28, EV_STAIRS, ACTOR_TRIGGER); + break; + case ROOM_TORHOUSE2: { + bool reading = flag(F_HOME_TOUR) && !flag(F_TORIEL_BASEMENT); + Obj *ch = obj_deco(reading ? SPR_O_CHAIRIEL : SPR_O_CHAIREMPTY, 8640, 2723, true); + if (ch) ch->name = ACTOR_CHAIR, ch->flags |= OF_TALK, ch->event = EV_TORIEL_CHAIR, obj_set_box(ch, 10, 36, 44, 24); + obj_sign(8673, 2690, 68, 66, flag(F_TORIEL_FIGHT) == 2 ? "* (The fire has gone out.)" + : "* (The fire isn't burning\n hot...)\n* (Just pleasantly warm.)|* (You could put your hand\n inside.)"); + obj_sign(8753, 2692, 60, 60, "* (It's a history book.)|* \"Trapped behind the barrier\n and fearful of further human\n attacks, we retreated.\"|* \"Far, far into the earth we\n walked, until we reached the\n cavern's end.\"|* \"This was our new home, which\n we named...\"|* \"Home.\"|* \"As great as our king is, he\n is pretty lousy at names.\""); + break; + } + case ROOM_TORKITCHEN: + obj_sign(8560, 2540, 38, 62, "* (For some reason, there is a\n brand-name chocolate bar in\n the fridge.)"); + obj_sign(8603, 2560, 22, 40, "* (There's a clump of white\n fur stuck in the drain.)"); + obj_sign(8630, 2580, 22, 22, "* (Inside the cupboard are\n cookie cutters for\n gingerbread monsters.)"); + obj_sign(8654, 2560, 30, 40, flag(F_BED_SLEPT) ? "* (It's a butterscotch-\n cinnamon pie.)\n* (Its size intimidates you.)" + : "* (It's a butterscotch-\n cinnamon pie.)|* (It smells nice, but it's\n too hot to eat.)"); + obj_sign(8687, 2560, 32, 40, flag(F_TORIEL_FIGHT) == 2 ? "* (No one will use this\n anymore...)" + : "* (The stovetop is very\n clean.)\n* (Toriel must use fire magic\n instead.)"); + break; + case ROOM_TORHOUSE3: + obj_sign(9404, 2750, 24, 54, "* (You have seen this type of\n plant before but do not know\n its name.)"); + obj_sign(9492, 2750, 24, 54, "* (You have seen this type of\n plant before but do not know\n its name.)"); + obj_sign(9746, 2775, 30, 47, "* (Room under renovations.)"); + obj_sign(9810, 2770, 60, 52, "* (It's you!)"); + if (flag(F_TORIEL_HOME) && !flag(F_HOME_TOUR)) obj_toriel(9370, 2780, DIR_DOWN); + break; + case ROOM_ASRIELROOM: + { + Obj *b = obj_sign(9368, 2522, 52, 70, NULL); + if (b) b->event = EV_BED; + } + obj_sign(9260, 2498, 62, 34, "* (Toys you aren't interested\n in.)|* (An empty photo frame.)"); + obj_sign(9335, 2498, 32, 48, "* (A box of shoes in many\n different sizes.)"); + if (flag(F_BED_SLEPT) == 1) { + Obj *p = obj_deco(SPR_O_PIESLICE, 9322, 2572, false); + if (p) p->flags |= OF_TALK | OF_BACK, p->event = EV_ITEM, p->arg = flag(F_HARDMODE) ? ITEM_SNAIL_PIE : ITEM_BUTTERSCOTCH_PIE, + p->arg2 = F_PIE; + } + break; + case ROOM_TORIELROOM: + obj_sign(9540, 2520, 74, 92, "* (It's bigger than a\n twin-sized bed.)"); + obj_sign(9592, 2598, 26, 30, "* (Toriel's small chair.)\n* (Its name is Chairiel.)"); + obj_sign(9690, 2528, 62, 36, "* (It's Toriel's diary.)|* (You read the passage...)|* \"Why did the skeleton want a\n friend?\"|* \"Because she was feeling\n BONELY...\""); + obj_sign(9632, 2478, 58, 54, "* (You peek inside...)\n* (Scandalous!)|* (It's TORIEL's sock drawer.)"); + break; + case ROOM_BASEMENT1: + if (flag(F_TORIEL_BASEMENT) && !flag(F_TORIEL_FIGHT)) { + static const int16_t tx[2] = {9030, 9560}; + int k = flag(F_BASEMENT_TALK); + if (k < 2) { + obj_toriel(tx[k], 2300, DIR_RIGHT); + obj_trigger(tx[k] - 70, 2300, 16, 80, EV_BASEMENT_TALK, ACTOR_TRIGGER); + } + } + break; + case ROOM_BASEMENT2: + if (flag(F_TORIEL_BASEMENT) && !flag(F_TORIEL_FIGHT)) { + if (flag(F_BASEMENT_TALK) < 3) { + obj_toriel(10004, 2110, DIR_UP); + obj_trigger(9960, 2170, 140, 14, EV_BASEMENT_TALK, ACTOR_TRIGGER); + } else { + obj_toriel(10004, 1984, DIR_DOWN); + obj_trigger(9960, 2060, 140, 14, EV_TORIEL_DOOR, ACTOR_TRIGGER2); + } + } + break; + case ROOM_RUINSEXIT: + if (!flag(F_FLOWEY_END)) { + static const uint16_t s[4] = {SPR_FLOWEY}; + Obj *f = obj_npc(ACTOR_FLOWEY, s, 10008, 205, DIR_DOWN, 0); + if (f) f->flags = OF_HIDDEN, obj_set_box(f, 4, 16, 17, 8); + obj_trigger(9980, 250, 80, 20, EV_FLOWEY_END, ACTOR_TRIGGER); + } + obj_trigger(9990, 70, 60, 14, EV_RUINS_DOOR, ACTOR_TRIGGER2); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_home_tour(Ev *c) { + EV_BEGIN; + WAIT_UNTIL(!world_fading()); + SAY(FACE_TORIEL, "`0* Do you smell that?|`2* Surprise!|* It is a butterscotch-\n cinnamon pie.|`0* I thought we might\n celebrate your arrival.|* I want you to have a nice\n time living here.|* So I will hold off on snail\n pie for tonight.|`2* Here, I have another\n surprise for you."); + WALK(obj_get(ACTOR_TORIEL), 8996, 2840, 3); + WALK(obj_get(ACTOR_TORIEL), 9200, 2840, 3); + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + PL_WALK(pl.x + 40, pl.y, 3); + FADE_TO(ROOM_TORHOUSE3, 9196, 2836, DIR_RIGHT); + PL_WALK(9330, 2836, 3); + pl.dir = DIR_UP; + SAY(FACE_TORIEL, "`2* A room of your own.|* I hope you like it!"); + WAIT(20); + SAY(FACE_TORIEL, "`7* ...!|`3* Is something burning...?|`0* Um, make yourself at home!"); + WALK(obj_get(ACTOR_TORIEL), 9370, 2840, 4); + WALK(obj_get(ACTOR_TORIEL), 9180, 2840, 5); + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + set_flag(F_HOME_TOUR, 1); + EV_END; +} + +static const char *const chair_opts[2] = {"When can I go home?", "How to exit the RUINS"}; + +static int ev_toriel_chair(Ev *c) { + EV_BEGIN; + if (!flag(F_HOME_TOUR) || flag(F_TORIEL_BASEMENT)) { + NARRATE("* (Seems like the right size\n for Toriel.)"); + return 1; + } + SAY(FACE_TORIEL, "`0* What is it?"); + CHOOSE(chair_opts, 2); + if (CHOSEN() < 0) return 1; + if (CHOSEN() == 0) { + SAY(FACE_TORIEL, "`3* What?|`1* This...^2 this IS your home\n now.|`0* Um...^2 would you like to hear\n about this book I am reading?|* It is called \"72 Uses for\n Snails.\"|* How about it?@Yes@No"); + if (CHOICE() == 0) SAY(FACE_TORIEL, "`2* Here is an exciting snail\n fact.|`0* Did you know that snails\n have a chainsaw-like tongue\n called a radula?"); + else SAY(FACE_TORIEL, "`0* Oh...^2 Alright."); + return 1; + } + SAY(FACE_TORIEL, "`1* ...|* Um...^2 I have to do\n something.|* Stay here."); + set_flag(F_TORIEL_BASEMENT, 1); + if (c->self) c->self->spr[0] = SPR_O_CHAIRIELGETUP; + for (c->v[0] = 0; c->v[0] < 6; c->v[0]++) { + obj_get(ACTOR_CHAIR)->frame = (uint8_t)c->v[0]; + WAIT(4); + } + obj_get(ACTOR_CHAIR)->frame = 0; + if (c->self) c->self->spr[0] = SPR_O_CHAIREMPTY; + { + Obj *t = obj_toriel(8660, 2760, DIR_RIGHT); + if (t) t->flags &= (uint16_t)~OF_SOLID; + } + WALK(obj_get(ACTOR_TORIEL), 8800, 2780, 4); + WALK(obj_get(ACTOR_TORIEL), 8860, 2780, 4); + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + EV_END; +} + +static int ev_stairs(Ev *c) { + EV_BEGIN; + if (flag(F_TORIEL_BASEMENT)) { + if (c->self) c->self->kind = OBJ_NONE; + return 1; + } + if (!flag(F_HOME_TOUR)) return 1; + SAY(FACE_TORIEL, "`1* Oh, my child...|`0* There is nothing down there\n for you.|* Come, let us go upstairs."); + PL_WALK(pl.x + 14, pl.y + 14, 2); + EV_END; +} + +static int ev_bed(Ev *c) { + EV_BEGIN; + NARRATE("* (You lie down on the bed.)"); + if (!flag(F_BED_SLEPT) && !flag(F_TORIEL_BASEMENT)) set_flag(F_BED_SLEPT, 1); + sv.hp = sv.maxhp; + world_fade_hold(g_room, 9376, 2590, DIR_DOWN, 90); + WAIT_UNTIL(!world_fading()); + EV_END; +} + +static int ev_basement_talk(Ev *c) { + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + obj_get(ACTOR_TORIEL)->dir = DIR_LEFT; + switch (flag(F_BASEMENT_TALK)) { + case 0: + SAY(FACE_TORIEL, "`0* You wish to know how to\n return \"home,\" do you not?|* Ahead of us lies the end of\n the RUINS.|* A one-way exit to the rest\n of the underground.|`6* I am going to destroy it.|* No one will ever be able to\n leave again.|`0* Now be a good child and go\n upstairs."); + break; + case 1: + SAY(FACE_TORIEL, "`6* Every human that falls down\n here meets the same fate.|* I have seen it again and\n again.|* They come.|* They leave.|* They die.|* You naive child...|* If you leave the RUINS...|* They...^2 #RASGORE#X...^2 will kill\n you.|* I am only protecting you,\n do you understand?|* ...^2 Go to your room."); + break; + default: + obj_get(ACTOR_TORIEL)->dir = DIR_DOWN; + SAY(FACE_TORIEL, "`6* Do not try to stop me.|* This is your final warning."); + break; + } + set_flag(F_BASEMENT_TALK, flag(F_BASEMENT_TALK) + 1); + if (g_room == ROOM_BASEMENT1 && flag(F_BASEMENT_TALK) == 1) { + /* on ahead, to wait further down */ + obj_get(ACTOR_TORIEL)->dir = DIR_RIGHT; + WALK(obj_get(ACTOR_TORIEL), 9560, 2300, 4); + obj_get(ACTOR_TORIEL)->dir = DIR_RIGHT; + obj_trigger(9490, 2300, 16, 80, EV_BASEMENT_TALK, ACTOR_TRIGGER); + return 1; + } + if (g_room == ROOM_BASEMENT1) { + WALK(obj_get(ACTOR_TORIEL), 10120, 2300, 5); + } else { + WALK(obj_get(ACTOR_TORIEL), 10004, 1984, 4); + obj_get(ACTOR_TORIEL)->dir = DIR_DOWN; + obj_trigger(9960, 2060, 140, 14, EV_TORIEL_DOOR, ACTOR_TRIGGER2); + return 1; + } + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + EV_END; +} + +static int ev_toriel_door(Ev *c) { + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + SAY(FACE_TORIEL, "`6* You want to leave so\n badly?|* Hmph.|* You are just like the\n others.|* There is only one solution\n to this.|* Prove yourself...|* Prove to me you are strong\n enough to survive."); + BATTLE(FORM_TORIEL); + if (flag(F_TORIEL_FIGHT) != 1) { + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + if (!flag(F_TORIEL_FIGHT)) set_flag(F_TORIEL_FIGHT, battle_result() == BR_FLED ? 1 : 2); + return 1; + } + SAY(FACE_TORIEL, "`1* ...|* I understand.|* You would just be unhappy\n trapped down here.|* The RUINS are very small\n once you get used to them.|* It would not be right for\n you to grow up in a place\n like this.|* My expectations...|* My loneliness...|* My fear...|`0* For you, my child...|* I will put them aside."); + /* she holds Frisk */ + PL_WALK(10010, 2040, 2); + pl.hidden = true; + obj_get(ACTOR_TORIEL)->spr[0] = SPR_O_TORIEL_HUG, obj_get(ACTOR_TORIEL)->dir = DIR_DOWN; + obj_get(ACTOR_TORIEL)->y = 2000; + WAIT(70); + pl.hidden = false; + obj_get(ACTOR_TORIEL)->spr[0] = SPR_TORIEL_D, obj_get(ACTOR_TORIEL)->y = 1984; + SAY(FACE_TORIEL, "`1* If you truly wish to leave\n the RUINS...|* I will not stop you.|* However, when you leave...|* Please do not come back.|`0* I hope you understand."); + WAIT(20); + SAY(FACE_TORIEL, "`0* Goodbye, my child."); + obj_get(ACTOR_TORIEL)->flags &= (uint16_t)~OF_SOLID; + WALK(obj_get(ACTOR_TORIEL), 10040, 2050, 2); + WALK(obj_get(ACTOR_TORIEL), 10040, 2240, 2); + obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; + EV_END; +} + +static const char flowey_spared[] = + "`1* Clever.^2 Verrrryy clever.|* You think you're really\n smart, don't you?|" + "`0* In this world, it's KILL\n or BE killed.|* So you were able to play by\n your own rules.|" + "* You spared the life of a\n single person.|`2* Hee hee hee...|* I bet you feel really\n great.|" + "`1* You didn't kill anybody\n this time.|* But what will you do if you\n meet a relentless killer?|" + "`3* You'll die and you'll die\n and you'll die.|* Until you tire of trying.|* What will you do then?|" + "* Will you kill out of\n frustration?|* Or will you give up\n entirely, and let ME take\n your place?|"; +static const char flowey_killed[] = + "`1* Clever.^2 Verrrryy clever.|* You think you're really\n smart, don't you?|" + "`0* In this world, it's KILL\n or BE killed.|`2* So you did kill her.|* Hee hee hee...|" + "`3* You really are a quick\n learner.|"; +static const char flowey_others[] = + "`1* Clever.^2 Verrrryy clever.|* You think you're really\n smart, don't you?|" + "`0* In this world, it's KILL\n or BE killed.|* You spared her...|" + "`2* ...but you killed everyone\n else on the way.|* Hee hee hee...|"; +static const char flowey_last[] = + "`8* I am the prince of this\n world's future.|`1* Don't worry, my little\n monkey...|" + "* I won't interfere with your\n little quest.|`2* Have fun?^4 Have fun...|`8* Ha ha ha..."; + +static int ev_flowey_end(Ev *c) { + EV_BEGIN; + if (c->self) c->self->kind = OBJ_NONE; + { + Obj *f = obj_get(ACTOR_FLOWEY); + f->flags &= (uint16_t)~OF_HIDDEN, f->spr[0] = SPR_O_FLOWEYGROW, f->frame = 0; + } + for (c->v[0] = 0; c->v[0] < 9; c->v[0]++) { + obj_get(ACTOR_FLOWEY)->frame = (uint8_t)c->v[0]; + WAIT(3); + } + obj_get(ACTOR_FLOWEY)->spr[0] = SPR_FLOWEY, obj_get(ACTOR_FLOWEY)->frame = 0; + if (flag(F_TORIEL_FIGHT) == 2) SAY(FACE_FLOWEY, flowey_killed); + else if (sv.kills) SAY(FACE_FLOWEY, flowey_others); + else SAY(FACE_FLOWEY, flowey_spared); + SAY(FACE_FLOWEY, flowey_last); + obj_get(ACTOR_FLOWEY)->spr[0] = SPR_O_FLOWEYSINK; + for (c->v[0] = 0; c->v[0] < 6; c->v[0]++) { + obj_get(ACTOR_FLOWEY)->frame = (uint8_t)c->v[0]; + WAIT(3); + } + obj_get(ACTOR_FLOWEY)->kind = OBJ_NONE; + set_flag(F_FLOWEY_END, 1); + EV_END; +} + +/* the door out of the Ruins: the rest of the underground is still to come */ +static int ev_ruins_door(Ev *c) { + EV_BEGIN; + set_flag(F_RUINS_EXIT, 1); + sv.room = (int16_t)g_room, sv.x = pl.x, sv.y = (int16_t)(pl.y + 30); + save_write_auto(); + menu_end_open(); + EV_END; +} + +int ruins3_event(Ev *c) { + switch (c->id) { + case EV_HOME_TOUR: return ev_home_tour(c); + case EV_TORIEL_CHAIR: return ev_toriel_chair(c); + case EV_STAIRS: return ev_stairs(c); + case EV_BED: return ev_bed(c); + case EV_BASEMENT_TALK: return ev_basement_talk(c); + case EV_TORIEL_DOOR: return ev_toriel_door(c); + case EV_FLOWEY_END: return ev_flowey_end(c); + case EV_RUINS_DOOR: return ev_ruins_door(c); + } + return -1; +} diff --git a/games/undertale/src/save.c b/games/undertale/src/save.c index 46a9d62d..d6396bd4 100644 --- a/games/undertale/src/save.c +++ b/games/undertale/src/save.c @@ -130,6 +130,7 @@ static bool read_file(const char *name, Save *s) { } bool save_write(void) { return write_file(SAVE_NAME, &sv); } +bool save_write_auto(void) { return write_file(SAVE_NAME, &sv); } bool save_exists(void) { Save s; return read_file(SAVE_NAME, &s); diff --git a/games/undertale/src/save.h b/games/undertale/src/save.h index fc9b6aec..d40fc1cd 100644 --- a/games/undertale/src/save.h +++ b/games/undertale/src/save.h @@ -5,6 +5,7 @@ #include "game.h" void save_restore_copy(void); bool save_write(void); +bool save_write_auto(void); /* the game's own SAVE at certain moments (sv's room and place set) */ bool save_exists(void); bool save_load(void); bool save_peek(Save *s); /* the SAVE's facts, without loading it */ diff --git a/games/undertale/src/text.c b/games/undertale/src/text.c index 1117eca6..d636eea4 100644 --- a/games/undertale/src/text.c +++ b/games/undertale/src/text.c @@ -257,8 +257,8 @@ void text_set_top(int top) { box_top = top; } void text_open(int face, const char *s) { box_face = face; - int tx = face ? 76 : 22; - wrap_width = face ? 300 - tx - 6 : 300 - tx - 8; + int tx = face ? 68 : 22; + wrap_width = face ? 301 - tx : 300 - tx - 8; box_at_top = box_top >= 0 ? box_top : (pl.y + 15 - cam_y > 130); writer_start(&box, s, tx, (box_at_top ? 5 : 160) + 11, FONT_MAIN); box_open = true; @@ -272,11 +272,36 @@ void text_openf(int face, const char *fmt, ...) { text_open(face, fmt_buf); } +static const char *const *menu_opts; +static int menu_n, menu_sel, menu_cols; /* long options: one a row */ +void text_open_menu(const char *const *opts, int n) { + menu_opts = opts, menu_n = n, menu_sel = 0, menu_cols = 2; + for (int i = 0; i < n; i++) + if (strlen(opts[i]) > 15) menu_cols = 1; + box_face = FACE_NONE; + box_at_top = box_top >= 0 ? box_top : (pl.y + 15 - cam_y > 130); + box_open = true; + box.finished = true; +} + bool text_active(void) { return box_open; } int text_choice(void) { return last_choice; } +int text_menu_sel(void) { return box_open && menu_opts ? menu_sel : box_open && box.choices && box.done ? 100 + box.choice : -1; } void text_update(uint32_t pressed) { if (!box_open) return; + if (menu_opts) { + int k = menu_cols; + if (pressed & K_UP && menu_sel >= k) menu_sel -= k; + if (pressed & K_DOWN && menu_sel + k < menu_n) menu_sel += k; + if (k == 2 && pressed & K_LEFT && menu_sel % 2) menu_sel--; + if (k == 2 && pressed & K_RIGHT && !(menu_sel % 2) && menu_sel + 1 < menu_n) menu_sel++; + if (pressed & (K_Z | K_X)) { + last_choice = pressed & K_Z ? menu_sel : -1; + menu_opts = NULL, box_open = false; + } + return; + } int ch = box.choice; bool had = box.choices && box.done; if (!writer_update(&box, pressed)) { @@ -294,8 +319,16 @@ void text_draw(void) { int e = box.face_expr < faces[box_face].n ? box.face_expr : 0; const Expr *x = &faces[box_face].e[e]; int fr = writer_talking(&box) ? (box.shown / 2) & 1 : 0; - if (box_face == FACE_TORIEL) gfx_sprite(SPR_FACE_TORIELBODY, 0, 26, y + 13 + 32, 0, 255); - gfx_sprite(x->spr, fr, 26 + x->x, y + 13 + x->y, 0, 255); + if (box_face == FACE_TORIEL) gfx_sprite(SPR_FACE_TORIELBODY, 0, 22, y + 13 + 32, 0, 255); + gfx_sprite(x->spr, fr, 22 + x->x, y + 13 + x->y, 0, 255); + } + if (menu_opts) { + for (int i = 0; i < menu_n; i++) { + int x = 46 + (i % menu_cols) * 136, ty = y + 12 + (i / menu_cols) * 18; + gfx_text(FONT_MAIN, x, ty, menu_opts[i], C_WHITE, 255); + if (i == menu_sel) gfx_sprite(SPR_HEART, 0, x - 12, ty + 6, 0, 255); + } + return; } writer_draw(&box, C_WHITE); } diff --git a/games/undertale/src/text.h b/games/undertale/src/text.h index 6a1cf139..a566b0d7 100644 --- a/games/undertale/src/text.h +++ b/games/undertale/src/text.h @@ -50,7 +50,9 @@ void text_openf(int face, const char *fmt, ...); bool text_active(void); void text_update(uint32_t pressed); void text_draw(void); -int text_choice(void); /* 0 or 1: the last choice made */ -void text_set_top(int top); /* -1: by where Frisk is (the game's way), 0 bottom, 1 top */ +int text_choice(void); /* 0 or 1: the last choice made (a list's: its index, -1 Back) */ +void text_open_menu(const char *const *opts, int n); /* a list of options in the box */ +void text_set_top(int top); +int text_menu_sel(void); /* (the tests) a list's selection, 100 + a page's choice, -1 neither open */ /* -1: by where Frisk is (the game's way), 0 bottom, 1 top */ extern char g_name[8]; /* the fallen human's name */ #endif diff --git a/games/undertale/src/toriel.c b/games/undertale/src/toriel.c index 932acdd1..79ca143f 100644 --- a/games/undertale/src/toriel.c +++ b/games/undertale/src/toriel.c @@ -236,6 +236,12 @@ static void tor_falter(int t) { } void toriel_attack(int atk, int t) { + /* a SOUL down to 2 HP: she stops at once */ + if (atk != ATK_TOR_FALTER && sv.hp <= 2) { + bullets_clear(); + bt.atk_t = bt.atk_len; + return; + } switch (atk) { case ATK_TOR_HANDS: tor_hands(t); break; case ATK_TOR_WAVES: tor_waves(t); break; diff --git a/games/undertale/src/world.c b/games/undertale/src/world.c index 3edcf3d9..fa2a7d98 100644 --- a/games/undertale/src/world.c +++ b/games/undertale/src/world.c @@ -6,8 +6,10 @@ #include "res.h" #include "text.h" #include "world.h" +#include "events.h" void pl_walk_step(void); /* event.c */ +void room_update(void); /* rooms.c */ Obj objs[MAX_OBJS]; Player pl; @@ -94,6 +96,13 @@ Obj *obj_find(int name) { if (objs[i].kind != OBJ_NONE && objs[i].name == name) return &objs[i]; return NULL; } +Obj *obj_get(int name) { + static Obj spare; + Obj *o = obj_find(name); + if (o) return o; + memset(&spare, 0, sizeof spare); + return &spare; +} void obj_clear_all(void) { memset(objs, 0, sizeof objs); } void world_camera(void) { @@ -117,6 +126,17 @@ void world_enter(int r, int x, int y, int dir) { obj_clear_all(); ndoors = room_doors(r, doors, 16); cam_locked = false; + /* a door's spot a little off the floor: the nearest that isn't */ + if (!player_free(pl.x, pl.y)) + for (int d = 1; d <= 24; d++) { + static const int8_t dx[4] = {0, 0, -1, 1}, dy[4] = {1, -1, 0, 0}; + int k; + for (k = 0; k < 4 && !player_free(pl.x + dx[k] * d, pl.y + dy[k] * d); k++) {} + if (k < 4) { + pl.x = (int16_t)(pl.x + dx[k] * d), pl.y = (int16_t)(pl.y + dy[k] * d); + break; + } + } room_setup(r, from); world_camera(); } @@ -125,19 +145,36 @@ void world_enter(int r, int x, int y, int dir) { static struct { int room, x, y, dir; int phase, t; /* 1: going black, 2: coming back */ + int hold; /* frames it stays black (Frisk sleeps) */ + bool walked; /* Frisk walked out: what was happening in the room stops */ } fade; #define FADE_FRAMES 4 void world_fade_to(int r, int x, int y, int dir) { fade.room = r, fade.x = x, fade.y = y, fade.dir = dir; - fade.phase = 1, fade.t = 0; + fade.phase = 1, fade.t = 0, fade.walked = false, fade.hold = 0; +} +void world_fade_hold(int r, int x, int y, int dir, int hold) { + world_fade_to(r, x, y, dir); + fade.hold = hold; } bool world_fading(void) { return fade.phase != 0; } static void fade_step(void) { if (fade.phase == 1) { + if (fade.t >= FADE_FRAMES) { /* in the new room, still black */ + g_fade = 255; + if (fade.hold > 0) fade.hold--; + else fade.phase = 2, fade.t = 0; + return; + } if (++fade.t >= FADE_FRAMES) { + if (fade.walked) event_cancel(); world_enter(fade.room, fade.x, fade.y, fade.dir); + if (fade.hold > 0) { + g_fade = 255; + return; + } fade.phase = 2, fade.t = 0; } g_fade = (uint8_t)(255 * fade.t / FADE_FRAMES); @@ -165,9 +202,31 @@ static void face_from_keys(uint32_t keys, uint32_t pressed) { } } +/* walking into a rock pushes it, a pixel a frame, if there's floor for it (a rock with an event talks back + * instead) */ +static uint32_t pushed_at; +static bool push_rock(int sx, int sy) { + int fx = pl.x + PBX + sx, fy = pl.y + PBY + sy; + for (int i = 0; i < MAX_OBJS; i++) { + Obj *o = &objs[i]; + if (o->kind != OBJ_ROCK || !(o->flags & OF_SOLID)) continue; + if (!boxes_meet(fx, fy, PBW, PBH, o->x + o->bx, o->y + o->by, o->bw, o->bh)) continue; + if (o->event) { + if (!event_running()) event_start(o->event, o); + return false; + } + if (pushed_at == g_frame || o->walking) return false; + if (!world_walkable(o->x + o->bx + sx, o->y + o->by + sy, o->bw, o->bh, i)) return false; + pushed_at = g_frame; + o->x = (int16_t)(o->x + sx), o->y = (int16_t)(o->y + sy); + return player_free(pl.x + sx, pl.y + sy); + } + return false; +} + /* one pixel along an axis, sliding past a corner (diagonal walls are steps of cells) */ static bool step(int sx, int sy, bool slide) { - if (player_free(pl.x + sx, pl.y + sy)) { + if (player_free(pl.x + sx, pl.y + sy) || push_rock(sx, sy)) { pl.x = (int16_t)(pl.x + sx), pl.y = (int16_t)(pl.y + sy); return true; } @@ -270,7 +329,7 @@ void world_update(uint32_t keys, uint32_t pressed) { fade_step(); if (fade.phase == 1) return; objs_update(); - bool busy = event_running() || text_active() || fade.phase; + bool busy = event_blocking() || text_active() || fade.phase; if (!busy && !pl.frozen) { player_move(keys, pressed); /* out of the room's rectangle: into the room that holds his feet */ @@ -278,18 +337,23 @@ void world_update(uint32_t keys, uint32_t pressed) { int r = room_at(fx, fy); if (r >= 0 && r != g_room) { world_fade_to(r, pl.x, pl.y, pl.dir); + fade.walked = true; return; } /* a door */ for (int i = 0; i < ndoors; i++) if (boxes_meet(pl.x + PBX, pl.y + PBY, PBW, PBH, doors[i].x, doors[i].y, doors[i].w, doors[i].h)) { world_fade_to(doors[i].room, doors[i].tx, doors[i].ty, doors[i].dir); + fade.walked = true; return; } - if (pressed & K_Z) interact(); - else touches(); - if (!event_running() && (pressed & K_C)) game_open_menu(); - if (!event_running()) encounter_step(); + room_update(); + if (!event_running()) { + if (pressed & K_Z) interact(); + else touches(); + if (!event_running() && (pressed & K_C)) game_open_menu(); + if (!event_running()) encounter_step(); + } } else { pl_walk_step(); } @@ -304,6 +368,87 @@ typedef struct { static uint16_t obj_sprite(const Obj *o) { return o->spr[o->spr[o->dir] ? o->dir : 0]; } +/* ---------------------------------------------------------------- the room's things */ +Obj *obj_npc(int name, const uint16_t spr[4], int x, int y, int dir, int event) { + Obj *o = obj_new(OBJ_NPC, x, y); + if (!o) return NULL; + for (int i = 0; i < 4; i++) o->spr[i] = spr[i]; + Frame f; + frame_get(spr[0], 0, &f); + o->name = (uint8_t)name, o->dir = (uint8_t)dir, o->event = (uint16_t)event; + o->bx = (int16_t)(f.w / 5), o->bw = (int16_t)(f.w - 2 * (f.w / 5)), o->bh = (int16_t)(f.h / 4 < 8 ? 8 : f.h / 4); + o->by = (int16_t)(f.h - o->bh); + o->flags = OF_SOLID | (event ? OF_TALK : 0) | OF_WALKANIM; + return o; +} +Obj *obj_toriel(int x, int y, int dir) { + static const uint16_t s[4] = {SPR_TORIEL_D, SPR_TORIEL_U, SPR_TORIEL_L, SPR_TORIEL_R}; + Obj *o = obj_npc(ACTOR_TORIEL, s, x, y, dir, 0); + if (o) obj_set_box(o, 6, 44, 20, 12), o->anim_speed = 6; + return o; +} +Obj *obj_sign(int x, int y, int w, int h, const char *text) { + Obj *o = obj_new(OBJ_SIGN, x, y); + if (!o) return NULL; + o->bw = (int16_t)w, o->bh = (int16_t)h, o->flags = OF_TALK, o->event = EV_SIGN, o->text = text; + return o; +} +Obj *obj_save(int x, int y, const char *text) { + Obj *o = obj_new(OBJ_SAVE, x, y); + if (!o) return NULL; + o->spr[0] = SPR_SAVEPOINT, o->flags = OF_TALK | OF_SOLID | OF_ANIM, o->anim_speed = 6; + o->bx = 2, o->by = 4, o->bw = 16, o->bh = 14; + o->event = EV_SAVE, o->text = text; + return o; +} +Obj *obj_deco(uint16_t spr, int x, int y, bool solid) { + Obj *o = obj_new(OBJ_DECO, x, y); + if (!o) return NULL; + Frame f; + frame_get(spr, 0, &f); + o->spr[0] = spr; + o->bx = 0, o->bw = (int16_t)f.w, o->bh = (int16_t)(f.h < 10 ? f.h : 10), o->by = (int16_t)(f.h - o->bh); + if (solid) o->flags |= OF_SOLID; + return o; +} +Obj *obj_trigger(int x, int y, int w, int h, int event, int name) { + Obj *o = obj_new(OBJ_TRIGGER, x, y); + if (!o) return NULL; + o->bw = (int16_t)w, o->bh = (int16_t)h, o->flags = OF_TOUCH, o->event = (uint16_t)event, o->name = (uint8_t)name; + return o; +} +Obj *obj_rock(int x, int y, int name, int event) { + Obj *o = obj_new(OBJ_ROCK, x, y); + if (!o) return NULL; + o->spr[0] = SPR_O_ROCK, o->name = (uint8_t)name, o->event = (uint16_t)event; + o->flags = OF_SOLID | (event ? OF_TALK : 0); + obj_set_box(o, 1, 8, 18, 12); + return o; +} +void obj_spikes_set(Obj *o, bool raised) { + if (!o) return; + o->frame = raised ? 0 : 1; + if (raised) o->flags |= OF_SOLID; + else o->flags &= (uint16_t)~OF_SOLID; +} +Obj *obj_spikes(int x, int y, int cols, int rows, bool raised, int name) { + Obj *o = obj_new(OBJ_SPIKES, x, y); + if (!o) return NULL; + o->spr[0] = SPR_O_SPIKETILE, o->arg = (int16_t)cols, o->arg2 = (int16_t)rows, o->name = (uint8_t)name; + o->bw = (int16_t)(cols * 20), o->bh = (int16_t)(rows * 20); + o->frame = raised ? 0 : 1; + o->flags = (raised ? OF_SOLID : 0) | OF_BACK; + return o; +} +void obj_set_box(Obj *o, int bx, int by, int bw, int bh) { + o->bx = (int16_t)bx, o->by = (int16_t)by, o->bw = (int16_t)bw, o->bh = (int16_t)bh; +} +bool near_frisk(const Obj *o, int d) { + int ox = o->x + o->bx + o->bw / 2, oy = o->y + o->by + o->bh / 2; + int px = pl.x + PBX + PBW / 2, py = pl.y + PBY + PBH / 2; + return abs_i(ox - px) <= d && abs_i(oy - py) <= d; +} + void world_draw(void) { gfx_tiles(cam_x, cam_y); /* the room's objects and Frisk, the lower ones in front */ @@ -324,11 +469,17 @@ void world_draw(void) { order[j] = order[j - 1], order[j - 1] = t; } static const uint16_t frisk[4] = {SPR_FRISK_D, SPR_FRISK_U, SPR_FRISK_L, SPR_FRISK_R}; + if (g_exclaim) gfx_sprite(SPR_O_EXC, 0, pl.x - cam_x, pl.y - 12 - cam_y, 0, 255); for (int i = 0; i < n; i++) { if (order[i].who < 0) { gfx_sprite(frisk[pl.dir], pl.frame, pl.x - cam_x, pl.y - cam_y, 0, 255); } else { const Obj *o = &objs[order[i].who]; + if (o->kind == OBJ_SPIKES) { + for (int r = 0; r < o->arg2; r++) + for (int k = 0; k < o->arg; k++) gfx_sprite(o->spr[0], o->frame, o->x + k * 20 - cam_x, o->y + r * 20 - cam_y, 0, 255); + continue; + } gfx_sprite(obj_sprite(o), o->frame, o->x - cam_x, o->y - cam_y, 0, o->alpha); } } diff --git a/games/undertale/src/world.h b/games/undertale/src/world.h index c8a5f137..150a7314 100644 --- a/games/undertale/src/world.h +++ b/games/undertale/src/world.h @@ -42,6 +42,7 @@ typedef struct { uint8_t alpha; uint8_t name; /* an ACTOR_* (scripts find it by it) */ int16_t fx, fy; /* fractions (1/16 pixel) for slow walks */ + const char *text; /* what a sign or a plain thing says */ } Obj; extern Obj objs[MAX_OBJS]; @@ -66,9 +67,23 @@ bool world_walkable(int x, int y, int w, int h, int ignore); /* a box on the m void world_camera(void); /* follows Frisk, inside the room */ Obj *obj_new(int kind, int x, int y); Obj *obj_find(int name); +Obj *obj_get(int name); /* obj_find, or a spare object when there is none (events can't crash on it) */ void obj_clear_all(void); +/* the room's things, made by rooms.c */ +Obj *obj_npc(int name, const uint16_t spr[4], int x, int y, int dir, int event); +Obj *obj_toriel(int x, int y, int dir); +Obj *obj_sign(int x, int y, int w, int h, const char *text); +Obj *obj_save(int x, int y, const char *text); +Obj *obj_deco(uint16_t spr, int x, int y, bool solid); +Obj *obj_trigger(int x, int y, int w, int h, int event, int name); +Obj *obj_spikes(int x, int y, int cols, int rows, bool raised, int name); +void obj_spikes_set(Obj *o, bool raised); +Obj *obj_rock(int x, int y, int name, int event); /* pushed by walking into it; with an event, it talks */ +void obj_set_box(Obj *o, int bx, int by, int bw, int bh); +bool near_frisk(const Obj *o, int d); /* within d pixels (their feet) */ /* the room fades out, then in: room changes in the middle */ void world_fade_to(int room, int x, int y, int dir); +void world_fade_hold(int room, int x, int y, int dir, int hold); /* black for `hold` frames in the middle */ bool world_fading(void); extern uint8_t g_fade; /* 0 clear, 255 black: drawn over the room */ #endif diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py new file mode 100644 index 00000000..1c81bf1f --- /dev/null +++ b/games/undertale/tests/check.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +"""Checks of Undertale on a computer (make test): the host build, with +AddressSanitizer and UBSan, through the menus, every battle, the saves and +the whole Ruins. + + python3 tests/check.py build/play [--quick] + +--quick skips playing the whole Ruins (the longest part).""" +import os +import re +import shutil +import subprocess +import sys +import tempfile + +PLAY = sys.argv[1] if len(sys.argv) > 1 else "build/play" +HERE = os.path.dirname(os.path.abspath(__file__)) +QUICK = "--quick" in sys.argv +failures = [] +ENV = dict(os.environ, ASAN_OPTIONS="detect_leaks=0", UBSAN_OPTIONS="halt_on_error=1:print_stacktrace=1") + +# the flags the checks look at (src/flags.h) +FLAGS = {} +src = open(os.path.join(HERE, "..", "src", "flags.h")).read() +body = re.sub(r"/\*.*?\*/", "", src[src.index("enum {") + 6:src.rindex("FLAG_COUNT")], flags=re.S) +for i, n in enumerate(n.strip() for n in body.split(",") if n.strip()): + FLAGS[n] = i + +MODE_WORLD, MODE_BATTLE, MODE_END = 2, 3, 8 + + +def run(args, frames, saves=None, what=""): + """Plays (in a save folder, a new one if None); returns the end state: mode, room, flags, items...""" + own = saves is None + if own: + saves = tempfile.mkdtemp(prefix="undertale_check_") + p = subprocess.run([PLAY, "--saves", saves, "--frames", str(frames)] + args, capture_output=True, text=True, + env=ENV, timeout=900) + if own: + shutil.rmtree(saves, ignore_errors=True) + if p.returncode or "runtime error" in p.stderr or "AddressSanitizer" in p.stderr: + failures.append(f"{what or args}: crashed or a sanitizer error\n{p.stderr[-2000:]}") + return None + m = re.search(r"END mode (\d+) room (-?\d+) at (-?\d+),(-?\d+) hp (-?\d+) lv (\d+) gold (\d+) kills (\d+) path (\w+)", + p.stdout) + if not m: + failures.append(f"{what}: no end state\n{p.stdout[-500:]}") + return None + s = dict(zip(("mode", "room", "x", "y", "hp", "lv", "gold", "kills"), map(int, m.groups()[:8]))) + s["path"] = m.group(9) + fl = re.search(r"FLAGS(.*)", p.stdout).group(1).split() + s["flags"] = {int(a): int(b) for a, b in (f.split("=") for f in fl)} + s["items"] = [int(v) for v in re.search(r"ITEMS(.*)", p.stdout).group(1).split()] + return s + + +def flag(s, name): + return s["flags"].get(FLAGS["F_" + name], 0) + + +def check(cond, msg): + if not cond: + failures.append(msg) + + +# the intro, the title, the instructions, naming the fallen human "A", Done, Yes: the flowers +keys = "30:z,60:z,90:z,120:z," + ",".join("%d:down" % (150 + 10 * i) for i in range(8)) + \ + ",230:right,240:right,250:z,290:right,300:z" +s = run(["--keys", keys], 700, what="the menus to a new game") +check(s and s["mode"] == MODE_WORLD and s["room"] == 0 and s["hp"] == 20, f"the menus did not start a game: {s}") + +# every battle of the Ruins, fled from (Toriel's can't be: she is spared) and fought to the end +for form in range(18): + s = run(["--god", "--battle", str(form), "--path", "flee"], 1500, what=f"battle {form}, fleeing") + if form == 17: + continue + check(s and s["mode"] == MODE_WORLD, f"battle {form}: fleeing did not end it: {s}") +for form in (2, 3, 6, 10, 12): + s = run(["--god", "--battle", str(form), "--path", "fight"], 3000, what=f"battle {form}, fighting") + check(s and s["mode"] == MODE_WORLD and s["kills"] >= 1, f"battle {form}: FIGHT did not win it: {s}") +s = run(["--god", "--battle", "16", "--path", "act:3"], 6000, what="Napstablook, cheered up") +check(s and s["mode"] == MODE_WORLD and s["kills"] == 0, f"Napstablook was not spared by cheering: {s}") + +# the leaf pile's SAVE, then Continue from the title +d = tempfile.mkdtemp(prefix="undertale_check_") +s = run(["--name", "Frisk", "--noenc", "--room", "8", "--at", "5012,4498", "--path", "u;z;w20;z;w30;x"], 300, saves=d, + what="saving at the leaf pile") +check(os.path.exists(d + "/undertale.sav") and os.path.exists(d + "/undertale_saves.py"), "the SAVE Point did not save") +s = run(["--keys", "30:z,60:z,90:z,120:z"], 300, saves=d, what="Continue") +check(s and s["mode"] == MODE_WORLD and s["room"] == 8, f"Continue did not go back to the leaf pile: {s}") +# Home keeps the moment; the next start is back there +s = run(["--keys", "30:z,60:z,90:z,120:z,130-170:right,200:home"], 300, saves=d, what="Home") +s = run([], 30, saves=d, what="back after Home") +check(s and s["mode"] == MODE_WORLD and s["room"] == 8 and s["x"] > 5000, f"Home did not bring the game back: {s}") +shutil.rmtree(d, ignore_errors=True) + +# the whole Ruins, the friendly way: Flowey, Toriel's puzzles, the candy, the rocks, Napstablook, the switches, +# Toriel's home, her fight spared, Flowey's judgement, the door out +if not QUICK: + s = run(["--name", "Frisk", "--noenc", "--god", "--path-file", os.path.join(HERE, "ruins.path")], 40000, + what="the Ruins") + check(s and s["mode"] == MODE_END, f"the Ruins did not end at their door: {s}") + if s: + for name, v in (("FLOWEY_MET", 1), ("DUMMY", 1), ("RUINS5_DONE", 1), ("RUINS6_DONE", 1), ("PHONE", 1), + ("RUINS9_ROCK", 1), ("RUINS11_ROCK", 5), ("NAPSTA", 1), ("ONESWITCH", 1), ("ROTATE4", 1), + ("TORIEL_HOME", 1), ("HOME_TOUR", 1), ("TORIEL_BASEMENT", 1), ("BASEMENT_TALK", 3), + ("TORIEL_FIGHT", 1), ("FLOWEY_END", 1), ("RUINS_EXIT", 1)): + check(flag(s, name) == v, f"the Ruins: F_{name} is {flag(s, name)}, not {v}") + check(s["kills"] == 0, f"the Ruins: {s['kills']} killed on the friendly way") + check(s["items"].count(1) == 2, f"the Ruins: not the two pieces of Monster Candy: {s['items']}") + +if failures: + print("\n".join("FAIL " + f for f in failures)) + sys.exit(1) +print("all checks passed") diff --git a/games/undertale/tests/play.c b/games/undertale/tests/play.c index 2e339f4f..1f369196 100644 --- a/games/undertale/tests/play.c +++ b/games/undertale/tests/play.c @@ -33,12 +33,125 @@ static int nholds; #include "../src/event.h" #include "../src/text.h" static char path_buf[65536]; +extern bool g_no_encounters; static char *path_at; static int path_wait, path_stuck, path_last_x, path_last_y, path_room = -1; +/* ---------------------------------------------------------------- "go:x,y": a way there (Frisk's top-left + * on a 4-pixel grid, over the floor and around the solid things), found once, then walked */ +#define GO_R 400 /* cells each way: 1600 pixels */ +#define GO_N (2 * GO_R + 1) +static int16_t go_wp[512][2]; +static int go_n, go_i; +static bool go_free(int x, int y) { return world_walkable(x + 3, y + 20, 14, 9, -1); } +static bool go_plan(int tx, int ty) { + static int16_t prev[GO_N * GO_N]; + static int queue[GO_N * GO_N]; + int ox = pl.x, oy = pl.y; + for (int i = 0; i < GO_N * GO_N; i++) prev[i] = -2; + int s = GO_R * GO_N + GO_R, qh = 0, qt = 0, best = s, bestd = 1 << 30; + prev[s] = -1, queue[qt++] = s; + while (qh < qt) { + int c = queue[qh++], cx = c % GO_N - GO_R, cy = c / GO_N - GO_R; + int d = abs(ox + cx * 4 - tx) + abs(oy + cy * 4 - ty); + if (d < bestd) bestd = d, best = c; + if (d <= 3) break; + static const int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1}; + for (int k = 0; k < 4; k++) { + int nx = cx + dx[k], ny = cy + dy[k]; + if (nx < -GO_R || nx > GO_R || ny < -GO_R || ny > GO_R) continue; + int n = (ny + GO_R) * GO_N + nx + GO_R; + if (prev[n] != -2 || !go_free(ox + nx * 4, oy + ny * 4)) continue; + prev[n] = (int16_t)k, queue[qt++] = n; + } + } + /* back from the end, a waypoint where the way turns */ + int16_t rev[GO_N * 2][2]; + int nr = 0, c = best, last = -1; + while (prev[c] >= 0 && nr < GO_N * 2) { + int k = prev[c], cx = c % GO_N - GO_R, cy = c / GO_N - GO_R; + if (k != last) rev[nr][0] = (int16_t)(ox + cx * 4), rev[nr][1] = (int16_t)(oy + cy * 4), nr++, last = k; + static const int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1}; + c = (cy - dy[k] + GO_R) * GO_N + cx - dx[k] + GO_R; + } + go_n = 0; + for (int i = nr - 1; i >= 0 && go_n < 512; i--) go_wp[go_n][0] = rev[i][0], go_wp[go_n][1] = rev[i][1], go_n++; + if (nr && go_n < 512) { + /* (the last turn's waypoint is where the turn starts: the end too) */ + int ex = ox + (best % GO_N - GO_R) * 4, ey = oy + (best / GO_N - GO_R) * 4; + go_wp[go_n][0] = (int16_t)ex, go_wp[go_n][1] = (int16_t)ey, go_n++; + } + go_i = 0; + if (bestd > 3) fprintf(stderr, "go: no way to %d,%d, as near as %d px\n", tx, ty, bestd); + if (getenv("GO_DEBUG")) + for (int i = 0; i < go_n; i++) fprintf(stderr, "go %d: %d,%d\n", i, go_wp[i][0], go_wp[i][1]); + return go_n > 0; +} + /* the keys the path holds this frame (0: it's done or waiting) */ static uint32_t path_keys(int f) { if (!path_at || !*path_at) return 0; + /* a battle or a choice that came on the way to a point: the step after it is for it, if it says so */ + { + char *e = strchr(path_at, ';'); + if (e) { + const char *n = e + 1; + bool nb = !strncmp(n, "fight", 5) || !strncmp(n, "spare", 5) || !strncmp(n, "bt", 2) || !strncmp(n, "act:", 4) || + !strncmp(n, "flee", 4); + bool hb = !strncmp(path_at, "fight", 5) || !strncmp(path_at, "spare", 5) || !strncmp(path_at, "bt", 2) || + !strncmp(path_at, "act:", 4) || !strncmp(path_at, "flee", 4) || !strncmp(path_at, "pick:", 5); + if (!hb && ((g_mode == MODE_BATTLE && nb) || (g_mode == MODE_WORLD && text_menu_sel() >= 0 && !strncmp(n, "pick:", 5)))) + path_at = e + 1; + } + } + /* "pick:N": the option N of the next list or choice */ + if (!strncmp(path_at, "pick:", 5) && g_mode == MODE_WORLD) { + int n = atoi(path_at + 5), sel = text_menu_sel(); + if (f & 1) return 0; + if (sel < 0) return text_active() ? K_Z : 0; + if (sel >= 100) sel -= 100; + if (sel == n) { + char *e = strchr(path_at, ';'); + path_at = e ? e + 1 : path_at + strlen(path_at); + return K_Z; + } + return sel < n ? (text_menu_sel() >= 100 ? K_RIGHT : K_DOWN) : (text_menu_sel() >= 100 ? K_LEFT : K_UP); + } + /* a text in the way: read on (Z every other frame) */ + if (g_mode == MODE_WORLD && text_active()) return (f & 1) ? K_Z : 0; + /* in a battle: "fight" FIGHTs, "spare" spares, "act:N" picks the ACT N (1: the first after Check) each turn, + * "bt" (a scripted battle) reads on; Z on whatever else comes (the bar, the texts). A battle the path didn't + * expect: Frisk flees it */ + bool btok = !strncmp(path_at, "fight", 5) || !strncmp(path_at, "spare", 5) || !strncmp(path_at, "bt", 2) || + !strncmp(path_at, "act:", 4) || !strncmp(path_at, "flee", 4); + static int idle; + if (g_mode == MODE_BATTLE) { + idle = 0; + if (battle_over()) return 0; + if (f & 1) return 0; + if (bt.scripted) return K_Z; /* (Flowey's: read on) */ + int want = !btok || !strncmp(path_at, "flee", 4) || !strncmp(path_at, "spare", 5) ? 3 : !strncmp(path_at, "act:", 4) ? 1 : 0; + int mercy = (!btok || !strncmp(path_at, "flee", 4)) && !bt.no_flee ? 1 : 0; + switch (battle_ui()) { + case BUI_MENU: return bt.button < want ? K_RIGHT : bt.button > want ? K_LEFT : K_Z; + case BUI_ACTS: { + int n = atoi(path_at + 4); + return bt.act + 2 <= n ? K_DOWN : bt.act < n ? K_RIGHT : bt.act - 2 >= n ? K_UP : bt.act > n ? K_LEFT : K_Z; + } + case BUI_MERCY: return bt.mercy < mercy ? K_DOWN : bt.mercy > mercy ? K_UP : K_Z; + case BUI_BAR: return abs(bt.bar_x / FX - 140) < 8 ? K_Z : 0; /* (the middle: the best hit) */ + default: return K_Z; + } + } + if (btok) { + /* (it waits for the battle: done when the world has been quiet a while) */ + if (g_mode == MODE_WORLD && !event_blocking() && !text_active() && ++idle > 30) { + char *e = strchr(path_at, ';'); + path_at = e ? e + 1 : path_at + strlen(path_at); + idle = 0; + } + return (f & 1) ? K_Z : 0; + } if (path_wait > 0) { path_wait--; return 0; @@ -53,25 +166,65 @@ static uint32_t path_keys(int f) { path_wait = 1; return tok[0] == 'z' ? K_Z : tok[0] == 'x' ? K_X : K_C; } + /* u d l r: a key's press (to face something) */ + if (!tok[1] && strchr("udlr", tok[0])) { + path_at = next; + path_wait = 1; + return tok[0] == 'u' ? K_UP : tok[0] == 'd' ? K_DOWN : tok[0] == 'l' ? K_LEFT : K_RIGHT; + } if (tok[0] == 'w') { path_wait = atoi(tok + 1); path_at = next; return 0; } if (!strcmp(tok, "talk")) { - if (!text_active() && !event_running() && g_mode == MODE_WORLD && !world_fading()) { + if (!text_active() && !event_blocking() && g_mode == MODE_WORLD && !world_fading()) { path_at = next; return 0; } return (f & 1) ? K_Z : 0; } + if (!strncmp(tok, "go:", 3)) { + static char *planned; + if (g_mode != MODE_WORLD || text_active() || event_blocking() || world_fading()) return 0; + int gx, gy; + sscanf(tok + 3, "%d,%d", &gx, &gy); + static int planned_room; + if (planned != path_at || planned_room != g_room) { + planned = path_at, planned_room = g_room; + if (!go_plan(gx, gy)) { + path_at = next, planned = NULL; + return 0; + } + } + while (go_i < go_n && abs(go_wp[go_i][0] - pl.x) <= 1 && abs(go_wp[go_i][1] - pl.y) <= 1) go_i++; + /* (a waypoint on the axis it's walking: it may step over it by a pixel or two) */ + if (go_i >= go_n) { + path_at = next, planned = NULL; + return 0; + } + if (pl.x == path_last_x && pl.y == path_last_y) { + if (++path_stuck > 30) { + planned = NULL, path_stuck = 0; /* (something moved in the way: plan again) */ + return 0; + } + } else + path_stuck = 0; + path_last_x = pl.x, path_last_y = pl.y; + /* one axis at a time, as the way was found */ + int ddx = go_wp[go_i][0] - pl.x, ddy = go_wp[go_i][1] - pl.y; + if (abs(ddx) > 1) return ddx > 0 ? K_RIGHT : K_LEFT; + return ddy > 0 ? K_DOWN : K_UP; + } int x, y; if (sscanf(tok, "%d,%d", &x, &y) != 2) { path_at = next; return 0; } - if (g_mode != MODE_WORLD || text_active() || event_running() || world_fading()) return 0; - /* a door took him to another room: that point is reached */ + if (g_mode != MODE_WORLD || text_active() || event_blocking() || world_fading()) return 0; + /* a door took him to another room on the way to this point: it is reached */ + static char *room_step; + if (room_step != path_at) room_step = path_at, path_room = g_room; if (path_room >= 0 && g_room != path_room) { path_room = g_room; path_at = next; @@ -127,11 +280,29 @@ int main(int argc, char **argv) { int frames = 120, room = -1, ax = 0, ay = 0, battle = -1; const char *name = NULL; int nflags = 0, fl[64][2]; - bool trace = false, coll = false; + bool trace = false, coll = false, god = false; for (int i = 1; i < argc; i++) { if (!strcmp(argv[i], "--frames") && i + 1 < argc) frames = atoi(argv[++i]); else if (!strcmp(argv[i], "--keys") && i + 1 < argc) parse_keys(argv[++i]); else if (!strcmp(argv[i], "--path") && i + 1 < argc) snprintf(path_buf, sizeof path_buf, "%s", argv[++i]), path_at = path_buf; + else if (!strcmp(argv[i], "--path-file") && i + 1 < argc) { + /* a path one step a line; # starts a comment */ + FILE *pf = fopen(argv[++i], "r"); + if (!pf) fprintf(stderr, "no %s\n", argv[i]), exit(2); + char line[256]; + size_t n = 0; + while (fgets(line, sizeof line, pf)) { + char *h = strchr(line, '#'); + if (h) *h = 0; + char *a = line, *e = line + strlen(line); + while (*a == ' ' || *a == '\t') a++; + while (e > a && (e[-1] == '\n' || e[-1] == '\r' || e[-1] == ' ' || e[-1] == '\t')) *--e = 0; + if (!*a) continue; + n += (size_t)snprintf(path_buf + n, sizeof path_buf - n, "%s%s", n ? ";" : "", a); + } + fclose(pf); + path_at = path_buf; + } else if (!strcmp(argv[i], "--shots") && i + 1 < argc) shots = argv[++i]; else if (!strcmp(argv[i], "--out") && i + 1 < argc) out = argv[++i]; else if (!strcmp(argv[i], "--saves") && i + 1 < argc) saves = argv[++i]; @@ -143,6 +314,8 @@ int main(int argc, char **argv) { sscanf(argv[++i], "%d=%d", &fl[nflags][0], &fl[nflags][1]); nflags++; } else if (!strcmp(argv[i], "--trace")) trace = true; + else if (!strcmp(argv[i], "--noenc")) g_no_encounters = true; + else if (!strcmp(argv[i], "--god")) god = true; else if (!strcmp(argv[i], "--coll")) coll = true; else fprintf(stderr, "unknown option %s\n", argv[i]), exit(2); } @@ -154,8 +327,10 @@ int main(int argc, char **argv) { host_save_dir(saves); ut_bin = ut_data; game_init(); - if (room >= 0 || name) { + if (room >= 0 || name || battle >= 0) { game_new(name ? name : "Frisk"); + for (int i = 0; i < nflags; i++) set_flag(fl[i][0], fl[i][1]); /* (before the room is set up) */ + if (room < 0 && battle >= 0) room = 0; /* (a battle comes back to a room) */ if (room >= 0) { if (!ax && !ay) { RoomInfo ri; @@ -174,10 +349,11 @@ int main(int argc, char **argv) { if (f >= holds[i].a && f <= holds[i].b) k |= holds[i].k; if (!k) k = path_keys(f); host_keys = k; + if (god && g_mode == MODE_BATTLE && sv.hp < sv.maxhp) sv.hp = sv.maxhp; /* (--god: the SOUL can't be hurt) */ host_time += 33; game_frame(k); game_draw(); - if (trace) printf("%d mode %d room %d frisk %d,%d cam %d,%d hp %d\n", f, g_mode, g_room, pl.x, pl.y, cam_x, cam_y, sv.hp); + if (trace) printf("%d mode %d room %d frisk %d,%d cam %d,%d hp %d ui %d btn %d keys %x path %.12s\n", f, g_mode, g_room, pl.x, pl.y, cam_x, cam_y, sv.hp, battle_ui(), bt.button, k, path_at ? path_at : ""); char want[16]; snprintf(want, sizeof want, "%d", f); bool shoot = all; @@ -211,5 +387,12 @@ int main(int argc, char **argv) { } } if (gfx_dropped) printf("dropped %d draw commands\n", gfx_dropped); + printf("END mode %d room %d at %d,%d hp %d lv %d gold %d kills %d path %s\nFLAGS", g_mode, g_room, pl.x, pl.y, sv.hp, + sv.lv, sv.gold, sv.kills, path_at && *path_at ? "left" : "done"); + for (int i = 0; i < FLAG_COUNT; i++) + if (sv.flags[i]) printf(" %d=%d", i, sv.flags[i]); + printf("\nITEMS"); + for (int i = 0; i < NUM_ITEMS; i++) printf(" %d", sv.items[i]); + printf("\n"); return 0; } diff --git a/games/undertale/tests/ruins.path b/games/undertale/tests/ruins.path new file mode 100644 index 00000000..e23a6e78 --- /dev/null +++ b/games/undertale/tests/ruins.path @@ -0,0 +1,241 @@ +# The Ruins from the bed of golden flowers to the door out, the friendly way (tests/check.py plays it with +# --name Frisk --noenc --god: no random encounters, the SOUL not hurt). One step a line: x,y walk there; +# go:x,y find the way there; u d l r z x c a key; talk read on; pick:N an option; wN wait; +# fight / spare / flee / act:N / bt how the next battle goes. + +# the flowers, then Flowey +go:608,6036 +608,6020 +go:510,5800 +bt +w40 +talk +go:510,5590 +510,5560 +# the entrance: Toriel by the stairs +go:600,5300 +talk +go:520,5190 +520,5160 +w20 +# the middle road: Toriel's puzzle +go:500,4960 +talk +w30 +go:494,4900 +494,4840 +w20 +# the switches +talk +go:748,4666 +u +z +talk +go:948,4666 +u +z +talk +w40 +talk +go:1100,4732 +# the Dummy: talk to it +talk +go:1278,4700 +r +z +act:1 +w30 +talk +w40 +go:1252,4686 +1252,4650 +w20 +# the blueprint: Toriel goes ahead, a Froggit, then hand in hand over the spikes +go:1520,4480 +w200 +talk +go:1780,4480 +w20 +talk +w60 +talk +w40 +go:2320,4470 +# the long hall: alone, then the pillar +talk +w60 +go:4470,4470 +w20 +talk +w60 +talk +go:4790,4470 +# the leaf pile: Toriel calls; the Froggit's advice; the candy room above +talk +go:4901,4448 +u +z +talk +go:4960,4446 +4960,4420 +w20 +go:4960,4226 +u +z +talk +z +talk +go:4960,4352 +4960,4380 +w20 +# the cracked floor: down through it, out by the right chute +go:5040,4600 +go:5300,4692 +w60 +go:5352,5090 +5352,5060 +w30 +# the first rock: Toriel calls about pie +talk +go:5590,4728 +5700,4728 +w20 +# the leaf puzzle: the second call, then the way through the cracks +talk +go:6250,4700 +6250,4868 +6310,4868 +6310,4790 +6370,4790 +6370,4868 +6430,4868 +6450,4868 +6450,4810 +6520,4810 +# the second rock: the third call, then ask the rock (four times), walking into it +talk +go:6704,4870 +r +r +talk +go:6724,4870 +r +r +talk +go:6724,4850 +r +r +talk +go:6860,4840 +w30 +talk +go:6724,4870 +r +r +talk +go:7000,4840 +# the mouse hole: SAVE +go:7172,4882 +u +z +w20 +z +w30 +x +w20 +# Napstablook: move it with force, then cheer them up +go:7490,4830 +pick:0 +act:3 +w40 +talk +# north to the Froggits' hall +go:7597,4790 +7597,4730 +w30 +go:7900,4542 +u +z +pick:0 +talk +go:8000,4590 +talk +w30 +# the one switch: down the middle crack (between the others), the switch, back up the chute +go:8100,4640 +8460,4640 +8460,4570 +w60 +u +z +talk +go:8505,4960 +8505,4930 +w30 +# the rotating rooms: blue behind the pillar, red, green behind the pillar +go:8970,4880 +8970,4900 +w30 +go:8962,4190 +l +z +talk +go:8640,4340 +go:8400,4206 +u +z +talk +go:8455,4130 +8455,4100 +w30 +go:8466,3765 +l +z +talk +go:8720,3740 +# the crossroads, up to Toriel's tree; then her house +go:9006,3546 +9006,3510 +w30 +go:9006,3380 +talk +w30 +go:9012,3080 +9012,3060 +w30 +talk +w60 +talk +w30 +# the living room: ask her how to leave +go:9190,2840 +go:8840,2860 +go:8664,2764 +u +z +pick:1 +talk +w100 +# the basement: her three talks, then the door +go:9090,2760 +go:9070,2736 +w30 +go:9990,2316 +talk +go:10010,2150 +talk +go:10010,2080 +spare +w30 +talk +w100 +go:10010,2040 +10010,2010 +w30 +# past the door: Flowey, then the way out +go:10010,300 +go:10010,236 +talk +w60 +go:10010,50 +w60 diff --git a/games/undertale/tools/pack.py b/games/undertale/tools/pack.py index d941607b..3da1cbd7 100644 --- a/games/undertale/tools/pack.py +++ b/games/undertale/tools/pack.py @@ -22,6 +22,7 @@ import sys import numpy as np +from scipy import ndimage from PIL import Image, ImageDraw, ImageFont, ImageSequence HERE = os.path.dirname(os.path.abspath(__file__)) @@ -260,13 +261,27 @@ def black_index(self): def patch(self, p): """changes to the map, before rooms are cut from it: ('fill', x, y, w, h, (r, g, b)), - ('copy', sx, sy, w, h, dx, dy) or ('mirror', ...) the same, flipped left to right""" + ('copy', sx, sy, w, h, dx, dy) or ('mirror', ...) the same, flipped left to right, or ('erase', x, y, w, h, + [colours]): what isn't one of the colours takes the colour of the nearest pixel that is (a monster painted + on the floor)""" if p[0] == "fill": _, x, y, w, h, c = p self.idx[y:y + h, x:x + w] = self.color_index(c) elif p[0] == "copy": _, sx, sy, w, h, dx, dy = p self.idx[dy:dy + h, dx:dx + w] = self.idx[sy:sy + h, sx:sx + w].copy() + elif p[0] == "erase": + # the nearest pixel of the colours, looking a little around the rectangle (only it changes) + _, x, y, w, h, cols = p + m = 4 + x0, y0 = max(0, x - m), max(0, y - m) + win = self.idx[y0:y + h + m, x0:x + w + m] + keep = np.isin(win, [i for i, k in enumerate(self.rgb) if k in [tuple(c) for c in cols]]) + if not keep.any(): + raise ValueError("erase %s: none of its colours there" % (p,)) + _, (iy, ix) = ndimage.distance_transform_edt(~keep, return_indices=True) + filled = win[iy, ix] + self.idx[y:y + h, x:x + w] = filled[y - y0:y - y0 + h, x - x0:x - x0 + w] elif p[0] == "mirror": _, sx, sy, w, h, dx, dy = p self.idx[dy:dy + h, dx:dx + w] = self.idx[sy:sy + h, sx:sx + w][:, ::-1].copy() @@ -294,6 +309,47 @@ def room_pixels(area, r): return out, sub, (xs0 - x, ys0 - y) +def floor_mask(area, r, x0, y0, x1, y1): + """the pixels of a rectangle of the map in the room's floor colours""" + walk_idx = [i for c in area.spec["floor"] + r.get("floor_colors", []) for i, k in enumerate(area.rgb) + if k == tuple(c) and i != area.transparent] + return np.isin(area.idx[y0:y1, x0:x1], walk_idx) + + +def apply_links(area, rooms): + """the links between rooms one above the other through a dark doorway, ("v", lower, upper, x, w, y): a door + each way between the lower room's floor under the doorway (x .. x + w, y in it) and the upper's above it, the + floor made walkable up to them. ("up", lower, x, w, y, to, (tx, ty)): a one-way door, up a chute""" + for link in R.LINKS: + lo = rooms.get(link[1]) + if lo is None or lo["area"] != area.spec["name"]: + continue + x, w, yd = link[3:6] if link[0] == "v" else link[2:5] + cx = x + w // 2 + lx, ly, lw, lh = lo["rect"] + col = floor_mask(area, lo, cx, yd, cx + 1, ly + lh)[:, 0] + if not col.any(): + sys.exit("link %s: no floor under the doorway" % (link,)) + ya = yd + int(np.argmax(col)) # the lower room's floor, where the doorway ends + if link[0] == "up": + # a chute is narrow: a little room either side to walk into it + to, (tx, ty) = link[5:7] + lo.setdefault("fix", []).append(("walk", x - 4, ya - 8, w + 8, 12)) + lo.setdefault("doors", []).append(((x - 2, ya - 6, w + 4, 4), to, (tx, ty), "down")) + continue + lo.setdefault("fix", []).append(("walk", x, ya - 8, w, 12)) + up = rooms[link[2]] + ux, uy, uw, uh = up["rect"] + col = floor_mask(area, up, cx, uy, cx + 1, min(uy + uh, yd))[:, 0] + if not col.any(): + sys.exit("link %s: no floor above the doorway" % (link,)) + yb = uy + len(col) - int(np.argmax(col[::-1])) # the upper room's floor, where the doorway starts + up.setdefault("fix", []).append(("walk", x, yb - 4, w, 4)) + lo.setdefault("doors", []).append(((x, ya - 6, w, 4), link[2], (cx - 10, yb - 34), "up")) + up.setdefault("doors", []).append(((x, yb - 2, w, 2), link[1], (cx - 10, ya - 12), "down")) + print("link: %s floor at %d, %s at %d" % (link[1], ya, link[2], yb)) + + def collision(area, r): """4-pixel cells over the room: walkable where the floor's colours fill at least half the cell and inside one of its floor rectangles (all of it if it has none), then its own fixes""" @@ -305,22 +361,36 @@ def collision(area, r): for i, k in enumerate(area.rgb): if k == tuple(c) and i != area.transparent: walk_idx.add(i) - sub = np.zeros((ch * 4, cw * 4), bool) - xs0, ys0, xs1, ys1 = max(x, 0), max(y, 0), min(x + w, W), min(y + h, H) - m = np.isin(area.idx[ys0:ys1, xs0:xs1], list(walk_idx)) - sub[ys0 - y:ys1 - y, xs0 - x:xs1 - x] = m + # the map's pixels over the cells, and `margin` more around (what's beyond the room's edge counts too) + margin = r.get("margin", area.spec.get("margin", 0)) + X0, Y0, X1, Y1 = x - margin, y - margin, x + cw * 4 + margin, y + ch * 4 + margin + big = np.zeros((Y1 - Y0, X1 - X0), bool) + xs0, ys0, xs1, ys1 = max(X0, 0), max(Y0, 0), min(X1, W), min(Y1, H) + big[ys0 - Y0:ys1 - Y0, xs0 - X0:xs1 - X0] = np.isin(area.idx[ys0:ys1, xs0:xs1], list(walk_idx)) + sub = big[margin:margin + ch * 4, margin:margin + cw * 4] cells = sub.reshape(ch, 4, cw, 4).mean(axis=(1, 3)) >= 0.5 + # piles of leaves are floor, outline and all + soft = area.spec.get("piles") + pile_big = np.zeros_like(big) + if soft: + win = np.zeros(big.shape, area.idx.dtype) + win[ys0 - Y0:ys1 - Y0, xs0 - X0:xs1 - X0] = area.idx[ys0:ys1, xs0:xs1] + pile = np.isin(win, [i for i, k in enumerate(area.rgb) if k in [tuple(c) for c in soft]]) + lab, n = ndimage.label(ndimage.binary_dilation(pile, iterations=3)) + for sl in ndimage.find_objects(lab): + if (sl[0].stop - sl[0].start) * (sl[1].stop - sl[1].start) >= 16: + pile_big[sl] = True # walls drawn in the floor's colours give themselves away by their lines: a cell is floor only with no - # other colour within `margin` pixels of it - margin = r.get("margin", area.spec.get("margin", 0)) + # other colour within `margin` pixels of it (a pile's leaves don't count) if margin: - other = ~sub - pad = np.pad(other, margin, constant_values=False) - near = np.zeros_like(other) + other = ~big & ~pile_big + near = np.zeros_like(sub) for dy in range(2 * margin + 1): for dx in range(2 * margin + 1): - near |= pad[dy:dy + other.shape[0], dx:dx + other.shape[1]] + near |= other[dy:dy + sub.shape[0], dx:dx + sub.shape[1]] cells &= ~near.reshape(ch, 4, cw, 4).any(axis=(1, 3)) + piles = pile_big[margin:margin + ch * 4, margin:margin + cw * 4] + cells |= piles.reshape(ch, 4, cw, 4).mean(axis=(1, 3)) >= 0.5 if r.get("floor_rects"): keep = np.zeros_like(cells) for fx, fy, fw, fh in r["floor_rects"]: @@ -440,6 +510,7 @@ def main(): for ai, aspec in enumerate(R.AREAS): area = Area(ref, aspec) defines.append(("AREA_" + aspec["name"].upper(), ai)) + apply_links(area, {r["name"]: r for r in R.ROOMS}) for r in R.ROOMS: if r["area"] != aspec["name"]: continue diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index 69eaf4a1..4ebfb97b 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -9,6 +9,15 @@ Rooms are named as the game names them (room_ruins1 is ruins1).""" +# Toriel's home: wood, the rugs, the kitchen's tiles, the hallway's, the bedrooms' floors +HOUSE_FLOOR = [(245, 215, 158), (246, 231, 189), (194, 133, 78), (255, 186, 95), (151, 97, 26), (187, 106, 52), + (238, 203, 131), (230, 245, 120), (186, 133, 4), (235, 186, 67), (233, 77, 42), (255, 213, 166), + (166, 189, 255), (74, 151, 201)] +BASEMENT_FLOOR = [(132, 53, 125)] +# the darker floor: cracks, the rocks' tracks +CRACKED = [(132, 53, 125)] +LEAVES = [(128, 17, 17), (232, 35, 19)] +RUINS_PLAIN = [(163, 73, 164), (185, 98, 185)] RUINS_FLOOR = [ (163, 73, 164), (185, 98, 185), # the floor and its paths (128, 17, 17), (232, 35, 19), (233, 77, 42), (123, 24, 19), (121, 18, 0), (64, 0, 0), (157, 32, 0), # red leaves @@ -18,9 +27,34 @@ ] AREAS = [ - dict(name="ruins", map="Ruins_map.png", floor=RUINS_FLOOR, margin=3, patches=[ + dict(name="ruins", map="Ruins_map.png", floor=RUINS_FLOOR, margin=3, piles=LEAVES, patches=[ ("mirror", 95, 5988, 27, 60, 178, 5988), # Toriel tending the flowers (the game's last pages) ("fill", 509, 5768, 23, 12, (0, 0, 0)), ("fill", 509, 5780, 23, 11, (34, 177, 76)), # Flowey + # what the game draws itself: the switch room's spikes, the Dummy, the pillar Toriel hides behind, the + # leaf pile's Froggit, the SAVE stars + ("erase", 1058, 4738, 26, 44, RUINS_PLAIN), ("erase", 1296, 4688, 26, 36, RUINS_PLAIN), + ("copy", 4521, 4380, 38, 61, 4601, 4380), ("erase", 4598, 4441, 44, 21, RUINS_PLAIN), + ("erase", 4898, 4441, 28, 23, RUINS_PLAIN), + ("copy", 531, 5274, 20, 22, 511, 5274), ("copy", 5010, 4480, 22, 20, 5010, 4500), + ("erase", 7168, 4856, 26, 26, RUINS_PLAIN), ("copy", 8902, 3116, 22, 26, 8942, 3116), + # the spikes the game raises and lowers (not the blueprint room's: those stay) + ] + [("erase", x, y, 20, 20, RUINS_PLAIN) for x, y in [ + (5740, 4680), (5740, 4700), (5740, 4720), (5740, 4740), (5740, 4760), (5740, 4780), + (6880, 4820), (6880, 4840), (6880, 4860), (6900, 4820), (6900, 4840), (6900, 4860), + (8680, 4620), (8680, 4640), (8760, 4620), (8760, 4640), (8960, 4840), (8980, 4840), + (8960, 4140), (8980, 4140), (8760, 4340), (8760, 4360), (8660, 4340), (8660, 4360), + (8440, 4140), (8460, 4140), (8440, 3960), (8460, 3960), (8660, 3740), (8660, 3760)]] + [ + # the rocks, the Froggits, the candy, what lies in the one switch puzzle's rooms, the Toy Knife + ("erase", 5620, 4735, 20, 20, RUINS_PLAIN), ("erase", 6700, 4795, 20, 20, RUINS_PLAIN), + ("erase", 6680, 4835, 20, 20, RUINS_PLAIN), ("erase", 6720, 4875, 20, 20, RUINS_PLAIN), + ("erase", 9400, 3700, 20, 20, RUINS_PLAIN), ("erase", 7660, 4540, 20, 20, RUINS_PLAIN), + ("erase", 7780, 4540, 20, 20, RUINS_PLAIN), ("erase", 7900, 4540, 20, 20, RUINS_PLAIN), + ("erase", 4950, 4215, 40, 29, RUINS_PLAIN), ("erase", 8300, 4980, 20, 20, RUINS_PLAIN), + ("erase", 8660, 5117, 20, 20, RUINS_PLAIN), ("erase", 8260, 5120, 15, 15, RUINS_PLAIN), + ("erase", 8493, 5115, 35, 19, RUINS_PLAIN), ("erase", 9364, 3566, 15, 15, RUINS_PLAIN), + # Napstablook on the leaves; Toriel at the door; Flowey in the last room's light + ("erase", 7524, 4832, 34, 19, LEAVES), ("erase", 10003, 2011, 28, 53, BASEMENT_FLOOR + [(97, 44, 97)]), + ("erase", 10007, 204, 27, 27, [(0, 0, 0), (200, 194, 226), (95, 94, 119), (58, 57, 72), (34, 177, 76)]), ]), ] @@ -32,33 +66,47 @@ # Flowey's patch of grass in the dark (the floor is black: all of it is walked on), the purple arch north dict(name="area1_2", area="ruins", rect=(360, 5560, 320, 340), title="Ruins", margin=0, floor_colors=[(0, 0, 0)], floor_rects=[(420, 5640, 200, 260), (500, 5560, 40, 80)], + fix=[("walk", 500, 5560, 40, 80)], # under the arch doors=[((420, 5894, 200, 6), "area1", (608, 6030), "down")]), # the entrance: two staircases, the red leaves, the first SAVE Point - dict(name="ruins1", area="ruins", rect=(360, 5080, 320, 480), title="Ruins - Entrance"), + dict(name="ruins1", area="ruins", rect=(360, 5080, 320, 480), title="Ruins - Entrance", margin=0, + floor_rects=[(380, 5280, 280, 280), (480, 5240, 80, 40), (400, 5200, 240, 22), (400, 5222, 80, 80), + (560, 5222, 80, 80)], + fix=[("walk", 420, 5276, 40, 28), ("walk", 580, 5276, 40, 28)]), # the middle road puzzle: six switches on the floor and a lever - dict(name="ruins2", area="ruins", rect=(360, 4840, 320, 240), title="Ruins"), + dict(name="ruins2", area="ruins", rect=(360, 4840, 320, 240), title="Ruins", + fix=[("walk", 482, 4840, 36, 86)]), # the switch room, with Toriel's labels; spikes at its end - dict(name="ruins3", area="ruins", rect=(360, 4600, 720, 240), title="Ruins"), + dict(name="ruins3", area="ruins", rect=(360, 4600, 720, 240), title="Ruins", fix=[("walk", 482, 4820, 36, 20)]), # the training dummy dict(name="ruins4", area="ruins", rect=(1080, 4600, 320, 240), title="Ruins"), # the blueprint and the spikes over the water - dict(name="ruins5", area="ruins", rect=(1100, 4340, 1180, 260), title="Ruins"), + dict(name="ruins5", area="ruins", rect=(1100, 4340, 1180, 260), title="Ruins", + fix=[("wall", 1940, 4460, 280, 80), ("walk", 2216, 4460, 12, 40), ("walk", 1932, 4500, 12, 40)] + [ + ("walk", 1940 + 20 * c, 4460 + 20 * r, 20, 20) + for r, row in enumerate(["..#####...####", "..#####...####", "####.#######..", "####.#######.."]) + for c, v in enumerate(row) if v == "#"]), # the long hallway: the independence test - dict(name="ruins6", area="ruins", rect=(2280, 4340, 2560, 240), title="Ruins"), + dict(name="ruins6", area="ruins", rect=(2280, 4340, 2520, 240), title="Ruins"), # the leaf pile, its SAVE Point, the first Froggit to talk - dict(name="ruins7", area="ruins", rect=(4840, 4360, 240, 440), title="Ruins - Leaf Pile"), + dict(name="ruins7", area="ruins", rect=(4800, 4360, 280, 440), title="Ruins - Leaf Pile"), # the Monster Candy dict(name="ruins7a", area="ruins", rect=(4860, 4100, 200, 260), title="Ruins"), # the cracked floor and the room under it - dict(name="ruins8", area="ruins", rect=(5080, 4600, 410, 220), title="Ruins"), + dict(name="ruins8", area="ruins", floor_colors=CRACKED, rect=(5080, 4600, 410, 220), title="Ruins", + fix=[("walk", 5244, 4704, 72, 56)]), dict(name="ruins8b", area="ruins", rect=(5140, 5020, 280, 200), title="Ruins"), # the first rock puzzle - dict(name="ruins9", area="ruins", rect=(5490, 4600, 420, 220), title="Ruins"), + dict(name="ruins9", area="ruins", floor_colors=CRACKED, rect=(5490, 4600, 420, 220), title="Ruins", + fix=[("walk", 5676, 4736, 28, 28)]), # the leaf puzzle: cracked floor above, the way through in leaves below - dict(name="ruins10", area="ruins", rect=(5910, 4600, 580, 320), title="Ruins"), + dict(name="ruins10", area="ruins", floor_colors=CRACKED, rect=(5910, 4600, 580, 320), title="Ruins", + fix=[("walk", 6152, 4736, 128, 164), ("walk", 6280, 4778, 188, 122), ("wall", 6280, 4700, 190, 78), + ("wall", 5910, 4600, 380, 98)]), dict(name="ruins10b", area="ruins", rect=(5940, 5020, 540, 300), title="Ruins"), # the second rock puzzle: the rock that won't move - dict(name="ruins11", area="ruins", rect=(6490, 4680, 560, 260), title="Ruins"), + dict(name="ruins11", area="ruins", floor_colors=CRACKED, rect=(6490, 4680, 560, 260), title="Ruins", + fix=[("walk", 6776, y, 28, 28) for y in (4796, 4836, 4876)]), # the mouse hole, its SAVE Point, the cheese dict(name="ruins12", area="ruins", rect=(7050, 4720, 380, 200), title="Ruins - Mouse Hole"), # Napstablook, pretending to sleep @@ -68,7 +116,8 @@ # the Froggits' hall dict(name="ruins15", area="ruins", rect=(7520, 4400, 540, 300), title="Ruins"), # the one switch puzzle, and its six rooms under it - dict(name="ruins16", area="ruins", rect=(8060, 4480, 640, 280), title="Ruins"), + dict(name="ruins16", area="ruins", floor_colors=CRACKED, rect=(8060, 4480, 640, 280), title="Ruins", + fix=[("walk", x, y, 60, 60) for x in (8320, 8440, 8560) for y in (4560, 4680)]), dict(name="ruins16a", area="ruins", rect=(8230, 4915, 160, 125), title="Ruins"), dict(name="ruins16b", area="ruins", rect=(8410, 4915, 140, 125), title="Ruins"), dict(name="ruins16c", area="ruins", rect=(8550, 4915, 140, 125), title="Ruins"), @@ -76,27 +125,78 @@ dict(name="ruins16e", area="ruins", rect=(8410, 5040, 140, 120), title="Ruins"), dict(name="ruins16f", area="ruins", rect=(8550, 5040, 140, 120), title="Ruins"), # the rotating rooms: the same room, turned; and the one a wrong switch drops Frisk in - dict(name="ruins17a", area="ruins", rect=(8700, 4500, 360, 400), title="Ruins"), - dict(name="ruins17b", area="ruins", rect=(8720, 4060, 340, 380), title="Ruins"), - dict(name="ruins17c", area="ruins", rect=(8380, 4000, 340, 440), title="Ruins"), - dict(name="ruins17d", area="ruins", rect=(8380, 3610, 320, 390), title="Ruins"), - dict(name="ruins17x", area="ruins", rect=(9140, 4540, 280, 160), title="Ruins"), + dict(name="ruins17a", area="ruins", rect=(8700, 4500, 360, 400), title="Ruins", + fix=[("walk", 8752, 4620, 36, 40), ("walk", 8960, 4832, 40, 36)], + doors=[((8960, 4894, 40, 6), "ruins17b", (8970, 4124), "down")]), + dict(name="ruins17b", area="ruins", rect=(8720, 4060, 340, 380), title="Ruins", + fix=[("walk", 8962, 4126, 36, 14), ("walk", 8960, 4132, 40, 36)], + doors=[((8960, 4126, 40, 6), "ruins17a", (8970, 4858), "up")]), + dict(name="ruins17c", area="ruins", rect=(8380, 4000, 340, 440), title="Ruins", + fix=[("walk", 8652, 4340, 36, 40)]), + dict(name="ruins17d", area="ruins", rect=(8380, 3610, 320, 390), title="Ruins", + fix=[("walk", 8440, 3952, 40, 36)]), + dict(name="ruins17x", area="ruins", rect=(9140, 4480, 280, 220), title="Ruins"), # the crossroads, the Froggit who saw Toriel, the balcony over Home - dict(name="ruins18", area="ruins", rect=(8700, 3460, 590, 370), title="Ruins"), + dict(name="ruins18", area="ruins", rect=(8700, 3460, 590, 370), title="Ruins", + fix=[("walk", 8846, 3720, 48, 80), ("walk", 9166, 3720, 48, 80)]), # vines on the floor dict(name="ruins19", area="ruins", rect=(9290, 3620, 250, 200), title="Ruins"), dict(name="ruins20", area="ruins", rect=(9300, 3360, 360, 260), title="Ruins"), # Toriel's tree and her door dict(name="ruins21", area="ruins", rect=(8860, 2920, 320, 540), title="Ruins - Home"), # Toriel's home - dict(name="torhouse1", area="ruins", rect=(8860, 2660, 320, 260), title="Home"), - dict(name="torhouse2", area="ruins", rect=(8540, 2670, 320, 250), title="Home"), - dict(name="torkitchen", area="ruins", rect=(8540, 2500, 200, 170), title="Home"), - dict(name="torhouse3", area="ruins", rect=(9180, 2700, 760, 220), title="Home"), - dict(name="asrielroom", area="ruins", rect=(9200, 2460, 260, 230), title="Home"), - dict(name="torielroom", area="ruins", rect=(9510, 2430, 280, 260), title="Home"), + dict(name="torhouse1", area="ruins", floor_colors=HOUSE_FLOOR, margin=0, rect=(8860, 2660, 320, 260), title="Home", + floor_rects=[(8860, 2815, 320, 75), (8900, 2760, 25, 60), (9085, 2740, 80, 80), (8995, 2890, 45, 30)], + fix=[("walk", 9062, 2742, 24, 16), ("wall", 9100, 2736, 46, 18)], doors=[((9062, 2742, 14, 16), "basement1", (8952, 2316), "right")]), + dict(name="torhouse2", area="ruins", floor_colors=HOUSE_FLOOR, margin=0, rect=(8540, 2670, 320, 250), title="Home", + floor_rects=[(8560, 2735, 280, 150), (8585, 2670, 42, 65), (8840, 2800, 20, 85)], + fix=[("wall", 8655, 2680, 90, 82), ("wall", 8753, 2690, 60, 62), ("wall", 8815, 2705, 22, 47), + ("wall", 8592, 2822, 108, 50), ("wall", 8578, 2830, 16, 24), ("wall", 8700, 2830, 16, 24)]), + dict(name="torkitchen", area="ruins", floor_colors=HOUSE_FLOOR, margin=0, rect=(8540, 2500, 200, 170), title="Home", + floor_rects=[(8562, 2600, 156, 62), (8587, 2660, 40, 12)]), + dict(name="torhouse3", area="ruins", floor_colors=HOUSE_FLOOR, margin=0, rect=(9180, 2700, 760, 220), title="Home", + floor_rects=[(9180, 2820, 720, 60)], + doors=[((9326, 2814, 28, 8), "asrielroom", (9377, 2630), "up"), + ((9536, 2814, 28, 8), "torielroom", (9607, 2630), "up")]), + dict(name="asrielroom", area="ruins", floor_colors=HOUSE_FLOOR, margin=0, rect=(9200, 2460, 260, 230), title="Home", + floor_rects=[(9240, 2540, 180, 120), (9366, 2655, 42, 30)], + fix=[("wall", 9368, 2536, 40, 46), ("wall", 9405, 2540, 16, 40), ("wall", 9394, 2578, 24, 14)], + doors=[((9366, 2676, 42, 8), "torhouse3", (9330, 2826), "down")]), + dict(name="torielroom", area="ruins", floor_colors=HOUSE_FLOOR, margin=0, rect=(9510, 2430, 280, 260), title="Home", + floor_rects=[(9530, 2540, 240, 120), (9597, 2655, 42, 35)], + fix=[("wall", 9530, 2536, 66, 56), ("wall", 9540, 2592, 48, 44), ("wall", 9575, 2580, 26, 30), + ("wall", 9695, 2605, 28, 36)], + doors=[((9597, 2676, 41, 8), "torhouse3", (9540, 2826), "down")]), # the basement, to the end of the Ruins - dict(name="basement1", area="ruins", rect=(8860, 2220, 1260, 180), title="Ruins"), - dict(name="basement2", area="ruins", rect=(9930, 1960, 220, 260), title="Ruins"), - dict(name="basement3", area="ruins", rect=(9940, 300, 180, 1660), title="Ruins"), - dict(name="ruinsexit", area="ruins", rect=(9940, 0, 200, 300), title="Ruins - Exit"), + dict(name="basement1", area="ruins", floor_colors=BASEMENT_FLOOR, margin=0, rect=(8860, 2220, 1260, 180), title="Ruins", + fix=[("walk", 8930, 2320, 20, 40)], doors=[((8930, 2320, 8, 40), "torhouse1", (9084, 2764), "down")]), + dict(name="basement2", area="ruins", floor_colors=BASEMENT_FLOOR, margin=0, rect=(9930, 1960, 220, 260), title="Ruins", + fix=[("walk", 10000, 2024, 40, 10)], doors=[((10000, 2026, 40, 6), "basement3", (10010, 1914), "up")]), + dict(name="basement3", area="ruins", floor_colors=[(97, 44, 97), (132, 53, 125), (0, 0, 0)], margin=0, + rect=(9940, 300, 180, 1660), floor_rects=[(9980, 300, 80, 1660)], title="Ruins", + fix=[("walk", 10000, 1950, 40, 10)], doors=[((10000, 1956, 40, 4), "basement2", (10010, 2034), "down")]), + dict(name="ruinsexit", area="ruins", floor_colors=[(0, 0, 0), (97, 44, 97)], margin=0, rect=(9940, 0, 200, 300), + floor_rects=[(9980, 70, 80, 230)], title="Ruins - Exit"), +] + +# rooms one above the other through a dark doorway (tools/pack.py: apply_links) +LINKS = [ + ("v", "ruins1", "ruins2", 506, 28, 5175), + ("v", "ruins4", "ruins5", 1244, 32, 4640), + ("v", "ruins7", "ruins7a", 4946, 28, 4400), + ("v", "ruins13", "ruins15", 7580, 34, 4740), + ("v", "ruins18", "ruins21", 9006, 30, 3500), + ("v", "ruins19", "ruins20", 9468, 24, 3670), + ("v", "ruins21", "torhouse1", 9006, 26, 3070), + ("v", "ruins17c", "ruins17d", 8444, 32, 4080), + # the chutes up from the rooms under the cracked floors + ("up", "ruins8b", 5190, 30, 5070, "ruins8", (5167, 4684)), + ("up", "ruins8b", 5350, 30, 5070, "ruins8", (5407, 4684)), + ("up", "ruins10b", 6066, 30, 5070, "ruins10", (6066, 4690)), + ("up", "ruins16a", 8263, 12, 4945, "ruins16", (8200, 4546)), + ("up", "ruins16b", 8503, 12, 4945, "ruins16", (8440, 4546)), + ("up", "ruins16c", 8643, 12, 4945, "ruins16", (8580, 4546)), + ("up", "ruins16d", 8263, 12, 5065, "ruins16", (8200, 4546)), + ("up", "ruins16e", 8503, 12, 5065, "ruins16", (8440, 4546)), + ("up", "ruins16f", 8643, 12, 5065, "ruins16", (8580, 4546)), + ("up", "ruins17x", 9268, 26, 4510, "ruins17a", (8790, 4606)), ] diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index 78e27a63..56f5de8c 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -58,6 +58,22 @@ ("toriel_away", "wiki:Toriel_battle_shocked.png", {"feet": True}), ("toriel_fight", "wiki:Toriel_battle_in_fight.png", {"feet": True}), ("toriel_dead", "wiki:Toriel_battle_fatal_Neutral.png", {"feet": True}), +] + [ + # the Ruins' things, from the demo (their top-left at their origin, as the game places them) + (n.replace("spr_", "o_"), "demo:" + n, {"keep": True}) for n in [ + "spr_ruinsdoor1", "spr_switch", "spr_groundswitch1", "spr_spiketile", "spr_rock", "spr_colorswitch", + "spr_faceswitch", "spr_dummy", "spr_exc", "spr_floweygrow", "spr_floweyshrink", "spr_floweysink", + "spr_floweylaughoverworld", "spr_toriel_handhold_d", "spr_toriel_handhold_u", "spr_toriel_handhold_l", + "spr_toriel_handhold_r", "spr_hole", "spr_smallweb", "spr_bigweb", "spr_napstablook_gr", "spr_napstablook_grsm", + "spr_napstablook_l", "spr_chairempty", "spr_chairiel", "spr_chairielgetup", "spr_candydish", "spr_candydish2", + "spr_candydish_bad", "spr_cheesetable", "spr_mousehole", "spr_npc_d", "spr_npc_u", "spr_npc_l", "spr_npc_r", + "spr_pillar", "spr_pieslice", "spr_bigpie", "spr_vegetableoutside", "spr_smallfrog", "spr_ribbon", + "spr_groundknife", "spr_torielflame", "spr_winkstar", "spr_tornote", "spr_diningtable", "spr_nastytree", + "spr_toriel_d_phone", "spr_toriel_dt", "spr_toriel_ut", "spr_toriel_lt", "spr_toriel_rt", "spr_toriel_hug", + "spr_toriel_ruffle"] +] + [ + ("frog_ow", "wiki:Froggit_overworld.png", {"keep": True}), + ("napsta_ow", "wiki:Napstablook_overworld.png", {"keep": True}), ] + [ # the intro's pictures, the title, GAME OVER ("introimage", "demo:spr_introimage", {"keep": True, "clear_black": True}), From 2076b2a40d17485721c7cefca34f5d05319bfca5 Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Wed, 14 Oct 2026 20:32:46 +0000 Subject: [PATCH 04/19] Undertale: in NumPlay's releases, README, tests and How to play Undertale.nwa is built and released with the other big games, tested on the emulator and on a computer in CI, and has its own README, its place in the big games, the gallery, the credits and How to play. --- .github/workflows/build.yml | 1 + Makefile | 6 +- README.md | 11 +++- docs/media/gallery/undertale.gif | Bin 0 -> 74186 bytes docs/media/thumb_undertale.png | Bin 0 -> 9557 bytes docs/media/undertale.gif | Bin 0 -> 329738 bytes docs/play.md | 18 ++++++ games/undertale/README.md | 87 +++++++++++++++++++++++++++ games/undertale/docs/flowers.png | Bin 0 -> 2784 bytes games/undertale/docs/flowey.png | Bin 0 -> 1361 bytes games/undertale/docs/froggit.png | Bin 0 -> 2075 bytes games/undertale/docs/home.png | Bin 0 -> 4321 bytes games/undertale/docs/judgement.png | Bin 0 -> 1749 bytes games/undertale/docs/napstablook.png | Bin 0 -> 2143 bytes games/undertale/docs/puzzles.png | Bin 0 -> 4032 bytes games/undertale/docs/toriel.png | Bin 0 -> 2811 bytes tests/test_games.py | 12 +++- tools/release.py | 3 + 18 files changed, 133 insertions(+), 5 deletions(-) create mode 100644 docs/media/gallery/undertale.gif create mode 100644 docs/media/thumb_undertale.png create mode 100644 docs/media/undertale.gif create mode 100644 games/undertale/README.md create mode 100644 games/undertale/docs/flowers.png create mode 100644 games/undertale/docs/flowey.png create mode 100644 games/undertale/docs/froggit.png create mode 100644 games/undertale/docs/home.png create mode 100644 games/undertale/docs/judgement.png create mode 100644 games/undertale/docs/napstablook.png create mode 100644 games/undertale/docs/puzzles.png create mode 100644 games/undertale/docs/toriel.png diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 31217b60..6214682b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,6 +53,7 @@ jobs: python3 tests/test_small_ram.py build/NumPlay.nwa make -C games/numblocks host test make -C games/championisland host test + make -C games/undertale host test - uses: actions/upload-artifact@v4 with: diff --git a/Makefile b/Makefile index d590bb42..c59933fd 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ RAM_LIMIT = 148928 # custom builds of Epsilon 25.2's source give apps less: 133652 bytes; every game fits there too, in NumPlay and on # its own (their big buffers are on the stack, 32 KB apart from that RAM, or in the RAM the software has left) CUSTOM_RAM = 133652 -BIG_APPS = Celeste HollowKnight ChampionIsland FinalEarth2 NumPowder NumBlocks NumDrive +BIG_APPS = Celeste HollowKnight Undertale ChampionIsland FinalEarth2 NumPowder NumBlocks NumDrive # the calculator's space for installed apps (0x90200000 to 0x903F0000 in its flash) APP_SPACE = 2031616 # Upsilon, the N0110 and N0115's custom software, gives .nwa apps less RAM: NumPlay-Upsilon.nwa has @@ -205,6 +205,7 @@ APP_numvisuals = games/numvisuals/output/numvisuals.nwa:NumVisuals.nwa APP_celeste = games/celeste/output/celeste.nwa:Celeste.nwa APP_championisland = games/championisland/output/championisland.nwa:ChampionIsland.nwa APP_hollowknight = games/hollowknight/output/hollowknight.nwa:HollowKnight.nwa +APP_undertale = games/undertale/output/undertale.nwa:Undertale.nwa APP_finalearth2 = games/finalearth2/output/finalearth2.nwa:FinalEarth2.nwa APP_numpowder = games/numpowder/output/numpowder.nwa:NumPowder.nwa @@ -220,6 +221,7 @@ apps: | $(B) $(MAKE) -C games/celeste build NWLINK="$(NWLINK)" $(MAKE) -C games/championisland build NWLINK="$(NWLINK)" $(MAKE) -C games/hollowknight build NWLINK="$(NWLINK)" + $(MAKE) -C games/undertale build NWLINK="$(NWLINK)" $(MAKE) -C games/finalearth2 build NWLINK="$(NWLINK)" $(MAKE) -C games/numpowder build NWLINK="$(NWLINK)" cd games/tetris/tetris && NWLINK="$(NWLINK)" $(CARGO) build --release --quiet @@ -235,6 +237,7 @@ apps: | $(B) cp $(word 1,$(subst :, ,$(APP_celeste))) $(B)/apps/$(word 2,$(subst :, ,$(APP_celeste))) cp $(word 1,$(subst :, ,$(APP_championisland))) $(B)/apps/$(word 2,$(subst :, ,$(APP_championisland))) cp $(word 1,$(subst :, ,$(APP_hollowknight))) $(B)/apps/$(word 2,$(subst :, ,$(APP_hollowknight))) + cp $(word 1,$(subst :, ,$(APP_undertale))) $(B)/apps/$(word 2,$(subst :, ,$(APP_undertale))) cp $(word 1,$(subst :, ,$(APP_finalearth2))) $(B)/apps/$(word 2,$(subst :, ,$(APP_finalearth2))) cp $(word 1,$(subst :, ,$(APP_numpowder))) $(B)/apps/$(word 2,$(subst :, ,$(APP_numpowder))) arm-none-eabi-strip --strip-unneeded $(B)/apps/Tetris.nwa @@ -291,6 +294,7 @@ clean: -$(MAKE) -C games/numvisuals clean -$(MAKE) -C games/championisland clean -$(MAKE) -C games/hollowknight clean + -$(MAKE) -C games/undertale clean -$(MAKE) -C games/finalearth2 clean -$(MAKE) -C games/numpowder clean -cd games/tetris/tetris && $(CARGO) clean diff --git a/README.md b/README.md index 214fc213..3c865a1c 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,10 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - More on the way
Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap + Undertale
Undertale

The Ruins, from the golden flowers to the door out
Download + + + More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -171,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale +- [ ] Undertale: the Ruins are out, Snowdin, Waterfall, Hotland and New Home are next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom @@ -199,6 +202,7 @@ NumPlay is a fan project, made out of love for these games and for the NumWorks - **Minecraft** by Mojang inspired NumBlocks, which follows Minecraft 1.8.8 exactly: it makes its worlds the way Minecraft 1.8.8 does and uses its blocks, items, recipes, textures, font and screens. - **Celeste** inspired NumPlay's Celeste, which uses the game's own pictures, maps, texts and fonts. Not affiliated with Maddy Makes Games. - **Hollow Knight** inspired NumPlay's Hollow Knight, which uses the game's own pictures, animations, maps, texts and fonts. Not affiliated with Team Cherry. +- **Undertale** by Toby Fox inspired NumPlay's Undertale, which uses the game's maps, pictures and texts from the [Undertale Wiki](https://undertale.fandom.com) and the game's free demo, and the **Pixel Operator** fonts by Jayvee Enaguas (public domain). Not affiliated with Toby Fox. - **[The Powder Toy](https://powdertoy.co.uk)** inspired NumPowder, which ports its materials' behaviour, its font and its icons from [its source code](https://github.com/The-Powder-Toy/The-Powder-Toy) (GNU GPL v3.0), by Stanislaw K Skowronek, Simon Robertshaw and its contributors. Not affiliated with them. - **[The Final Earth 2](https://store.steampowered.com/app/1180130/The_Final_Earth_2/)** by [Florian van Strien](https://florianvanstrien.nl) inspired NumPlay's The Final Earth 2, which uses the game's own pictures, fonts and texts, with additional sprites by LukXD99. Not affiliated with him. - **Buckshot Roulette** by Mike Klubnika inspired NumPlay's Buckshot Roulette, whose scenes are rendered from the game through the Open Buckshot Roulette project (1503Dev). Fonts: Fake Receipt by Ray Larabie and Dot Matrix by Dionaea. @@ -215,7 +219,7 @@ NumPlay is a fan project, made out of love for these games and for the NumWorks NumPlay is licensed under the [GNU General Public License v3.0](LICENSE). Copyright (c) 2026 Mason Chen. Code and fonts from others keep their own licenses: the `UNLICENSE` files in the games' folders and the [LICENSES](LICENSES) folder. The names, artwork and music of the games NumPlay is inspired by belong to their makers and are not covered by it. -Unofficial fan games, not affiliated with NumWorks, RobTop Games (Geometry Dash), Hipster Whale (Crossy Road), the makers of Drive Mad, LocalThunk or Playstack (Balatro), Mike Klubnika or Critical Reflex (Buckshot Roulette), Hungry Studio (Block Blast!), Mojang or Microsoft (Minecraft), Maddy Makes Games (Celeste), Team Cherry (Hollow Knight), Florian van Strien (The Final Earth 2), The Powder Toy's developers (The Powder Toy), MateoConLechuga (Portal Returns), Valve (Portal), .GEARS (Flappy Bird), Bandai Namco (Pac-Man), Hasbro (Connect Four), Google (Snake, Solitaire, Block Breaker, Doodle Champion Island Games), STUDIO4°C or Microsoft (Minesweeper). Tetris is a trademark of The Tetris Company, Minecraft of Mojang Synergies AB, Pac-Man of Bandai Namco and Connect Four of Hasbro. +Unofficial fan games, not affiliated with NumWorks, RobTop Games (Geometry Dash), Hipster Whale (Crossy Road), the makers of Drive Mad, LocalThunk or Playstack (Balatro), Mike Klubnika or Critical Reflex (Buckshot Roulette), Hungry Studio (Block Blast!), Mojang or Microsoft (Minecraft), Maddy Makes Games (Celeste), Team Cherry (Hollow Knight), Toby Fox (Undertale), Florian van Strien (The Final Earth 2), The Powder Toy's developers (The Powder Toy), MateoConLechuga (Portal Returns), Valve (Portal), .GEARS (Flappy Bird), Bandai Namco (Pac-Man), Hasbro (Connect Four), Google (Snake, Solitaire, Block Breaker, Doodle Champion Island Games), STUDIO4°C or Microsoft (Minesweeper). Tetris is a trademark of The Tetris Company, Minecraft of Mojang Synergies AB, Pac-Man of Bandai Namco and Connect Four of Hasbro. ## Gallery @@ -262,5 +266,6 @@ NumPlay is licensed under the [GNU General Public License v3.0](LICENSE). Copyri Champion Island: climbing, artistic swimming and the marathon
Champion Island + Undertale: Flowey's friendliness pellets, Toriel's tile puzzle and her fire
Undertale diff --git a/docs/media/gallery/undertale.gif b/docs/media/gallery/undertale.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a3008425730df47b24f4c91cbd6c52c1953967b GIT binary patch literal 74186 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 ay3mVnG|fQsh{G-kExb`i*fxnxr~U))X{hx8 literal 0 HcmV?d00001 diff --git a/docs/media/thumb_undertale.png b/docs/media/thumb_undertale.png new file mode 100644 index 0000000000000000000000000000000000000000..b59ae10dbe8cdf64653894c763a1f848fb554b59 GIT binary patch literal 9557 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 M85QXYDHGWL03<=RrvLx| literal 0 HcmV?d00001 diff --git a/docs/media/undertale.gif b/docs/media/undertale.gif new file mode 100644 index 0000000000000000000000000000000000000000..113d0b8f87c6dc7f27a2c8e3e4f8be9dacfe4de1 GIT binary patch literal 329738 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�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 z +## Undertale + +Undertale: Flowey's friendliness pellets, Toriel's tile puzzle, Napstablook's tears and Toriel's fire + +Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calculator with NumPlay. + +| Key | What it does | +| --- | --- | +| **Arrows** (or 4, 6, 8, 2) | Walk, move your SOUL, choose | +| **OK**, **EXE** or 5 | Talk, read, confirm (Z in the game) | +| **Back** or **⌫** | Cancel, show the whole text at once (X in the game) | +| **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | +| **Home** | Keep the moment and quit | + +Name the fallen human, then walk and talk your way through the Ruins. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. For now the game ends at the door out of the Ruins. + +
+ ## Portal Returns Portal Returns: falling through a portal and flying across a test chamber diff --git a/games/undertale/README.md b/games/undertale/README.md new file mode 100644 index 00000000..96b4c53b --- /dev/null +++ b/games/undertale/README.md @@ -0,0 +1,87 @@ +> **Undertale is a [NumPlay](../../README.md) game that comes on its own.** It is too big to sit next to NumPlay. Get `Undertale.nwa` from the [latest release](https://github.com/Mason363/NumPlay/releases/latest). + +

+ Undertale icon +

+ +

Undertale

+ +

+ Fall into the Underground as a human child, on the NumWorks calculator.
+ The Ruins, from the bed of golden flowers to the door out. The rest of the Underground is on the way. +

+ +

+ Download Undertale.nwa +  Â·  Controls +

+ +

+ Flowey's friendliness pellets, Toriel's tile puzzle, Napstablook's tears and Toriel's fire +

+ +## Highlights + +* **The whole Ruins:** every room, from the golden flowers through Toriel's puzzles, the falling leaves, the spikes, the rocks, the cracked floors and the switches, to Toriel's home and the long corridor under it. +* **Its people, with all they have to say:** Flowey, Toriel and her phone calls, Napstablook, the talking rock, the Froggits who give advice, the spider bake sale, the snail facts, and every sign, bookshelf and mirror. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel. +* **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. +* **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. + + + + + + + + + + + + + + + + + + +
The golden flowers
The bed of golden flowers
Flowey
Flowey's friendliness pellets
Toriel's first puzzle
Toriel shows how the puzzles work
A Froggit
A Froggit
Napstablook
Napstablook
Toriel's home
Toriel's home
Toriel's fight
Toriel won't let you leave
Flowey at the door
Flowey waits at the door
+ +## How to play + +A new game starts with the story of the war between humans and monsters, then the title. Name the fallen human, and you wake up on the golden flowers. Walk on and talk to whoever you meet: Flowey has a few things to teach you, then Toriel guides you through the Ruins. + +Monsters jump out as you walk. In a battle, choose FIGHT to attack (press OK when the bar crosses the middle), ACT to check them, talk or do something else, ITEM to eat, and MERCY to spare them once they no longer want to fight, or to flee. Then move your SOUL, the red heart, to dodge what they throw at you. Each monster has its own way to be spared: try what ACT offers. + +Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and Toriel's phone number. + +## Controls + +| Key | What it does | +| --- | --- | +| Arrows (or 4, 6, 8, 2) | Walk, move your SOUL, choose | +| OK, EXE or 5 | Talk, read, confirm (Z in the game) | +| Back or ⌫ | Cancel, show the whole text at once (X in the game) | +| Toolbox, Shift or Var | The menu: ITEM, STAT, CELL (C in the game) | +| Home | Keep the moment and quit: the next start is back there | + +## Good to know + +* **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. +* **Only the Ruins, for now:** the door out of the Ruins ends the game, on a screen that says the rest of the Underground is still to come. Snowdin, Waterfall, Hotland and New Home come next, one at a time. +* **No music or sound:** the calculator has no speaker. +* **The same Underground:** the rooms, pictures and words are the game's, and the puzzles and battles follow how the game plays them, at its 30 frames a second. + +## Credits + +Inspired by Undertale by Toby Fox, not affiliated with him. + +* The maps, pictures and texts come from the [Undertale Wiki](https://undertale.fandom.com) and the game's free demo. +* The **Pixel Operator** fonts are by Jayvee Enaguas, released into the public domain (CC0). +* The LZMA decoder in `src/lzma` is by Igor Pavlov, in the public domain. + +Made by Mason Chen as part of NumPlay. + +## License + +The game's code is licensed under the GNU General Public License v3.0: see the `LICENSE` file at the root of the repository. The game's pictures, maps and texts keep their own terms (see Credits). diff --git a/games/undertale/docs/flowers.png b/games/undertale/docs/flowers.png new file mode 100644 index 0000000000000000000000000000000000000000..64df8c8886b01675d8359f48cdc153032baf8ea2 GIT binary patch literal 2784 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 BQU3q{ literal 0 HcmV?d00001 diff --git a/games/undertale/docs/froggit.png b/games/undertale/docs/froggit.png new file mode 100644 index 0000000000000000000000000000000000000000..06862e3dd9da8e3b17b47ee634e40bd53a920b05 GIT binary patch literal 2075 zcmbW1do?uJ$XAT{n}Z|8M&h&y79Bb?eR+55=-X#11e@fORt2`%%* z-J$aEM&*N};9Fy`Ur)Cv4<{d7^zytce$7fIYnCCmjd@V!&u=XZVn=C7kMq{qP+T^i z)y2uj%!MLHLf`F)Tpb&hT-_6_7*44^f|XAkn5w#A(<58^hA1x=Jrg%1@0xKfe0o%D5^L#%~E5( zokVC1x`9!cn$M;WIVc9pR-8=367sWN0!TYFQZ>&N8C>no3x8$7k6_l2$%B+jQJx_x zMQweSf)6IoTnd}eA1DB_j`*}FZ*1ivF60h?bo8e;59QZgGP!J@AyGt@>IZ4qV^Fq) z1=*5xY-njRtm0QIJGMldxqo{4X)jtIGh)#&ZreH`fH}g z$xCQ#o}*5C0eGICIx9EBk%!SXj^O}gV*I*ooo(Y*$%Z5Dm%}ajPBDWP=Ea5rKO%ta zX+I?-mF}(0y<9wb0V?j7LG;C-{6ej&{@C4J4GuCkRk;9~x_4MBH|&Z^@E3<}EJ$Ue zS~mNkcbrPmg+9U3OL@@2V6<<)x4LRDmB<+I!#wGT3VJ46+89bS3d4D)eo`qj6L zXO_wefLl*PTf}>6lwRqYl!_rIO#HNbu=Qc+AZ-~hY$k!V5~Qn{x?17!4>9GFjV|9f zgqW)^j5*Vwv5$v(V05T0qqn`7|Dgi#OwkH-rl3f=CI$Ty#N&x{D|OIRmH)!im8P$@ zzZ-O9^b+!!zDt6IJ!-E%ujhqIO-LWR*=L!;nC9toWys`ur_U%xHL8v#3T1&=D%4GoiRxulz%?rmj$aR|92Irma|u=KcreK)p}tc%bRE4MowxRsd^=*unWKG z25%#!$fUMIwo=YF{B^{$ysZ_u%aGlG_9K9{)O)5Nczxqk?6(upp^#32rx z-oT43d31dKwzDIl{CK9k;g8^A6x@Q&Ou+w!OR z+xbuEe>g4eoSIq+B9e)f1#cfB00<~Wutn=RJu6X=xtymWRKp@&!sodk|J@4j&D?$N zpmhORfJ=Q-ZXc1GG~!c^~0*|uFu;yVw{4pDv#=tb3hi-A!iVIH3^dP=bTQK9Qe zg|F{-w$76bKF1Nu`N9d)sKf|^c&8f#tx<1=Sq7;&eb%#5WL&X*@))Kr8E;RFZ?~tk_n0G z6S-+VGber29$@kXSLk-Gcj2ruZVm~gP!?T4)n@8j!%tZ>fZbg(A(JL`n_m*nxYzbG zBjogxVlQ0IfZiKeib-;=vNrwwBe6elC?~RkY!U}PE@hNlb&lDm;XuPT$_?~|pB+4# zjJA(JqzduTuNMl&HJ0_3I_|2Ej6=;Dnjb!9i|NN?*|d=-*Kd1rPG;)GTG2USdf7_Rc#s46idq$)zBaRDN;W>E&QA|s6~!P zk!MFX6E!+CFRBLA7BNiU;HeqW(X0^(hN%3D5sKY50*MkU1+gFx8p)7lD>hqxy=|Jj_I~*ACz}K^ zl2gs4D_L%xpdW7xb4{jYT|sm)Sf{#%51kZTb4(feZne0zcAbNr<38z>DGLz;t1wsA ou@GeEw7GUdjO#oI7=0;}C~B5j#u+Mm?X<+{9NfP8Oz`!80(8{Zh5!Hn literal 0 HcmV?d00001 diff --git a/games/undertale/docs/home.png b/games/undertale/docs/home.png new file mode 100644 index 0000000000000000000000000000000000000000..426172972f6068692e35a7b611c52f2fef075500 GIT binary patch literal 4321 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 Hq0#>ZCayVF literal 0 HcmV?d00001 diff --git a/games/undertale/docs/judgement.png b/games/undertale/docs/judgement.png new file mode 100644 index 0000000000000000000000000000000000000000..099448042db820a4fe575e369d82d71a620e1e98 GIT binary patch literal 1749 zcmbtUYd9N*8qRGkN-0HM+R`eANTX9SjmX@YHSOG%hDo}oYHLW{Lz_m7a>}Vo&+48y zv|>fbw3E;vla5x9wFk+PAZn@);-o4=D2>|S?3HI|2&yX%pz>1GXSo5b{tMz`6M4vZm(5=^H zMtpBbljK_3wZg6?&7KSo9dN?kdFHGO3I?4rWwqE`y7(|T2Ozg$-b4=3k?J8K-NSXq z^V_PW$uHln%Jw``@RlHy{Jny-r5r4`&3!;FEPXfS1g71{!RbUKu|fY;wf8F55BMB4Heyqx}3lft|Y#qOWu01B_g32-q^{ z%+!@xk433@?z5W4EqmSw#3VyODs+DA3>DwU|4_pURnDo&yXh-E2h7@bo|fY7a(7MK zR@+h6b?jflnoI3h*k8Db##Zk)o8MH}GAU&&bCJr8#N;l2W?A;DWdL7r)*9{4fjONZ zI#cm2SwtG`CM*>>8s(8Ca0|z@=gx(CNXXrn#ii4O-V1}}$hNu-adzsV6_@pm%I=fV zFsu(EA$s693^L|6El>(prajL&l^WEESnunxPu$X#(dVPvs8#{w-y^oXPbh3%C({$T znyPvF^e-)fu|k@9GSRn{#n`_Z8n=lD(K-L2&)o6s`AIAwlzjhiYUtNQb524MaWQRE zF97F*fZu~wPtP@M&P7-}cXGi!k6FgA5rIND~MiU>dR9N2l6slWkV@9`iq2>IPdYcW1D zeF0C+=SPD{yXN}YPe4VEkuOTNA(4(laD`OFjjBCNi9hOBvFiF`K^_t971>>KgI}kr z^{Jn_>rOK}2!&s~C|0ifdr!}L8 zj(dx*9a6dLNE=1!BFtxa?Xei$v~*+E&M2|ZVm@v!SM4;#tJ*46^=IeXJo-6G<7hZp zFG=J4q885k@$H^0ur`q*an=A{59s>tDw7ly72|>*Zs!P;XUaj$+Wt&xM@&$8@7c7> zH7mJq$rA1yQh%1_t8*!R;@`nK8ScpG&l-jszc&250EHeoj`avzEXXG;Z{!Ciz>{a* zTd_v6lxs6bq4k1o|J50dcNwb5nVq$}&@$b`prpKd+taOCj+O0c8hdvYSymx$ES^Z+ zM}%B&i!vV zk4CLhO6MvDoG*=mVsISQLK(QI4KZBVas>#to#7|ZGn>oIvAfqK#<*_qertDz83{@? zO@N^SWA5DVB29d)o1i(JwMevuX~_;b-kYGV&v}#nAdju(8!mkAn{ltQm}btU9z!=V z5LZl5=8S-tO|9?$-aEXB#w&jit#qDrQrgKi+9;Xn+zd49k*aol*zFf*!UX zTrR(SS>7?t2)U(gUzk8zqJV{&z0HfHfrct@2gZ!uq^|y>Ykp*Znb3fIx+A3(XUcB! z)tR1EUpO~8=%9Y$L}2c^{fJ9jdaIE?AXjE0jQ{dL#g=17yUI%1F~7h6qE}Vg&7THq zS*vl)Bl%pcXJB2Ji2HF`-4L2}@0%{f1^1ZPG)l+|3E1JQ>n{_|cbiY~GFRmVmLYHa z7H=g{pt&m(y;&rrtnqqxSk16?zwtSL#03UgzpaBoSvu4Q!DOgqF4RKZc!z)K*3{#v z`p0isAM?r_OJ&Z8<8l->k)bCZhr{g?lM7BI&FZWb7B&_Q4m7|RXR_nW+((m*ps;F@ z$_s^VqlCS}`iQ=@g?;5*7w4HPbjY+Y`ycP>^3Oeh@>I#LVUC~Chjp+&#;?_f@ZFz# C!8APp literal 0 HcmV?d00001 diff --git a/games/undertale/docs/napstablook.png b/games/undertale/docs/napstablook.png new file mode 100644 index 0000000000000000000000000000000000000000..6df6657789189d08af0a9071e6395d22cf219b8b GIT binary patch literal 2143 zcmZ{kcU03^7RQrNgeXlBr8^+TLIk9@AfO-ui6bg7Ly4diDS?1U32lgR6cuq$5s+QI($l zu|bHE3(rHcSVqbU@5*I*jRKy4Qa~b*T@tzyx(CQf+vc`&fc(RG858(hYZd}Bv$9F6 z@T3N6fJ@HvURGBf=z};pj(U1{-+d-R@ro_QI3?&nocfmT)PY<~NQx=2ZsEL0O@Uhy z5fv--3gX23{OB^6AwBx=GT5$67LAnU$w~L_1edViyAoI*3o}}rIVO$$xpJ8VSPz1! zO>Q*U$jxxmB!XNHwFjjyl91YBnP)|Ga$1-gs zlLy+J!{l~~W}4?(XbP1!4>#P<5Xx+_UYsTP#bb@nbai&=Pu$|6n!wGz8DE*S8r2}` z1j>+Osn}AbGymRmVk#E{y~l5eK%YzkgT=w(qWgtHGIuxrcLU#;o}EtnHt-*vq(G>3 zqM5ra_TzuFyOx5MMUN9@;lfI?PiLRj6joxvGI;m27UZjN59AW6GA{8Q1Z0XF`by?6 zZ3bNtUprZ(j6wqF4}Cmu_1@0X%gV0VurRk1a2T8>p=+;iaRmb}j=MG960Dr?OeEqg z!9M#~qJVEm#5r&0`8Qih|A#p)x&ml_z>SwCI|y*=#d4s0!I32;zzXVL9KJ=BB>gTX z<+$M$09Zg3wNSzL$RoOct00TckM-Yd3jkKqTe3a_WF1lD(QEq-t{cDk^`Lk}X;`u59`c!FaB^|jGsUbA4P3r78N_*~5^ zwmWSIAIn~o#Wizb2`OFxkrym|@BjXYLkGvgOfxic-IhjGXy|U!E7Y;v8f~*Y&wt zcWc_NUSs2!sl;==VgbiBFfQ1U?9 zn;=OKoU~D`$~Jb}1QMDbC8|ZUW8RV@$}yN-I)L_$J3I^BMpg8%NXidLMfd-``bWa= zTZQO;k6Uk(ylwvP_`9XEalcO1+!nDz3qLdvh+ftK2sqw@OTp^vE9F}a#IId@qe9%G zFRx;zzYQ(>pk74+lNEhpSVD#jHq!G+{NRT;z9+>zs%w?=>Si(YWRA*hV-B zjSp=bzRB7fz-uycIR4;{9laor5wD1}p^w$ekp!qTsnz8)o>Ab;i|&UXUtiUE@WN$o zP!<_?gT$baaAv;}{m$1aG{-`VxbkM$kvT!uVk=K8#-3X6v3K!u>Rup6lJm^L0pqC2 z?MnBr>%3K@Iwhm9b?Wg$0Hl> zxa%10k5 zA%C=`iWxd9W0+bV9$ox%`qN1#2QX1*FIpM`LrsHTtlsu9_iWQk;nF!bTq~+d_xKH@ zH&xV@G&x^IRee^p4O*F9X&WVIO(^pU89i0{qzU8Ty3Rbm;N;Y7pEukO+_;{CC`7jz zRyJ_#5j9#XwaxKBJ^oEZN9BqFXza?3;M)X{m?D@>f~j-W@S zh2A~K{&FRJ(4;Cb&7P09)u`lg->}@+@7D2}Z)3)Cp5Xo(-MV-X!?S$;$fXyiQi>4M z@qw$wYh)KUqo!3BrrO6$3n|{;7AW?N#ugR5egckjFXc6oIKi}?thmoi=1_O$?g(uu yQG?+LlDY=kpI4IABYNjd)vjZl7Qi5SonS|2lEA3aPIYt}5{J{sQ`I);-~I`Q`2n2( literal 0 HcmV?d00001 diff --git a/games/undertale/docs/puzzles.png b/games/undertale/docs/puzzles.png new file mode 100644 index 0000000000000000000000000000000000000000..96a5c9a55b5fc5e3a381cee1c7253740544ef787 GIT binary patch literal 4032 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 Kvm}`N-ue${u*xlZ)>u$GO=K7B{ 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 N002ovPDHLkV1hb?hrj>; literal 0 HcmV?d00001 diff --git a/tests/test_games.py b/tests/test_games.py index 0e5b4d65..32a04371 100644 --- a/tests/test_games.py +++ b/tests/test_games.py @@ -121,6 +121,13 @@ def every(t0, t1, step, key, d=80): presses((2500, "ok"), (4500, "ok"), (5500, "ok"), (6500, "ok")) + every(18000, 22000, 600, "right", 400), 25000, presses((2500, "ok"), (4500, "ok")) + every(9000, 11000, 600, "left", 400), 14000), + # past the intro and the title, the name "A", Done, Yes: Frisk falls on the golden flowers and walks; Home keeps + # the moment, and the next start is back there + "undertale": ("Undertale.nwa", "utresume.sav", + presses((1500, "ok"), (2500, "ok"), (3500, "ok"), (4500, "ok"), + *[(5000 + 200 * i, "down") for i in range(8)], (6800, "right"), (7000, "right"), + (7300, "ok"), (8300, "right"), (8600, "ok"), (10500, "right", 1500)), 13000, + presses((1500, "left", 1000)), 4000), # the intro, then OK draws for a while (the autosave on Home); next time it comes back and more is drawn "numpowder": ("NumPowder.nwa", "numpowder.sav", presses((2000, "ok"), (3000, "ok", 1500)), 6000, presses((2000, "ok"), (2500, "right", 600), (3200, "ok", 800)), 5000), @@ -155,7 +162,7 @@ def every(t0, t1, step, key, d=80): # the app again, only the scripts are left, and the save must come back COPIES = {"championisland": "champion_saves.py", "numblocks": "numblocks_saves.py", "celeste": "celeste_saves.py", "hollowknight": "hollowknight_saves.py", "finalearth2": "finalearth2_saves.py", - "numpowder": "numpowder_saves.py"} + "numpowder": "numpowder_saves.py", "undertale": "undertale_saves.py"} CHECKS = { # the island remembers where Lucky was; after the reinstall, from the copy "championisland": (lambda v: v[:3] == b"CI1" and b"PLAYER_LOC" in v,) * 2, @@ -166,6 +173,9 @@ def every(t0, t1, step, key, d=80): "chess": (lambda v: v == SEEDS["chess"],) * 2, # read back and kept # a city saved ("FE2S", version 1); after the reinstall, from the copy, it goes on and is saved again "finalearth2": (lambda v: v[:4] == b"FE2S" and v[4] == 1,) * 2, + # the moment kept ("UT01", the frames played at 52); after the reinstall, from the copy, it goes on + "undertale": (lambda v: v[:4] == b"UT01" and struct.unpack_from(" 0, + lambda v: v[:4] == b"UT01" and struct.unpack_from(" 60), # a simulation saved ("NPWD"); after the reinstall, from the copy, it goes on and is saved again "numpowder": (lambda v: v[:4] == b"NPWD",) * 2, # a game saved ("HKSV", then the play time at 152); after the reinstall, from the copy, it goes on diff --git a/tools/release.py b/tools/release.py index 8063f0b6..689c7c2b 100644 --- a/tools/release.py +++ b/tools/release.py @@ -27,6 +27,9 @@ "on its own"), "hollowknight": ("Hollow Knight", "from King's Pass to Hornet in Greenpath. Too big to share the calculator with " "NumPlay: install it on its own"), + "undertale": ("Undertale", "the Ruins, from the bed of golden flowers to the door out: Flowey, Toriel, Napstablook " + "and every puzzle, the rest of the Underground to come. Too big to share the calculator with NumPlay: " + "install it on its own"), "championisland": ("Champion Island", "the Doodle Champion Island Games. Too big to share the calculator with " "NumPlay: install it on its own"), "numpowder": ("NumPowder", "The Powder Toy on the calculator: sand, water, fire, acid, electricity and nearly 200 " From 8db8eb81b972be4d7bb8c9211c807db8f7b0b242 Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 01:55:24 +0000 Subject: [PATCH 05/19] Undertale: Snowdin, from the Ruins door to the edge of Waterfall The forest road with Sans and Papyrus, and every one of Papyrus's puzzles: the invisible electricity maze, the ball game, the word search, the X and O tiles (the second with its switch in a tree, the third on ice), the multicolor tiles and the Gauntlet. Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog, Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake and Glyde, each spared their own way. Snowdin Town with its shop, inn, Grillby's, library and Papyrus's house, the Papyrus fight with the blue SOUL (he captures you instead of killing you), the date and his phone number, and the Dimensional Box. The engine gains ice to slide on, the blue SOUL's gravity, shops, plank bridges and side doors in the continuous maps. tests/check.py now plays the whole of Snowdin and every new battle; the ice puzzle was checked solvable under the game's own slide rules. --- README.md | 4 +- docs/play.md | 2 +- games/undertale/README.md | 29 +- games/undertale/docs/date.png | Bin 0 -> 6408 bytes games/undertale/docs/greaterdog.png | Bin 0 -> 2735 bytes games/undertale/docs/ice.png | Bin 0 -> 8576 bytes games/undertale/docs/maze.png | Bin 0 -> 9462 bytes games/undertale/docs/papyrus.png | Bin 0 -> 2658 bytes games/undertale/docs/sans.png | Bin 0 -> 5438 bytes games/undertale/docs/shop.png | Bin 0 -> 9641 bytes games/undertale/docs/town.png | Bin 0 -> 11776 bytes games/undertale/src/battle.c | 27 +- games/undertale/src/battle.h | 9 +- games/undertale/src/bullets.c | 42 +- games/undertale/src/data.bin | Bin 578824 -> 1361708 bytes games/undertale/src/data.h | 182 ++++-- games/undertale/src/events.c | 12 + games/undertale/src/events.h | 13 +- games/undertale/src/flags.h | 40 ++ games/undertale/src/game.c | 12 +- games/undertale/src/game.h | 3 +- games/undertale/src/items.c | 21 +- games/undertale/src/items.h | 8 + games/undertale/src/menu.c | 12 +- games/undertale/src/menu.h | 2 +- games/undertale/src/monsters.c | 31 +- games/undertale/src/monsters.h | 32 +- games/undertale/src/papyrus.c | 222 +++++++ games/undertale/src/res.c | 2 + games/undertale/src/res.h | 5 +- games/undertale/src/rooms.c | 26 +- games/undertale/src/ruins3.c | 6 +- games/undertale/src/shop.c | 241 ++++++++ games/undertale/src/shop.h | 10 + games/undertale/src/snowdin.h | 25 + games/undertale/src/snowdin1.c | 611 +++++++++++++++++++ games/undertale/src/snowdin2.c | 448 ++++++++++++++ games/undertale/src/snowmon.c | 896 ++++++++++++++++++++++++++++ games/undertale/src/snowtown.c | 313 ++++++++++ games/undertale/src/text.c | 1 + games/undertale/src/text.h | 1 + games/undertale/src/world.c | 47 +- games/undertale/src/world.h | 7 +- games/undertale/tests/check.py | 50 +- games/undertale/tests/play.c | 58 +- games/undertale/tests/snowdin.path | 242 ++++++++ games/undertale/tools/fetch.py | 28 +- games/undertale/tools/pack.py | 151 ++++- games/undertale/tools/rooms.py | 141 ++++- games/undertale/tools/sprites.py | 170 +++++- tools/release.py | 6 +- 51 files changed, 4061 insertions(+), 127 deletions(-) create mode 100644 games/undertale/docs/date.png create mode 100644 games/undertale/docs/greaterdog.png create mode 100644 games/undertale/docs/ice.png create mode 100644 games/undertale/docs/maze.png create mode 100644 games/undertale/docs/papyrus.png create mode 100644 games/undertale/docs/sans.png create mode 100644 games/undertale/docs/shop.png create mode 100644 games/undertale/docs/town.png create mode 100644 games/undertale/src/papyrus.c create mode 100644 games/undertale/src/shop.c create mode 100644 games/undertale/src/shop.h create mode 100644 games/undertale/src/snowdin.h create mode 100644 games/undertale/src/snowdin1.c create mode 100644 games/undertale/src/snowdin2.c create mode 100644 games/undertale/src/snowmon.c create mode 100644 games/undertale/src/snowtown.c create mode 100644 games/undertale/tests/snowdin.path diff --git a/README.md b/README.md index 3c865a1c..437d185a 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins, from the golden flowers to the door out
Download + Undertale
Undertale

The Ruins and Snowdin, from the golden flowers to the edge of Waterfall
Download More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins are out, Snowdin, Waterfall, Hotland and New Home are next +- [ ] Undertale: the Ruins and Snowdin are out, Waterfall, Hotland and New Home are next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index e133ea62..ef4dfbcb 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. For now the game ends at the door out of the Ruins. +Name the fallen human, then walk and talk your way through the Ruins and Snowdin. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. For now the game ends on the way out of Snowdin, at the edge of Waterfall.
diff --git a/games/undertale/README.md b/games/undertale/README.md index 96b4c53b..e690080b 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins, from the bed of golden flowers to the door out. The rest of the Underground is on the way. + The Ruins and Snowdin, from the bed of golden flowers to the edge of Waterfall. The rest of the Underground is on the way.

@@ -24,8 +24,9 @@ * **The whole Ruins:** every room, from the golden flowers through Toriel's puzzles, the falling leaves, the spikes, the rocks, the cracked floors and the switches, to Toriel's home and the long corridor under it. * **Its people, with all they have to say:** Flowey, Toriel and her phone calls, Napstablook, the talking rock, the Froggits who give advice, the spider bake sale, the snail facts, and every sign, bookshelf and mirror. -* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel. -* **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. +* **Snowdin:** Sans and Papyrus, and every one of Papyrus's puzzles: the invisible electricity maze, the X and O tiles, the one on ice, the multicolor tiles and the Gauntlet. Then Snowdin Town, with its shop, inn, Grillby's, library and Papyrus's house. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin. +* **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -45,6 +46,22 @@ + + + + + + + + + + + + + + + +
Toriel's fight
Toriel won't let you leave
Flowey at the door
Flowey waits at the door
Sans in Snowdin Forest
Sans, on the road through Snowdin Forest
The invisible electricity maze
Papyrus's invisible electricity maze
The X and O puzzle on ice
The X and O puzzle on ice
Greater Dog
Greater Dog
Snowdin Town
Snowdin Town
The shop
The shop
Papyrus's blue attack
Papyrus's blue attack
Papyrus's room
Hanging out with Papyrus
## How to play @@ -53,7 +70,9 @@ A new game starts with the story of the war between humans and monsters, then th Monsters jump out as you walk. In a battle, choose FIGHT to attack (press OK when the bar crosses the middle), ACT to check them, talk or do something else, ITEM to eat, and MERCY to spare them once they no longer want to fight, or to flee. Then move your SOUL, the red heart, to dodge what they throw at you. Each monster has its own way to be spared: try what ACT offers. -Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and Toriel's phone number. +Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bottom of the box, and Up jumps over his bones. On ice you slide until something stops you. Snowdin Town's shop sells food and gear, and its inn gives you a night's rest. + +Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. ## Controls @@ -68,7 +87,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **Only the Ruins, for now:** the door out of the Ruins ends the game, on a screen that says the rest of the Underground is still to come. Snowdin, Waterfall, Hotland and New Home come next, one at a time. +* **The Ruins and Snowdin, for now:** the way out of Snowdin ends the game, on a screen that says the rest of the Underground is still to come. Waterfall, Hotland and New Home come next, one at a time. * **No music or sound:** the calculator has no speaker. * **The same Underground:** the rooms, pictures and words are the game's, and the puzzles and battles follow how the game plays them, at its 30 frames a second. diff --git a/games/undertale/docs/date.png b/games/undertale/docs/date.png new file mode 100644 index 0000000000000000000000000000000000000000..b95de4df03a90c6f207616b673fa2a2b01cf8337 GIT binary patch literal 6408 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 KrCJc=?f(GisW~(N literal 0 HcmV?d00001 diff --git a/games/undertale/docs/greaterdog.png b/games/undertale/docs/greaterdog.png new file mode 100644 index 0000000000000000000000000000000000000000..918c653cefb74a3d862599357fda0a1c997088f3 GIT binary patch literal 2735 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 YB>}w)>QJV2;?E>8HZapK)kQ`83qV^OqyPW_ literal 0 HcmV?d00001 diff --git a/games/undertale/docs/ice.png b/games/undertale/docs/ice.png new file mode 100644 index 0000000000000000000000000000000000000000..6383693702a9fd14a0d59f4817578a5a3291167f GIT binary patch literal 8576 zcma)C^#7~I<00617lAIO*fFq5)K7NRcJ>O|^ zN&o;%ipp{_Z+z!bCXydb6w}I`VZI=tAX1iQ$$}s6Wn_%B#>0r}MhLXbL2)%Q(L%3Q zUKz5#%Z!6WWJZ%kCFU9s&UZxXLra{}LQ!N9^IxsU%~rlM{3)dpIO`Qy0zY&JPg2Rh z67||^KWyG+>_PdsEH-%+w}};M=mhpci2fgka^^5;S;x@OQ1XDBG0dlzdjpS%;bmKd zr+ib=+n{%VY&G^KQza!mNd!WosLi=vU4_x)aR|&aO?h7XnmyhV(NO*eSI=4VrK`5G z-sPZ(=5emKa?@S~wl!Iu(FCKf_h3brGd4xKiTJahJt1pe$=%*3E?zp^T z6WHHewi7a`!_veI`0!4&3?|a8p6QutgjF0Qedb32H6c~edtmN@wtwl`YhGM7BlO|_ zdNm&3bdVrvCv~1+A$fQuqq&o?u-*4Q0Tx_x<@j8&twoZF<^H8G+)6=-ahCc|o`U+= zMpAXAfq33Ys@>v{@`oLbp6X4^9N$YiancQGcJ0$V!hnKI*f98>EOlg)Cz3J~VOW%OEI7*qfJjowC!R?LF1AD|) z?F-+3fa_KVZ5Mz4*98`~$GF;RUjEP%*oj16P=%P~K2C#yr9d+h19RFg0&$N zM7qr%MY!LH8`8L1{LnmuAWJEYb2iSx>}*d5zt$JYZHu}72|f*}`qz0acs28M+2%Sn zr1UM70U$QC&*5xoX({qO+**1Ug!V=f!fZe>RMK1%0Ao0;HXe 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/maze.png b/games/undertale/docs/maze.png new file mode 100644 index 0000000000000000000000000000000000000000..5b75aad8f387ceb6ebcf1e29de9c68a473731f95 GIT binary patch literal 9462 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/papyrus.png b/games/undertale/docs/papyrus.png new file mode 100644 index 0000000000000000000000000000000000000000..f04f39e09ae5b4730150bcaf12ce802468f93c45 GIT binary patch literal 2658 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 X@6JPom_EVStG4>#+X=5tW^4 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/shop.png b/games/undertale/docs/shop.png new file mode 100644 index 0000000000000000000000000000000000000000..96162c757a05cdd1b9eac6df7f7c029b94108aeb GIT binary patch literal 9641 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 S_j&~jprW8DUn^_%<$nMH{+DF{ literal 0 HcmV?d00001 diff --git a/games/undertale/docs/town.png b/games/undertale/docs/town.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e918cdb1104a9d4d5061d418dc430e037dbb38 GIT binary patch literal 11776 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 m->gold = d->gold; m->alive = true; m->spare = d->flags & MF_SPARE_START; + m->spare_gold = d->spare_gold; } bt.x0 = bt.tx0 = BOX_X0, bt.y0 = bt.ty0 = BOX_Y0, bt.x1 = bt.tx1 = BOX_X1, bt.y1 = bt.ty1 = BOX_Y1; bt.speed = 2 * FX; + soul_set_mode(SOUL_RED); bt.hp_shown = sv.hp; heart_x = pl.x + 10 - cam_x, heart_y = pl.y + 17 - cam_y; prev_mode = g_mode; @@ -294,11 +297,7 @@ static void do_spare(void) { } (void)any; bt.text[0] = 0; - if (all_gone()) { - win(); - return; - } - after_player_turn(); + after_player_turn(); /* (all spared: the battle's won, as BR_SPARED) */ } static void do_flee(void) { @@ -395,7 +394,14 @@ static void menu_input(uint32_t pressed) { if (pressed & K_X) bt.phase = P_MENU; if (pressed & K_Z) { bt.last_action = 2; - item_use(bt.item, bt.text, sizeof bt.text, 1); + /* a monster may answer the item (a dog and the Stick) */ + bool answered = false; + for (int i = 0; i < bt.nmon && !answered; i++) { + Monster *m = &bt.mon[i]; + if (m->alive && !m->gone && m->def->on_item) + answered = m->def->on_item(&bt, m, sv.items[bt.item], bt.text, sizeof bt.text); + } + if (!answered) item_use(bt.item, bt.text, sizeof bt.text, 1); say(bt.text); bt.phase = P_RESULT; } @@ -469,6 +475,10 @@ void battle_update(uint32_t keys, uint32_t pressed) { if (m->killed && m->alive) { m->alive = false, m->gone = true, m->dust = 1; sv.kills++; + { + const RoomInfo *ri = world_room_info(); + if (ri && (ri->area == AREA_SNOWDIN || ri->area == AREA_SNOWTOWN)) set_flag(F_KILLS_SNOWDIN, flag(F_KILLS_SNOWDIN) + 1); + } } after_player_turn(); } @@ -514,6 +524,11 @@ void battle_update(uint32_t keys, uint32_t pressed) { attack_run(&bt, bt.atk, bt.atk_t); bullets_update(); soul_hit_test(); + if (sv.hp <= 0 && bt.captures) { + sv.hp = 1; + battle_end(BR_SCRIPTED); + break; + } if (sv.hp <= 0) { bt.phase = P_DEATH, bt.t = 0; break; diff --git a/games/undertale/src/battle.h b/games/undertale/src/battle.h index ce537418..05a57dcc 100644 --- a/games/undertale/src/battle.h +++ b/games/undertale/src/battle.h @@ -32,9 +32,10 @@ enum { BR_WON, BR_SPARED, BR_FLED, BR_DIED, BR_SCRIPTED }; struct Battle; struct Monster; -typedef struct { +typedef struct MonDef { const char *name; int16_t hp, at, df, exp, gold; + int16_t spare_gold; /* the gold it gives when spared */ uint16_t spr_idle, spr_hurt; /* SPR_*: idle animation (its frames), hurt */ uint8_t idle_speed; /* frames between idle frames */ int8_t dx, dy; /* where it stands, from its slot */ @@ -55,6 +56,8 @@ typedef struct { void (*draw)(struct Battle *b, struct Monster *m, int x, int y); bool (*ends)(struct Battle *b, struct Monster *m); /* after its talk: true, it leaves the battle */ void (*on_spare)(struct Battle *b, struct Monster *m); /* spared while it isn't spareable (Toriel counts) */ + /* an item used: true if it answers (the dogs and the Stick), its text in text */ + bool (*on_item)(struct Battle *b, struct Monster *m, int item, char *text, int cap); } MonDef; enum { MF_ONE_HIT = 1, /* dies in one hit (Whimsun) */ @@ -123,6 +126,7 @@ typedef struct Battle { int bar_x, bar_dir; /* FIGHT: the bar, 1/16 px */ int strike_t, strike_dmg; bool flee_ok, scripted, no_flee, no_buttons; + bool captures; /* no death: at 0 HP the battle ends, HP 1 (Papyrus captures you) */ int result; int exp_won, gold_won; int kr; /* (for later) */ @@ -152,6 +156,9 @@ void bullets_update(void); void bullets_draw(void); bool soul_hit_test(void); /* bullets touching the SOUL hurt it */ void soul_update(uint32_t keys); +enum { SOUL_RED, SOUL_BLUE }; /* (the heart's frame too) */ +void soul_set_mode(int mode); /* blue: it falls, up jumps */ +void gfx_bone(int cx, int cy, int w, int h, uint16_t col, uint8_t a); void soul_hurt(int dmg, int color); void board_set(int w, int h); /* the board, centred, as the game resizes it */ void board_set_rect(int x0, int y0, int x1, int y1); diff --git a/games/undertale/src/bullets.c b/games/undertale/src/bullets.c index a4768b78..a34f7f5f 100644 --- a/games/undertale/src/bullets.c +++ b/games/undertale/src/bullets.c @@ -29,12 +29,33 @@ int soul_x(void) { return bt.sx / FX; } int soul_y(void) { return bt.sy / FX; } /* the SOUL: 8 x 8, moved inside the board by the arrows (X held: slower, as in the game) */ +/* the blue SOUL: it falls, and up jumps (higher while held), as the game's (halved) */ +static int32_t soul_vy; +#define BLUE_JUMP (3 * FX) +#define BLUE_GRAVITY 3 /* 1/16 px a frame, each frame */ +void soul_set_mode(int mode) { + bt.soul_mode = mode; + soul_vy = 0; +} void soul_update(uint32_t keys) { int sp = bt.speed; if (keys & K_X) sp /= 2; int dx = ((keys & K_RIGHT) != 0) - ((keys & K_LEFT) != 0), dy = ((keys & K_DOWN) != 0) - ((keys & K_UP) != 0); - bt.sx += dx * sp, bt.sy += dy * sp; int x0 = (bt.x0 + 2 + 4) * FX, x1 = (bt.x1 - 2 - 4) * FX, y0 = (bt.y0 + 2 + 4) * FX, y1 = (bt.y1 - 2 - 4) * FX; + if (bt.soul_mode == SOUL_BLUE) { + bt.sx += dx * sp; + if (bt.sy >= y1) { + soul_vy = (keys & K_UP) ? -BLUE_JUMP : 0; + } else { + /* letting go of up cuts the jump short */ + if (soul_vy < -FX / 2 && !(keys & K_UP)) soul_vy = -FX / 2; + soul_vy += BLUE_GRAVITY; + } + bt.sy += soul_vy; + if (bt.sy < y0) bt.sy = y0, soul_vy = 0; + } else { + bt.sx += dx * sp, bt.sy += dy * sp; + } if (bt.sx < x0) bt.sx = x0; if (bt.sx > x1) bt.sx = x1; if (bt.sy < y0) bt.sy = y0; @@ -87,11 +108,30 @@ void bullets_update(void) { } } +/* a bone: its box w x h around (cx, cy), lying along its longer side; knobs at its ends */ +void gfx_bone(int cx, int cy, int w, int h, uint16_t col, uint8_t a) { + if (h >= w) { + int x = cx - w / 2, y = cy - h / 2, k = w / 2 > 1 ? w / 2 : 1; + gfx_rect(x + w / 4, y + k, w - 2 * (w / 4), h - 2 * k, col, a); + gfx_circle(x + k / 2 + 1, y + k, k, col, a), gfx_circle(x + w - k / 2 - 1, y + k, k, col, a); + gfx_circle(x + k / 2 + 1, y + h - k - 1, k, col, a), gfx_circle(x + w - k / 2 - 1, y + h - k - 1, k, col, a); + } else { + int x = cx - w / 2, y = cy - h / 2, k = h / 2 > 1 ? h / 2 : 1; + gfx_rect(x + k, y + h / 4, w - 2 * k, h - 2 * (h / 4), col, a); + gfx_circle(x + k, y + k / 2 + 1, k, col, a), gfx_circle(x + k, y + h - k / 2 - 1, k, col, a); + gfx_circle(x + w - k - 1, y + k / 2 + 1, k, col, a), gfx_circle(x + w - k - 1, y + h - k / 2 - 1, k, col, a); + } +} + void bullets_draw(void) { for (int i = 0; i < MAX_BULLETS; i++) { const Bullet *b = &bullets[i]; if (b->kind == BK_NONE || (b->flags & BF_HIDDEN)) continue; uint16_t color = b->color == BC_BLUE ? rgb565(0x14A9FF) : b->color == BC_ORANGE ? rgb565(0xFCA600) : b->color == BC_GREEN ? rgb565(0x00C000) : 0; + if (b->spr == SPR_BONE) { + gfx_bone(b->x / FX, b->y / FX, b->w, b->h, color ? color : C_WHITE, b->alpha); + continue; + } if (b->angle) gfx_sprite_ex(b->spr, b->frame, b->x / FX, b->y / FX, 256, 256, b->angle, color, b->alpha); else if (color) gfx_sprite_color(b->spr, b->frame, b->x / FX, b->y / FX, 0, color, b->alpha); else gfx_sprite(b->spr, b->frame, b->x / FX, b->y / FX, 0, b->alpha); diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index b89314e3a2b9a5c2f90e48eb6840cf71d0da9153..a1f2887800c4ae1ae2518c2ed477f94b5642b05b 100644 GIT binary patch literal 1361708 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 Lgpz}`;# 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[0] == 1) { /* Papyrus */ + SAY(FACE_PAPYRUS, "`0* HELLO! THIS IS PAPYRUS!\n* HOW DID YOU GET THIS NUMBER?|`2* OH, RIGHT, I GAVE IT TO YOU!\n* NYEH HEH HEH!"); + return 1; + } CHOOSE(opts, 5); switch (CHOSEN()) { case 0: @@ -81,6 +86,7 @@ static int ev_encounter(Ev *c) { WAIT(18); g_exclaim = 0; BATTLE(c->v[0]); + snow_battle_done(c->v[0]); EV_END; } @@ -97,5 +103,11 @@ int event_run(Ev *c) { if (r >= 0) return r; r = ruins3_event(c); if (r >= 0) return r; + r = snow1_event(c); + if (r >= 0) return r; + r = snow2_event(c); + if (r >= 0) return r; + r = town_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index 82a1ac7e..5d8c3adc 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -5,7 +5,10 @@ enum { ACTOR_NONE, ACTOR_TORIEL, ACTOR_FLOWEY, ACTOR_DUMMY, ACTOR_DOOR, ACTOR_SPIKES, ACTOR_SPIKES2, ACTOR_FROGGIT, ACTOR_PILLAR, ACTOR_NAPSTA, ACTOR_ROCK, ACTOR_ROCK2, ACTOR_ROCK3, ACTOR_SWITCH, ACTOR_SWITCH2, ACTOR_SWITCH3, - ACTOR_CANDY, ACTOR_TRIGGER, ACTOR_TRIGGER2, ACTOR_ITEM, ACTOR_CHAIR, ACTOR_PIE, ACTOR_ANY + ACTOR_CANDY, ACTOR_TRIGGER, ACTOR_TRIGGER2, ACTOR_ITEM, ACTOR_CHAIR, ACTOR_PIE, ACTOR_ANY, + /* Snowdin */ + ACTOR_SANS, ACTOR_PAPYRUS, ACTOR_DOGGO, ACTOR_DOGAMY, ACTOR_DOGARESSA, ACTOR_GREATERDOG, ACTOR_BALL, ACTOR_ORB, + ACTOR_TILE, ACTOR_DOG, ACTOR_BLOCK, ACTOR_TRIGGER3 }; enum { @@ -22,6 +25,14 @@ enum { EV_FROGGIT, EV_ITEM, EV_ONE_SWITCH, EV_VEGGIE, EV_TORIEL_TREE, /* ruins3.c */ EV_HOME_TOUR, EV_TORIEL_CHAIR, EV_BED, EV_STAIRS, EV_BASEMENT_TALK, EV_TORIEL_DOOR, EV_FLOWEY_END, EV_RUINS_DOOR, + /* snowdin1.c */ + EV_BRANCH, EV_SANS_INTRO, EV_SANS_TALK, EV_PAP_SENTRY, EV_DOGGO, EV_DOGGO_BELL, EV_SNOWMAN, EV_ELECMAZE, EV_MAZE_ZAP, + EV_NICECREAM, EV_BALL_HOLE, EV_WORDSEARCH, EV_BOX, EV_FISHROD, EV_SNOW_TALKBACK, + /* snowdin2.c */ + EV_SNOW_SWITCH, EV_DOGI, EV_XOXO_SWITCH, EV_PAP_XOXO, EV_TILES, EV_XOXO_FALL, EV_TREESLIDE, EV_POFF, EV_GREATERDOG, + EV_GAUNTLET, EV_MYSTERY_DOOR, EV_SNOW_SANS_CLIFF, + /* snowtown.c */ + EV_SHOP, EV_INN, EV_GRILLBYS, EV_PAP_FIGHT, EV_PAP_HOUSE, EV_PAP_DATE, EV_TOWN_DOOR, EV_SNOW_END, EV_COUCH, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index 8a925eb1..32cb3e18 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -55,6 +55,46 @@ enum { F_HOME_TOUR, /* Toriel showed Frisk the house */ F_SNAIL_TALK, F_BED_SLEPT, /* 1 slept; 2 the pie taken */ + /* Snowdin */ + F_BRANCH, /* the branch broke behind Frisk */ + F_SANS_MET, /* the gate, the lamp: Sans and Papyrus met */ + F_SANS_FAVOR, /* Sans asked his favour */ + F_PAP_SENTRY, /* Papyrus saw the human (not a rock) */ + F_DOGGO, /* 1 spared, 2 killed */ + F_SANS_HINT, /* the blue stop sign */ + F_SNOWMAN, /* pieces taken */ + F_ELECMAZE, /* 1 Papyrus zapped and gave the orb, 2 crossed */ + F_SANS_COOL, /* 1 cool, 2 uncool */ + F_NICECREAM, /* the Nice Cream guy met */ + F_FRIED_SNOW, /* times Sans named his price */ + F_BALLGAME, /* the flag won (1..7) */ + F_WORDSEARCH, /* 1 crossword, 2 junior jumble */ + F_SPAGHETTI, + F_SNOWPUZZLE, /* the switch under the snow */ + F_DOGI, /* 1 spared, 2 killed */ + F_XOXO1, F_XOXO2, F_XOXO3, + F_PAP_XOXO1, /* asked about the spaghetti */ + F_TILES, /* the multicolor tiles explained */ + F_LESSERDOG, /* 1 spared, 2 killed */ + F_POFF_GOLD, + F_GREATERDOG, /* 1 spared, 2 killed */ + F_GAUNTLET, + F_SNOW_SANS_TALK, /* Sans's talks along the way, a bit each */ + F_PAPYRUS, /* 1 spared, 2 killed, 3 fled */ + F_PAP_CAPTURED, /* times Papyrus captured Frisk */ + F_PAP_DATE, /* 1 promised, 2 done */ + F_GRILLBYS, + F_INN, /* nights at the inn */ + F_KILLS_SNOWDIN, + F_BOX0, F_BOX1, F_BOX2, F_BOX3, F_BOX4, F_BOX5, F_BOX6, F_BOX7, F_BOX8, F_BOX9, /* the Dimensional Box */ + F_SNOW_EXIT, + F_TOWN_HOUSE, /* Papyrus's house open */ + F_SNOWDIN_BOSSES, /* boss fights (Bisicle's price) */ + F_SNOW_SANS_LAMP, /* hidden behind the lamp */ + F_COUCH_GOLD, + F_FISH, /* the fishing rod's note read */ + F_SHOP_TALK, + F_SNOWDRAKE_DEAD, /* (then Chilldrake comes instead) */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/game.c b/games/undertale/src/game.c index 87489290..6133943c 100644 --- a/games/undertale/src/game.c +++ b/games/undertale/src/game.c @@ -4,6 +4,7 @@ #include "battle.h" #include "event.h" #include "game.h" +#include "shop.h" #include "gfx.h" #include "items.h" #include "menu.h" @@ -96,11 +97,11 @@ void game_frame(uint32_t keys) { prev_keys = keys; g_frame++; if (keys & K_HOME) { - if (g_mode == MODE_WORLD || g_mode == MODE_MENU || g_mode == MODE_BATTLE) game_quit_save(); + if (g_mode == MODE_WORLD || g_mode == MODE_MENU || g_mode == MODE_BATTLE || g_mode == MODE_SHOP) game_quit_save(); g_running = false; return; } - if (g_mode == MODE_WORLD || g_mode == MODE_BATTLE || g_mode == MODE_MENU) sv.time++; + if (g_mode == MODE_WORLD || g_mode == MODE_BATTLE || g_mode == MODE_MENU || g_mode == MODE_SHOP) sv.time++; switch (g_mode) { case MODE_WORLD: world_update(keys, pressed); @@ -111,6 +112,10 @@ void game_frame(uint32_t keys) { battle_update(keys, pressed); event_update(); break; + case MODE_SHOP: + shop_update(keys, pressed); + if (g_mode == MODE_WORLD) event_update(); + break; default: menu_update(keys, pressed); if (g_mode == MODE_WORLD) event_update(); @@ -132,6 +137,9 @@ void game_draw(void) { case MODE_BATTLE: battle_draw(); break; + case MODE_SHOP: + shop_draw(); + break; default: menu_draw(); break; diff --git a/games/undertale/src/game.h b/games/undertale/src/game.h index d9cb1785..cc9ec665 100644 --- a/games/undertale/src/game.h +++ b/games/undertale/src/game.h @@ -13,7 +13,8 @@ static inline int clamp_i(int v, int a, int b) { return v < a ? a : v > b ? b : static inline int min_i(int a, int b) { return a < b ? a : b; } static inline int max_i(int a, int b) { return a > b ? a : b; } -enum { MODE_TITLE, MODE_NAME, MODE_WORLD, MODE_BATTLE, MODE_MENU, MODE_SAVE, MODE_GAMEOVER, MODE_INTRO, MODE_END }; +enum { MODE_TITLE, MODE_NAME, MODE_WORLD, MODE_BATTLE, MODE_MENU, MODE_SAVE, MODE_GAMEOVER, MODE_INTRO, MODE_END, + MODE_SHOP }; #define NUM_ITEMS 8 typedef struct { diff --git a/games/undertale/src/items.c b/games/undertale/src/items.c index d04be764..ee0241da 100644 --- a/games/undertale/src/items.c +++ b/games/undertale/src/items.c @@ -22,6 +22,18 @@ static const ItemInfo items[ITEM_COUNT] = { "* You ate the Snail Pie.\n* Your HP was maxed. Almost.", 350}, [ITEM_FADED_RIBBON] = {"Faded Ribbon", "Ribbon", IT_ARMOR, 0, 0, 3, "If you're cuter, monsters\n won't hit you as hard.", "", 0}, [ITEM_TOY_KNIFE] = {"Toy Knife", "Toy Knife", IT_WEAPON, 0, 3, 0, "Made of plastic.\n* A rarity nowadays.", "", 100}, + [ITEM_TOUGH_GLOVE] = {"Tough Glove", "TuffGlove", IT_WEAPON, 0, 5, 0, "A worn pink leather glove.\n* For five-fingered folk.", "", 50}, + [ITEM_MANLY_BANDANNA] = {"Manly Bandanna", "Mandanna", IT_ARMOR, 0, 0, 7, "It has seen some wear.\n* It has abs drawn on it.", "", 50}, + [ITEM_SNOWMAN_PIECE] = {"Snowman Piece", "SnowPiece", IT_FOOD, 45, 0, 0, "Please take this to the\n ends of the earth.", + "* You ate the Snowman Piece.", 40}, + [ITEM_NICE_CREAM] = {"Nice Cream", "NiceCream", IT_FOOD, 15, 0, 0, "Instead of a joke, the\n wrapper says something nice.", + "* You unwrapped the Nice Cream.", 2}, + [ITEM_BISICLE] = {"Bisicle", "Bisicle", IT_FOOD, 11, 0, 0, "It's a two-pronged popsicle,\n so you can eat it twice.", + "* You eat one half of the\n Bisicle.", 5}, + [ITEM_UNISICLE] = {"Unisicle", "Unisicle", IT_FOOD, 11, 0, 0, "It's a SINGLE-pronged popsicle.\n* Wait, that's just normal...", + "* You ate the Unisicle.", 2}, + [ITEM_CINNAMON_BUNNY] = {"Cinnamon Bunny", "CinnaBun", IT_FOOD, 22, 0, 0, "A cinnamon roll in the\n shape of a bunny.", + "* You eat the Cinnamon Bunny.", 8}, }; const ItemInfo *item_info(int id) { return &items[id >= 0 && id < ITEM_COUNT ? id : 0]; } @@ -82,7 +94,14 @@ void item_use(int slot, char *out, int cap, int in_battle) { } default: { int n = snprintf(out, (size_t)cap, "%s", it->use); - item_remove_at(slot); + if (id == ITEM_NICE_CREAM) { /* its wrapper's kind words */ + static const char *const nice[] = {"You're just great!", "You look nice today!", "Are those claws natural?", + "You're super spiffy!", "Have a wonderful day!", "Is this as sweet as you?"}; + n += snprintf(out + n, (size_t)(cap - n), "\n* \"%s\"", nice[rnd_n(6)]); + } + /* half a Bisicle is a Unisicle */ + if (id == ITEM_BISICLE) sv.items[slot] = ITEM_UNISICLE; + else item_remove_at(slot); if (it->heal >= 999) { sv.hp = sv.maxhp; snprintf(out + n, (size_t)(cap - n), "\n* Your HP was maxed out."); diff --git a/games/undertale/src/items.h b/games/undertale/src/items.h index 701691da..33abf15a 100644 --- a/games/undertale/src/items.h +++ b/games/undertale/src/items.h @@ -14,6 +14,14 @@ enum { ITEM_SNAIL_PIE, ITEM_FADED_RIBBON, ITEM_TOY_KNIFE, + /* Snowdin */ + ITEM_TOUGH_GLOVE, + ITEM_MANLY_BANDANNA, + ITEM_SNOWMAN_PIECE, + ITEM_NICE_CREAM, + ITEM_BISICLE, + ITEM_UNISICLE, + ITEM_CINNAMON_BUNNY, ITEM_COUNT }; enum { IT_FOOD, IT_WEAPON, IT_ARMOR, IT_SPECIAL }; diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index 83da5f51..01d2f3f7 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -218,13 +218,18 @@ static void c_menu_input(uint32_t pressed) { case M_STAT: if (pressed & (K_X | K_Z)) st = M_MAIN; break; - case M_CELL: + case M_CELL: { + int n = flag(F_PAP_DATE) == 2 ? 2 : 1; /* Toriel's phone; Papyrus's once he gave it */ + if (pressed & K_UP) sub = (sub + n - 1) % n; + if (pressed & K_DOWN) sub = (sub + 1) % n; if (pressed & K_X) st = M_MAIN; if (pressed & K_Z) { menu_close(); event_start(EV_PHONE_MENU, NULL); + event_cur_arg(sub); } break; + } } } @@ -298,7 +303,8 @@ static void draw_c_menu(void) { if (st == M_CELL) { panel(94, 26, 173, 60); gfx_text(FONT_MENU, 116, 38, "Toriel's Phone", C_WHITE, 255); - gfx_sprite(SPR_HEART, 0, 107, 44, 0, 255); + if (flag(F_PAP_DATE) == 2) gfx_text(FONT_MENU, 116, 56, "Papyrus's Phone", C_WHITE, 255); + gfx_sprite(SPR_HEART, 0, 107, 44 + sub * 18, 0, 255); } } @@ -362,7 +368,7 @@ void menu_gameover_open(void) { void menu_end_open(void) { g_mode = MODE_END; t = 0; - writer_start(&w, "The RUINS are behind you.|The rest of the underground\nis still to come...", 52, 100, FONT_MAIN); + writer_start(&w, "Snowdin is behind you.|The rest of the underground\nis still to come...", 52, 100, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/menu.h b/games/undertale/src/menu.h index ff41316b..08c3e1b7 100644 --- a/games/undertale/src/menu.h +++ b/games/undertale/src/menu.h @@ -6,7 +6,7 @@ void menu_title_open(void); void menu_open(void); void menu_save_open(void); void menu_gameover_open(void); -void menu_end_open(void); /* the Ruins' door: what comes next isn't made yet */ +void menu_end_open(void); /* the way out of Snowdin: what comes next isn't made yet */ void menu_update(uint32_t keys, uint32_t pressed); void menu_draw(void); void game_new(const char *name); diff --git a/games/undertale/src/monsters.c b/games/undertale/src/monsters.c index 2f7f1867..ab7b083e 100644 --- a/games/undertale/src/monsters.c +++ b/games/undertale/src/monsters.c @@ -218,7 +218,7 @@ static bool hit_napsta(Battle *b, Monster *m, int dmg) { } /* ---------------------------------------------------------------- the monsters */ -static const MonDef defs[MON_COUNT] = { +static const MonDef defs[MON_RUINS_COUNT] = { [MON_DUMMY] = { .name = "Dummy", .hp = 15, .at = 0, .df = -5, .exp = 0, .gold = 0, .spr_idle = SPR_DUMMY_B, .spr_hurt = SPR_DUMMY_B, .check = "A cotton heart and a button\n eye\n* You are the apple of my eye", @@ -280,15 +280,13 @@ static const MonDef defs[MON_COUNT] = { }; extern const MonDef toriel_def; -const MonDef *mon_def(int id) { return id == MON_TORIEL ? &toriel_def : &defs[id]; } +const MonDef *mon_def(int id) { + if (id >= MON_RUINS_COUNT) return snow_mon_def(id); + return id == MON_TORIEL ? &toriel_def : &defs[id]; +} /* ---------------------------------------------------------------- formations */ -typedef struct { - uint8_t mon[MAX_MON]; - uint8_t n; - const char *text; -} Form; -static const Form forms[FORM_COUNT] = { +static const Form forms[FORM_RUINS_COUNT] = { [FORM_DUMMY] = {{MON_DUMMY}, 1, "* You encountered the Dummy."}, [FORM_FROGGIT_FIRST] = {{MON_FROGGIT_FIRST}, 1, "* Froggit attacks you!"}, [FORM_FROGGIT] = {{MON_FROGGIT}, 1, "* Froggit hopped close!"}, @@ -311,7 +309,7 @@ static const Form forms[FORM_COUNT] = { }; int form_setup(int form, Battle *b) { - const Form *f = &forms[form]; + const Form *f = form >= FORM_RUINS_COUNT ? snow_form(form) : &forms[form]; static const int16_t xs[3][3] = {{160}, {108, 212}, {70, 160, 250}}; b->nmon = f->n; for (int i = 0; i < f->n; i++) { @@ -321,10 +319,11 @@ int form_setup(int form, Battle *b) { m->x = (int16_t)(xs[f->n - 1][i] + m->def->dx), m->y = (int16_t)(120 + m->def->dy); } /* Toriel and Flowey can't be fled from; Napstablook can */ - if (form == FORM_TORIEL || form == FORM_FLOWEY) b->no_flee = true; + if (form == FORM_TORIEL || form == FORM_FLOWEY || form == FORM_PAPYRUS) b->no_flee = true; + b->captures = form == FORM_PAPYRUS; return 0; } -const char *form_text(int form) { return forms[form].text; } +const char *form_text(int form) { return form >= FORM_RUINS_COUNT ? snow_form(form)->text : forms[form].text; } /* ---------------------------------------------------------------- attacks */ /* the board's inside, in pixels */ @@ -644,14 +643,17 @@ static void atk_napsta_hat(int t) { if (t == 70) bt.mon[0].spr_override = SPR_NAPSTA_HAT; } -static const int16_t lengths[ATK_COUNT] = { +static const int16_t lengths[ATK_RUINS_COUNT] = { [ATK_FROG_FLIES] = 150, [ATK_FROG_JUMP] = 150, [ATK_FROG_RAIN] = 150, [ATK_WHIM_RING] = 150, [ATK_WHIM_COLS] = 150, [ATK_MOLD_ZIG] = 150, [ATK_MOLD_BURST] = 150, [ATK_LOOX_BOUNCE] = 160, [ATK_LOOX_WORM] = 150, [ATK_VEG_FALL] = 150, [ATK_VEG_CARROT] = 150, [ATK_MIGOSP_ROACH] = 150, [ATK_MIGOSP_DANCE] = 180, [ATK_NAPSTA_TEARS] = 150, [ATK_NAPSTA_WIGGLE] = 150, [ATK_NAPSTA_TEXT] = 120, [ATK_NAPSTA_HAT] = 100, [ATK_NAPSTA_FLOOD] = 150, [ATK_TOR_HANDS] = 170, [ATK_TOR_WAVES] = 180, [ATK_TOR_HELIX] = 180, [ATK_TOR_FALTER] = 150, [ATK_IDLE] = 60, }; -int attack_length(int atk) { return atk >= 0 && atk < ATK_COUNT && lengths[atk] ? lengths[atk] : 150; } +int attack_length(int atk) { + if (atk >= ATK_RUINS_COUNT) return snow_attack_length(atk); + return atk >= 0 && lengths[atk] ? lengths[atk] : 150; +} void toriel_attack(int atk, int t); /* toriel.c */ @@ -677,7 +679,7 @@ void attack_run(Battle *b, int atk, int t) { case ATK_NAPSTA_TEXT: atk_napsta_text(t); break; case ATK_NAPSTA_HAT: atk_napsta_hat(t); break; case ATK_TOR_HANDS: case ATK_TOR_WAVES: case ATK_TOR_HELIX: case ATK_TOR_FALTER: toriel_attack(atk, t); break; - default: break; + default: if (atk >= ATK_RUINS_COUNT) snow_attack_run(b, atk, t); break; } } @@ -694,4 +696,5 @@ void attack_draw(Battle *b, int atk, int t) { } } if (atk >= ATK_TOR_HANDS && atk <= ATK_TOR_FALTER) toriel_draw_attack(atk, t); + if (atk >= ATK_RUINS_COUNT) snow_attack_draw(b, atk, t); } diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h index 68eaaa33..7820bf25 100644 --- a/games/undertale/src/monsters.h +++ b/games/undertale/src/monsters.h @@ -1,23 +1,49 @@ /* Undertale: the monsters, their formations and their attacks. */ #ifndef UT_MONSTERS_H #define UT_MONSTERS_H +#include enum { MON_DUMMY, MON_FROGGIT_FIRST, MON_FROGGIT, MON_WHIMSUN, MON_MOLDSMAL, MON_LOOX, MON_VEGETOID, MON_MIGOSP, - MON_NAPSTABLOOK, MON_TORIEL, MON_FLOWEY, MON_COUNT + MON_NAPSTABLOOK, MON_TORIEL, MON_FLOWEY, MON_RUINS_COUNT, + /* Snowdin (snowmon.c, papyrus.c) */ + MON_SNOWDRAKE = MON_RUINS_COUNT, MON_ICECAP, MON_GYFTROT, MON_DOGGO, MON_LESSERDOG, MON_DOGAMY, MON_DOGARESSA, + MON_GREATERDOG, MON_JERRY, MON_CHILLDRAKE, MON_GLYDE, MON_PAPYRUS, MON_COUNT }; /* formations: who is fought */ enum { FORM_DUMMY, FORM_FROGGIT_FIRST, FORM_FROGGIT, FORM_WHIMSUN, FORM_FROGGIT_WHIMSUN, FORM_FROGGIT2, FORM_MOLDSMAL, FORM_MOLDSMAL2, FORM_MOLDSMAL3, FORM_MOLDSMAL_MIGOSP, FORM_LOOX, FORM_LOOX2, FORM_VEGETOID, FORM_VEGETOID2, - FORM_VEGETOID_MIGOSP, FORM_LOOX_VEG_MIGOSP, FORM_NAPSTABLOOK, FORM_TORIEL, FORM_FLOWEY, FORM_COUNT + FORM_VEGETOID_MIGOSP, FORM_LOOX_VEG_MIGOSP, FORM_NAPSTABLOOK, FORM_TORIEL, FORM_FLOWEY, FORM_RUINS_COUNT, + /* Snowdin */ + FORM_SNOWDRAKE = FORM_RUINS_COUNT, FORM_ICECAP, FORM_LESSERDOG, FORM_CHILLDRAKE, FORM_ICECAP_JERRY, + FORM_ICECAP_JERRY_SNOWDRAKE, FORM_ICECAP_JERRY_CHILLDRAKE, FORM_GYFTROT, FORM_GLYDE, FORM_DOGGO, FORM_DOGI, + FORM_GREATERDOG, FORM_PAPYRUS, FORM_COUNT }; enum { ATK_NONE, ATK_FROG_FLIES, ATK_FROG_JUMP, ATK_FROG_RAIN, ATK_WHIM_RING, ATK_WHIM_COLS, ATK_MOLD_ZIG, ATK_MOLD_BURST, ATK_LOOX_BOUNCE, ATK_LOOX_WORM, ATK_VEG_FALL, ATK_VEG_CARROT, ATK_MIGOSP_ROACH, ATK_MIGOSP_DANCE, ATK_NAPSTA_TEARS, ATK_NAPSTA_WIGGLE, ATK_NAPSTA_TEXT, ATK_NAPSTA_HAT, ATK_NAPSTA_FLOOD, - ATK_TOR_HANDS, ATK_TOR_WAVES, ATK_TOR_HELIX, ATK_TOR_FALTER, ATK_IDLE, ATK_COUNT + ATK_TOR_HANDS, ATK_TOR_WAVES, ATK_TOR_HELIX, ATK_TOR_FALTER, ATK_IDLE, ATK_RUINS_COUNT, + /* Snowdin */ + ATK_DRAKE_ARCS = ATK_RUINS_COUNT, ATK_DRAKE_LINES, ATK_ICECAP_HATS, ATK_ICECAP_WAVES, ATK_GYFT_PRESENTS, + ATK_GYFT_SNOW, ATK_DOGGO_SWORD, ATK_LDOG_JUMP, ATK_LDOG_SPEARS, ATK_DOGI_AXES, ATK_DOGI_HEARTS, ATK_GDOG_SPEAR, + ATK_GDOG_BARK, ATK_GLYDE_STARS, ATK_PAP_FIRST, ATK_PAP_LAST = ATK_PAP_FIRST + 24, ATK_COUNT }; + +/* a formation: up to three monsters, and what the first turn says */ +typedef struct { + uint8_t mon[3]; + uint8_t n; + const char *text; +} Form; +struct Battle; +const Form *snow_form(int form); /* snowmon.c */ +const struct MonDef *snow_mon_def(int id); +void snow_attack_run(struct Battle *b, int atk, int t); +void snow_attack_draw(struct Battle *b, int atk, int t); +int snow_attack_length(int atk); +int snow_encounter(int room); /* a random encounter's formation there, -1 none */ #endif diff --git a/games/undertale/src/papyrus.c b/games/undertale/src/papyrus.c new file mode 100644 index 00000000..d9cecd34 --- /dev/null +++ b/games/undertale/src/papyrus.c @@ -0,0 +1,222 @@ +/* Papyrus, Snowdin's boss: his bones, the blue SOUL he gives you, his special attack and the dog that steals + * it (as the Undertale Wiki describes the fight). He never kills you: he captures you (the battle ends, + * snowtown.c takes it from there). */ +#include +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "monsters.h" +#include "res.h" + +/* b->state[0]: 0 before he's FOUGHT or spared, 1 the blue attack next, 2 blue; [1] flirts, [2] insults; + * [3] blue turns; [4] FOUGHT (1) or spared (2) first; [5] he spares you; [6] his speech this turn */ +enum { PAP_RED, PAP_BLUE_NEXT, PAP_BLUE }; + +static const char *const turn_lines[] = { + "BEHOLD!", "AND I HAVE A\n#RSPECIAL\nATTACK#X TOO!", "I CAN ALMOST\nHEAR THE\nCHEERING!!!", "PAPYRUS,\nROYAL\nGUARD!", "PAPYRUS,\nPASTA\nMASTER!", + "UNDYNE WILL\nBE SO\nPROUD!!", "THEY'LL MAKE\nA STATUE OF\nME! A BIG\nONE!!!", "SANS WILL...\nPROBABLY\nNAP THROUGH\nIT.", + "SO MANY\nFANS!!\nBUT...", "WILL THEY\nLIKE THE\nREAL ME???", "YOU'RE NOT\nLIKE MOST\nPEOPLE...", "ONCE YOU'RE\nCAPTURED...", + "THEY WON'T\nLET YOU\nGO, WILL\nTHEY...", "NO! GIVE UP\nALREADY!!", "OR FACE MY\n#RSPECIAL\nATTACK#X!!!", "IT'S COMING\nSOON! MY\n#RSPECIAL\nATTACK#X!", + "ANY TURN NOW\nTHE #RSPECIAL\nATTACK#X!!!", "LAST CHANCE\nBEFORE MY\n#RSPECIAL\nATTACK#X!!"}; +#define NTURNS (int)(sizeof turn_lines / sizeof turn_lines[0]) +#define SPECIAL_TURN NTURNS /* the dog steals it */ +#define NORMAL_TURN (NTURNS + 1) + +static void act_papyrus(Battle *b, Monster *m, int act, char *t, int cap) { + (void)m; + if (b->state[0] == PAP_BLUE) { + snprintf(t, (size_t)cap, act == 0 ? "* Papyrus is too busy FIGHTing to flirt back." : "* Papyrus is too busy FIGHTing to accept your insult."); + return; + } + if (act == 0) { + b->state[1]++; + snprintf(t, (size_t)cap, b->state[1] >= 3 ? "* You FLIRT, but to no avail.\n* Seems ACTing won't escalate this battle..." : "* You flirt with Papyrus."); + } else { + b->state[2]++; + snprintf(t, (size_t)cap, b->state[2] >= 4 ? "* You INSULT, but to no avail.\n* Seems ACTing won't escalate this battle..." : "* You insult Papyrus."); + } + b->state[6] = act + 1; +} + +static const char *talk_papyrus(Battle *b, Monster *m) { + (void)m; + int said = b->state[6]; + b->state[6] = 0; + /* the first FIGHT or MERCY: the blue attack comes */ + if (b->state[0] == PAP_RED && (b->last_action == 0 || b->last_action == 3)) { + b->state[0] = PAP_BLUE_NEXT; + return b->last_action == 0 ? "OH, A FIGHT,\nIS IT?|THEN TRY MY\nLEGENDARY\nBLUE ATTACK!" + : "NO FIGHTING?\nHMPH!|THEN TRY MY\nLEGENDARY\nBLUE ATTACK!"; + } + if (b->last_action == 2 && b->state[0] != PAP_BLUE) return "OOH, SNACKS!\nI SHOULD HAVE\nPACKED SOME."; + if (said == 1) { + if (b->state[1] == 1) return "FL-FLIRTING!?|I HAVE VERY\nHIGH\nSTANDARDS!!!|A DATE...\nAFTER THE\nCAPTURE!"; + return "AFTER THE\nCAPTURE! THEN\nWE'LL SEE!"; + } + if (said == 2) { + if (b->state[2] == 1) return "AH, I SEE!|YOU'RE BEING\nMEAN SO I\nFEEL OKAY\nFIGHTING YOU!"; + if (b->state[2] == 2) return "PRICKLY\nOUTSIDE, SOFT\nINSIDE!\nLIKE A\nCACTUS!"; + return "SAVE YOUR\nBREATH!"; + } + if (b->state[0] != PAP_BLUE) return b->state[0] == PAP_RED ? "NYEH HEH\nHEH!" : NULL; + /* his absolutely normal attack done: he spares you (and one hit would end him now) */ + if (m->state == 1) { + b->state[5] = 1, m->spare = true, m->state = 2; + m->df = (int16_t)(-2 * m->hp); + return "*HUFF*\nYOU CAN'T\nBEAT ME!\n*HUFF*|SO I'LL BE\nGENEROUS...|I #RSPARE#X\nYOU, HUMAN!|ACCEPT MY\n#RMERCY#X!"; + } + if (b->state[5]) return NULL; + int k = b->state[3]; + if (k < NTURNS) return turn_lines[k]; + if (k == SPECIAL_TURN) + return "AND NOW...\nMY #RSPECIAL\nATTACK#X!|HEY!!!|THE DOG TOOK\nIT!!!|...|FINE. A\nREGULAR\nATTACK,\nTHEN."; + if (k == NORMAL_TURN) return "*SIGH*\nA PERFECTLY\nORDINARY\nATTACK."; + return NULL; +} + +static const char *flavor_papyrus(Battle *b, Monster *m) { + (void)m; + if (b->state[5]) return "* Papyrus is sparing you."; + if (b->state[0] == PAP_BLUE && b->state[3] == 1) return "* You're blue now."; + if (b->state[3] > SPECIAL_TURN) return "* Papyrus is getting ready for a regular attack."; + if (b->state[1] && b->state[0] != PAP_BLUE) return "* Papyrus is thinking about what to wear for his date."; + return NULL; +} + +static int attack_papyrus(Battle *b, Monster *m) { + if (b->state[5]) return -1; + if (b->state[0] == PAP_RED) return ATK_PAP_FIRST; /* bones low along the floor */ + if (b->state[0] == PAP_BLUE_NEXT) { + b->state[0] = PAP_BLUE, b->state[3] = 0; + return ATK_PAP_FIRST + 1; /* the blue attack, then the SOUL goes blue */ + } + int k = ++b->state[3]; + if (k == SPECIAL_TURN) return ATK_PAP_FIRST + 9; /* the dog */ + if (k == NORMAL_TURN) { + m->state = 1; /* (after it, he spares you) */ + return ATK_PAP_FIRST + 10; + } + if (k <= 6) return ATK_PAP_FIRST + 1 + k; /* the wiki's patterns, in order */ + return ATK_PAP_FIRST + 3 + rnd_n(6); +} + +static bool hit_papyrus(Battle *b, Monster *m, int dmg) { + (void)b; + if (b->state[0] == PAP_RED) b->state[4] = 1; + (void)m, (void)dmg; + return false; +} + +const MonDef papyrus_def = { + .name = "Papyrus", .hp = 680, .at = 8, .df = 2, .exp = 200, .gold = 0, .spr_idle = SPR_PAPYRUS_B, + .spr_hurt = SPR_PAPYRUS_HURT, .check = "He likes to say:\n* \"Nyeh heh heh!\"", .acts = {"Flirt", "Insult"}, .nacts = 2, + .neutral = {"* Papyrus is preparing a bone attack.", "* Papyrus is cackling.", "* Papyrus whispers \"Nyeh heh heh!\"", + "* Papyrus is rattling his bones.", "* Papyrus is trying hard to play it cool.", + "* Papyrus is considering his options."}, + .flags = MF_BOSS, .act = act_papyrus, .talk = talk_papyrus, .attack = attack_papyrus, .flavor = flavor_papyrus, + .on_hit = hit_papyrus, +}; + +/* ---------------------------------------------------------------- his bones */ +#define P(v) ((v) * FX) +static int bx0(void) { return bt.x0 + 3; } +static int bx1(void) { return bt.x1 - 3; } +static int by0(void) { return bt.y0 + 3; } +static int by1(void) { return bt.y1 - 3; } + +/* a bone of a pattern: when (frames), how tall (from the floor, or hanging from the ceiling when negative), + * blue, fast, and from the right instead of the left */ +typedef struct { + uint16_t at; + uint8_t h, ceil, blue, fast, right; +} Bone; +static void bone(const Bone *k) { + bool right = k->right; + int sp = k->fast ? P(4) : P(2); + int y = k->ceil ? by0() + k->h / 2 : by1() - k->h / 2; + Bullet *b = bullet_new(SPR_BONE, P(right ? bx1() + 4 : bx0() - 4), P(y), right ? -sp : sp, 0); + if (!b) return; + b->flags |= BF_BOX, b->w = 5, b->h = k->h, b->owner = (uint8_t)bt.atk_owner; + if (k->blue) b->color = BC_BLUE; +} + +/* the patterns (heights halved from the game's: small 10, medium 20, large 30): a floor bone F, one hanging from + * the ceiling C, a blue one BL, from the right R (C from the right: RC), fast from the right FR */ +#define F(at, h) {at, h, 0, 0, 0, 0} +#define C(at, h) {at, h, 1, 0, 0, 0} +#define BL(at) {at, 60, 0, 1, 0, 0} +#define R(at, h) {at, h, 0, 0, 0, 1} +#define RC(at, h) {at, h, 1, 0, 0, 1} +#define FR(at, h) {at, h, 0, 0, 1, 1} +static const Bone pat_red[] = {F(0, 8), F(16, 10), F(32, 12), F(48, 14), F(64, 16), F(80, 14), F(96, 12), F(112, 10), F(128, 8)}; +static const Bone pat_blue[] = {BL(0), BL(20), BL(40), BL(60), F(120, 10)}; +static const Bone pat_2[] = {F(0, 10), F(20, 10), F(40, 10), F(60, 10), F(90, 20)}; +static const Bone pat_3[] = {F(0, 10), F(30, 20), F(55, 20), F(80, 20), F(110, 30), F(140, 30), F(170, 30)}; +static const Bone pat_4[] = {F(0, 30), C(40, 30), F(70, 10), F(85, 10), F(100, 10), F(125, 20), C(160, 30)}; +static const Bone pat_5[] = {F(0, 30), F(35, 30), F(70, 30), BL(105), FR(140, 10)}; +static const Bone pat_6[] = {F(0, 12), C(0, 30), F(40, 12), C(40, 30), RC(80, 30), F(120, 8), F(126, 12), F(132, 16), + F(138, 20), F(144, 20), F(150, 16), F(156, 12), F(162, 8)}; +static const Bone pat_7[] = {F(0, 12), C(0, 30), F(25, 12), C(25, 30), F(60, 22), C(60, 22), F(85, 22), C(85, 22), BL(120), + R(150, 30), F(185, 12), C(185, 30), R(185, 12), RC(185, 30)}; +static const Bone pat_normal[] = {F(0, 10), F(15, 10), F(30, 20), F(50, 30), C(70, 30), FR(95, 10), F(110, 20), BL(125), + F(150, 12), C(150, 30), F(175, 12), C(175, 30), F(205, 8), F(210, 12), F(215, 16), + F(220, 20), F(225, 24), F(230, 20), F(235, 16), F(240, 12), F(245, 8), F(275, 30), + FR(300, 30), F(320, 10), F(330, 10), F(340, 10), F(350, 10)}; +typedef struct { + const Bone *bones; + int n, len; +} Pattern; +#define PAT(a, len) {a, (int)(sizeof a / sizeof a[0]), len} +static const Pattern pats[] = { + PAT(pat_red, 200), PAT(pat_blue, 200), PAT(pat_2, 170), PAT(pat_3, 250), PAT(pat_4, 240), PAT(pat_5, 220), + PAT(pat_6, 240), PAT(pat_7, 270), PAT(pat_2, 170), {NULL, 0, 220}, PAT(pat_normal, 420)}; + +int papyrus_attack_length(int atk) { return pats[atk - ATK_PAP_FIRST].len; } + +void papyrus_attack(int atk, int t) { + int k = atk - ATK_PAP_FIRST; + if (t == 0) { + /* his board: wide and low; the SOUL on the floor once it's blue */ + if (k == 0) board_set(110, 60); + else board_set(140, 60); + if (k >= 2) soul_set_mode(SOUL_BLUE); + if (bt.soul_mode == SOUL_BLUE) bt.sy = P(by1() - 3); + } + if (k == 1 && t == 100) { /* the blue bones passed: now your SOUL's blue */ + soul_set_mode(SOUL_BLUE); + } + const Pattern *p = &pats[k]; + for (int i = 0; i < p->n; i++) + if (p->bones[i].at == t) bone(&p->bones[i]); + /* the dog: it trots in, takes the special attack's bone and runs off with it (harmless) */ + if (k == 9) { + if (t == 20) { + Bullet *b = bullet_new(SPR_BONE, P((bx0() + bx1()) / 2), P(by1() - 12), 0, 0); + if (b) b->flags |= BF_BOX | BF_HARMLESS, b->w = 24, b->h = 6, b->kind = BK_SCRIPT, b->a = 1; + } + if (t == 60) { + Bullet *d = bullet_new(SPR_DOG_OW, P(bx1() + 10), P(by1() - 6), -P(1), 0); + if (d) d->flags |= BF_HARMLESS, d->anim = 6; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *d = &bullets[i]; + if (d->spr != SPR_DOG_OW || d->kind == BK_NONE) continue; + /* at the bone: it takes it and goes the other way */ + if (d->vx < 0 && d->x <= P((bx0() + bx1()) / 2 + 6)) { + d->vx = P(2), d->spr = SPR_DOG_BONE; + for (int j = 0; j < MAX_BULLETS; j++) + if (bullets[j].kind == BK_SCRIPT && bullets[j].a == 1) bullets[j].kind = BK_NONE; + } + } + } + /* the normal attack's dog: it runs across, and it hurts */ + if (k == 10 && t == 260) { + Bullet *d = bullet_new(SPR_DOG_OW, P(bx0() - 10), P(by1() - 6), P(3), 0); + if (d) d->owner = (uint8_t)bt.atk_owner, d->dmg = 3, d->r = 6, d->anim = 4; + } +} + +void papyrus_attack_draw(int atk, int t) { + (void)atk, (void)t; +} diff --git a/games/undertale/src/res.c b/games/undertale/src/res.c index 575c3a44..e81f146b 100644 --- a/games/undertale/src/res.c +++ b/games/undertale/src/res.c @@ -1,4 +1,5 @@ /* data.bin: sections, sprites, tiles, rooms and strings (see res.h). */ +#include #include "res.h" const uint8_t *ut_bin; @@ -56,6 +57,7 @@ void room_info(int room, RoomInfo *r) { r->cw = rd16(p + 24), r->ch = rd16(p + 26); r->area = p[28], r->flags = p[29]; r->name = rd16(p + 30); + r->ice = (r->flags & ROOM_ICE) ? r->coll + ((r->cw + 7) >> 3) * r->ch : NULL; } const char *str(uint16_t id) { diff --git a/games/undertale/src/res.h b/games/undertale/src/res.h index 8fa4a1e6..558cae8d 100644 --- a/games/undertale/src/res.h +++ b/games/undertale/src/res.h @@ -46,16 +46,19 @@ typedef struct { uint16_t cw, ch; /* 4-pixel cells over the rectangle */ uint8_t area, flags; uint16_t name; /* string: what SAVE shows */ + const uint8_t *ice; /* the same bits for ice (Frisk slides), NULL none */ } RoomInfo; +#define ROOM_ICE 1 void room_info(int room, RoomInfo *r); /* a door of a room: walking into its rectangle takes Frisk to another room */ typedef struct { int16_t x, y, w, h; uint16_t room; - int16_t tx, ty; + int16_t tx, ty; /* where Frisk lands; DOOR_KEEP: where he is */ uint16_t dir; } Door; +#define DOOR_KEEP (-32768) int room_doors(int room, Door *out, int max); const char *str(uint16_t id); diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index fe113eaa..2f8cf1f0 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -6,17 +6,37 @@ #include "game.h" #include "monsters.h" #include "ruins.h" +#include "snowdin.h" #include "world.h" void room_setup(int room, int from) { ruins1_setup(room, from); ruins2_setup(room, from); ruins3_setup(room, from); + snow1_setup(room, from); + snow2_setup(room, from); + town_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ void room_update(void) { ruins2_update(); + snow1_update(); + snow2_update(); +} + +/* what a room draws on its floor, under everything (world.c) */ +void room_draw_floor(void) { + snow1_draw(); + snow2_draw(); +} + +bool room_ice(int x, int y) { + const RoomInfo *ri = world_room_info(); + if (!ri || !ri->ice) return false; + int cx = (x - ri->x) >> 2, cy = (y - ri->y) >> 2; + if (cx < 0 || cy < 0 || cx >= ri->cw || cy >= ri->ch) return false; + return ri->ice[cy * ((ri->cw + 7) >> 3) + (cx >> 3)] >> (cx & 7) & 1; } /* random encounters: a room's formations and how many steps between them (the game counts its steps, @@ -47,9 +67,11 @@ void encounter_step(void) { const Encounters *e = NULL; for (unsigned i = 0; i < sizeof enc / sizeof enc[0]; i++) if (enc[i].room == g_room) e = &enc[i]; - if (!e) return; + /* Snowdin's are snowmon.c's (who comes depends on what's happened) */ + int snow = e ? -1 : snow_encounter(g_room); + if (!e && snow < 0) return; if (--steps_left > 0) return; steps_left = 100 + rnd_n(200); event_start(EV_ENCOUNTER, NULL); - event_cur_arg(e->forms[rnd_n(e->n)]); + event_cur_arg(e ? e->forms[rnd_n(e->n)] : snow); } diff --git a/games/undertale/src/ruins3.c b/games/undertale/src/ruins3.c index e2ccb720..4a6562d8 100644 --- a/games/undertale/src/ruins3.c +++ b/games/undertale/src/ruins3.c @@ -297,10 +297,10 @@ static int ev_flowey_end(Ev *c) { /* the door out of the Ruins: the rest of the underground is still to come */ static int ev_ruins_door(Ev *c) { EV_BEGIN; + /* out of the Ruins: Snowdin's snow */ set_flag(F_RUINS_EXIT, 1); - sv.room = (int16_t)g_room, sv.x = pl.x, sv.y = (int16_t)(pl.y + 30); - save_write_auto(); - menu_end_open(); + world_fade_hold(ROOM_SNOWDIN1, 34, 392, DIR_DOWN, 20); + WAIT_UNTIL(!world_fading()); EV_END; } diff --git a/games/undertale/src/shop.c b/games/undertale/src/shop.c new file mode 100644 index 00000000..4686cbdc --- /dev/null +++ b/games/undertale/src/shop.c @@ -0,0 +1,241 @@ +/* Shops, as the game shows them: the keeper's picture over a text box and Buy, Sell, Talk, Exit; and the + * Dimensional Box (an inventory you leave items in). Both are their own mode (MODE_SHOP). */ +#include +#include +#include "event.h" +#include "game.h" +#include "gfx.h" +#include "items.h" +#include "res.h" +#include "shop.h" +#include "text.h" + +typedef struct { + uint8_t item; + uint8_t price; +} Ware; +typedef struct { + uint16_t pic; + const char *hello, *again, *buying, *bought, *poor, *full, *nobuy, *sell; + Ware wares[4]; + int nwares; + const char *topics[4]; + const char *answers[4]; + int ntopics; +} Shop; + +static const Shop shops[SHOP_COUNT] = { + [SHOP_SNOWDIN] = { + .pic = SPR_SHOP_QC, .hello = "* Hello, traveller.\n* How can I help you?", .again = "* Take your time.", + .buying = "What would\nyou like\nto buy?", .bought = "Thanks for\nyour purchase.", .poor = "That's not\nenough money.", + .full = "You're\ncarrying\ntoo much.", .nobuy = "Just\nlooking?", + .sell = "* Huh? Sell somethin'?\n* Does this look like a pawn shop?", + .wares = {{ITEM_TOUGH_GLOVE, 50}, {ITEM_MANLY_BANDANNA, 50}, {ITEM_BISICLE, 15}, {ITEM_CINNAMON_BUNNY, 25}}, .nwares = 4, + .topics = {"Say hello", "What to do here", "Town history", "Your life"}, + .answers = {"* Hello! Welcome to Snowdin!\n* I can't remember the last time I saw a new face around here.", + "* If you're tired, the inn's right next door. My sister runs it.|* And there's Grillby's, if you're hungry.", + "* Long ago, monsters lived in the RUINS back there.|* When we came here, the cold made it easy to get used to the snow.", + "* Life is the same as usual.\n* A little cold, though..."}, + .ntopics = 4}, +}; + +static int shop_id, st, sel, sub; +static Writer w; +static char buf[300]; +static const char *right_text; +static bool is_box; +enum { S_MENU, S_BUY, S_CONFIRM, S_TALK, S_SAY }; + +static void left_say(const char *s) { + snprintf(buf, sizeof buf, "%s", s); + text_wrap_width(190); + writer_start(&w, buf, 12, 133, FONT_MAIN); + w.line_h = 16; +} + +void shop_open(int id) { + shop_id = id, is_box = false; + st = S_MENU, sel = 0, sub = 0, right_text = NULL; + left_say(shops[id].hello); + g_mode = MODE_SHOP; +} + +/* the Bisicle costs more after each boss fought (the game's 15G and up) */ +static int price_of(const Ware *wa) { + if (wa->item == ITEM_BISICLE) return min_i(70, wa->price + 5 * flag(F_SNOWDIN_BOSSES)); + return wa->price; +} + +/* ---------------------------------------------------------------- the Dimensional Box */ +#define BOX_SLOTS 10 +void box_open(void) { + is_box = true, sel = 0, sub = 0; + g_mode = MODE_SHOP; +} +static int box_item(int i) { return flag(F_BOX0 + i); } + +static void box_update(uint32_t pressed) { + int n = sub ? BOX_SLOTS : NUM_ITEMS; + if (pressed & K_UP) sel = (sel + n - 1) % n; + if (pressed & K_DOWN) sel = (sel + 1) % n; + if (pressed & (K_LEFT | K_RIGHT)) sub = !sub, sel = min_i(sel, (sub ? BOX_SLOTS : NUM_ITEMS) - 1); + if (pressed & K_Z) { + if (!sub && sv.items[sel]) { + for (int i = 0; i < BOX_SLOTS; i++) + if (!box_item(i)) { + set_flag(F_BOX0 + i, sv.items[sel]); + item_remove_at(sel); + break; + } + } else if (sub && box_item(sel) && item_add(box_item(sel))) { + /* the box keeps its order: the ones after move up */ + for (int i = sel; i < BOX_SLOTS - 1; i++) set_flag(F_BOX0 + i, box_item(i + 1)); + set_flag(F_BOX0 + BOX_SLOTS - 1, 0); + } + } + if (pressed & K_X) g_mode = MODE_WORLD; +} + +static void panel(int x, int y, int w_, int h) { + gfx_rect(x, y, w_, h, C_BLACK, 255); + gfx_frame_rect(x, y, w_, h, 3, C_WHITE); +} + +static void box_draw(void) { + gfx_rect(0, 0, SCREEN_W, SCREEN_H, C_BLACK, 255); + panel(8, 8, 304, 224); + gfx_text(FONT_MENU, 50, 18, "INVENTORY", C_WHITE, 255); + gfx_text(FONT_MENU, 210, 18, "BOX", C_WHITE, 255); + gfx_line(160, 20, 160, 210, C_WHITE); + for (int i = 0; i < NUM_ITEMS; i++) { + const char *nm = sv.items[i] ? item_info(sv.items[i])->name : ""; + if (sv.items[i]) gfx_text(FONT_MENU, 36, 40 + i * 20, nm, C_WHITE, 255); + else gfx_rect(36, 48 + i * 20, 100, 1, rgb565(0xC00000), 255); + } + for (int i = 0; i < BOX_SLOTS; i++) { + if (box_item(i)) gfx_text(FONT_MENU, 190, 36 + i * 17, item_info(box_item(i))->name, C_WHITE, 255); + else gfx_rect(190, 44 + i * 17, 100, 1, rgb565(0xC00000), 255); + } + gfx_sprite(SPR_HEART, 0, sub ? 180 : 26, sub ? 42 + sel * 17 : 46 + sel * 20, 0, 255); + gfx_text(FONT_MENU, 120, 214, "Press [X] to Finish", C_WHITE, 255); +} + +/* ---------------------------------------------------------------- the shop */ +void shop_update(uint32_t keys, uint32_t pressed) { + (void)keys; + if (is_box) { + box_update(pressed); + return; + } + const Shop *s = &shops[shop_id]; + bool typing = writer_update(&w, st == S_SAY ? pressed : 0); + switch (st) { + case S_MENU: + if (pressed & K_UP) sel = (sel + 3) % 4; + if (pressed & K_DOWN) sel = (sel + 1) % 4; + if (pressed & K_Z) { + if (sel == 0) st = S_BUY, sub = 0, right_text = s->buying; + else if (sel == 1) st = S_SAY, left_say(s->sell); + else if (sel == 2) st = S_TALK, sub = 0; + else g_mode = MODE_WORLD; + } + break; + case S_BUY: + if (pressed & K_UP) sub = (sub + s->nwares) % (s->nwares + 1); + if (pressed & K_DOWN) sub = (sub + 1) % (s->nwares + 1); + if (pressed & K_X || ((pressed & K_Z) && sub == s->nwares)) { + st = S_MENU, left_say(s->again); + break; + } + if (pressed & K_Z) st = S_CONFIRM, sel = 0; + break; + case S_CONFIRM: + if (pressed & (K_UP | K_DOWN)) sel = !sel; + if (pressed & K_X) st = S_BUY, right_text = s->nobuy; + else if (pressed & K_Z) { + const Ware *wa = &s->wares[sub]; + if (sel == 1) right_text = s->nobuy; + else if (sv.gold < price_of(wa)) right_text = s->poor; + else if (!item_add(wa->item)) right_text = s->full; + else sv.gold = (uint16_t)(sv.gold - price_of(wa)), right_text = s->bought; + st = S_BUY; + } + break; + case S_TALK: + if (pressed & K_UP) sub = (sub + s->ntopics) % (s->ntopics + 1); + if (pressed & K_DOWN) sub = (sub + 1) % (s->ntopics + 1); + if (pressed & K_X || ((pressed & K_Z) && sub == s->ntopics)) { + st = S_MENU, left_say(s->again); + break; + } + if (pressed & K_Z) st = S_SAY, left_say(s->answers[sub]); + break; + case S_SAY: + if (!typing) st = S_MENU, left_say(s->again); + break; + } +} + +static void wares_list(const Shop *s, bool topics) { + int n = topics ? s->ntopics : s->nwares; + for (int i = 0; i <= n; i++) { + char line[48]; + if (i == n) snprintf(line, sizeof line, "Exit"); + else if (topics) snprintf(line, sizeof line, "%s", s->topics[i]); + else snprintf(line, sizeof line, "%dG - %s", price_of(&s->wares[i]), item_info(s->wares[i].item)->name); + gfx_text(FONT_MAIN, 30, 132 + i * 18, line, C_WHITE, 255); + } + if (!(st == S_CONFIRM)) gfx_sprite(SPR_HEART, 0, 20, 140 + sub * 18, 0, 255); +} + +void shop_draw(void) { + if (is_box) { + box_draw(); + return; + } + const Shop *s = &shops[shop_id]; + gfx_rect(0, 0, SCREEN_W, SCREEN_H, C_BLACK, 255); + gfx_sprite(s->pic, 0, 0, 0, 0, 255); + panel(2, 121, 210, 117); + panel(212, 121, 106, 117); + char g[24]; + snprintf(g, sizeof g, "%dG", sv.gold); + gfx_text(FONT_MAIN, 226, 214, g, C_WHITE, 255); + snprintf(g, sizeof g, "%d/8", item_count()); + gfx_text(FONT_MAIN, 276, 214, g, C_WHITE, 255); + if (st == S_MENU || st == S_SAY) { + writer_draw(&w, C_WHITE); + static const char *const opts[] = {"Buy", "Sell", "Talk", "Exit"}; + for (int i = 0; i < 4; i++) gfx_text(FONT_MAIN, 238, 132 + i * 20, opts[i], C_WHITE, 255); + if (st == S_MENU) gfx_sprite(SPR_HEART, 0, 228, 140 + sel * 20, 0, 255); + return; + } + wares_list(s, st == S_TALK); + if (st == S_CONFIRM) { + char q[40]; + snprintf(q, sizeof q, "Buy it for\n%dG?", price_of(&s->wares[sub])); + gfx_text(FONT_MAIN, 222, 132, q, C_WHITE, 255); + gfx_text(FONT_MAIN, 238, 172, "Yes", C_WHITE, 255); + gfx_text(FONT_MAIN, 238, 190, "No", C_WHITE, 255); + gfx_sprite(SPR_HEART, 0, 228, 180 + sel * 18, 0, 255); + } else if (st == S_BUY) { + if (sub < s->nwares) { + /* what the item is: its kind and what it does */ + const ItemInfo *it = item_info(s->wares[sub].item); + char info[64]; + if (it->type == IT_WEAPON) snprintf(info, sizeof info, "Weapon:\nAT %d", it->at); + else if (it->type == IT_ARMOR) snprintf(info, sizeof info, "Armor:\nDF %d", it->df); + else snprintf(info, sizeof info, "Heals\n%d HP", it->heal); + gfx_text(FONT_MAIN, 222, 172, info, C_WHITE, 255); + } + if (right_text) gfx_text(FONT_SMALL, 222, 130, right_text, C_WHITE, 255); + } +} + +/* the Dimensional Box as an event: it opens, and the event waits for it to close */ +int box_menu(Ev *c) { + EV_BEGIN; + box_open(); + WAIT_UNTIL(g_mode == MODE_WORLD); + EV_END; +} diff --git a/games/undertale/src/shop.h b/games/undertale/src/shop.h new file mode 100644 index 00000000..2d2bd970 --- /dev/null +++ b/games/undertale/src/shop.h @@ -0,0 +1,10 @@ +/* Undertale: shops and the Dimensional Box (shop.c). */ +#ifndef UT_SHOP_H +#define UT_SHOP_H +#include +enum { SHOP_SNOWDIN, SHOP_COUNT }; +void shop_open(int id); /* MODE_SHOP until Exit */ +void box_open(void); +void shop_update(uint32_t keys, uint32_t pressed); +void shop_draw(void); +#endif diff --git a/games/undertale/src/snowdin.h b/games/undertale/src/snowdin.h new file mode 100644 index 00000000..26860774 --- /dev/null +++ b/games/undertale/src/snowdin.h @@ -0,0 +1,25 @@ +/* Undertale: Snowdin, the forest (snowdin1.c, snowdin2.c) and the town (snowtown.c), its monsters (snowmon.c), + * Papyrus (papyrus.c), the shops (shop.c). */ +#ifndef UT_SNOWDIN_H +#define UT_SNOWDIN_H +#include "event.h" +void snow1_setup(int room, int from); +int snow1_event(Ev *c); /* -1: not one of its */ +void snow1_update(void); +void snow1_draw(void); /* what its rooms draw over the floor (footprints, the tiles) */ +void snow2_setup(int room, int from); +int snow2_event(Ev *c); +void snow2_update(void); +void snow2_draw(void); +void town_setup(int room, int from); +int town_event(Ev *c); +void snow_doggo_stick(void); +void snow_battle_done(int form); /* snowmon.c: who was killed, who met */ /* Doggo was spared with the stick (his talk after) */ +/* Sans and Papyrus, their feet at (x, y) */ +Obj *obj_sans(int x, int y, int dir); +Obj *obj_papyrus(int x, int y, int dir); +/* the camera moves to (x, y) (its top-left), sp pixels a frame; true once there (it stays until world_enter or + * cam_free) */ +bool cam_pan(int x, int y, int sp); +void cam_free(void); +#endif diff --git a/games/undertale/src/snowdin1.c b/games/undertale/src/snowdin1.c new file mode 100644 index 00000000..b2e16c29 --- /dev/null +++ b/games/undertale/src/snowdin1.c @@ -0,0 +1,611 @@ +/* Snowdin Forest, from the Ruins' door to the word search: Sans and his brother Papyrus, Doggo, the ice, the + * Snowman, the Invisible Electricity Maze, the Ball Game, the Nice Cream guy. Signs and short lines are the + * game's (as the Undertale Wiki records them); the longer talks are kept short. */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "gfx.h" +#include "items.h" +#include "monsters.h" +#include "snowdin.h" +#include "world.h" + +/* ---------------------------------------------------------------- Sans and Papyrus */ +Obj *obj_sans(int x, int y, int dir) { + static const uint16_t s[4] = {SPR_SANS_D}; + Obj *o = obj_npc(ACTOR_SANS, s, x, y, dir, 0); + if (o) o->flags &= (uint16_t)~OF_WALKANIM; + return o; +} +Obj *obj_papyrus(int x, int y, int dir) { + static const uint16_t s[4] = {SPR_PAPYRUS_D, SPR_PAPYRUS_D, SPR_PAPYRUS_L, SPR_PAPYRUS_R}; + Obj *o = obj_npc(ACTOR_PAPYRUS, s, x, y, dir, 0); + if (o) o->anim_speed = 4; + return o; +} +static void gone(Obj *o) { o->kind = OBJ_NONE; } + +/* ---------------------------------------------------------------- the electricity maze */ +/* its path (the feet's middle), from the entrance to Papyrus at the exit */ +static const int16_t maze_path[][2] = {{5280, 380}, {5340, 380}, {5340, 340}, {5400, 340}, {5400, 440}, {5470, 440}}; +#define MAZE_POINTS 6 +/* the invisible walls: the maze's box but the path, 26 pixels wide */ +static const int16_t maze_walls[][4] = { + {5280, 270, 190, 57}, {5280, 327, 47, 40}, {5280, 393, 107, 73}, {5353, 353, 34, 40}, {5413, 327, 57, 100}, + {5387, 453, 83, 13}}; +static int maze_prints; /* how far back from the exit Papyrus's footprints go (pixels) */ +static bool maze_growing; /* he's walking it, leaving them */ +static int maze_len(void) { + int n = 0; + for (int i = 1; i < MAZE_POINTS; i++) + n += abs_i(maze_path[i][0] - maze_path[i - 1][0]) + abs_i(maze_path[i][1] - maze_path[i - 1][1]); + return n; +} + +/* ---------------------------------------------------------------- the Ball Game */ +#define BALL_X 5890 +#define BALL_Y 352 +#define HOLE_X 5961 +#define HOLE_Y 690 +static struct { + int vx, vy; /* 1/16 px a frame */ + int t; /* frames since first kicked (0: not yet) */ + bool sunk; +} ball; + +static void ball_place(Obj *b) { + b->x = BALL_X, b->y = BALL_Y, b->frame = 0; + obj_set_box(b, -9, -9, 18, 18); + ball.vx = ball.vy = 0, ball.t = 0, ball.sunk = false; +} + +static void ball_update(void) { + Obj *b = obj_find(ACTOR_BALL); + if (!b || ball.sunk) return; + int r = 10 - b->frame; + /* Frisk walking into it kicks it the way he faces */ + int fx = pl.x + 3, fy = pl.y + 20; + if (pl.moving && fx < b->x + r + 2 && fx + 14 > b->x - r - 2 && fy < b->y + r + 2 && fy + 9 > b->y - r - 2) { + static const int8_t dx[4] = {0, 0, -1, 1}, dy[4] = {1, -1, 0, 0}; + ball.vx = dx[pl.dir] * 4 * FX, ball.vy = dy[pl.dir] * 4 * FX; + if (!ball.t) ball.t = 1; + } + if (!ball.t) return; + ball.t++; + /* it melts as it goes: smaller every three seconds (faster on ice), then gone, then a new one */ + bool ice = room_ice(b->x, b->y); + if (ball.t % (ice ? 45 : 90) == 0) { + if (b->frame >= 7) { + ball_place(b); + return; + } + b->frame++; + r = 10 - b->frame; + obj_set_box(b, -r + 1, -r + 1, 2 * r - 2, 2 * r - 2); + } + /* rolls on, slowing (less on ice); bounces off what stops it */ + for (int axis = 0; axis < 2; axis++) { + int v = axis ? ball.vy : ball.vx; + if (!v) continue; + int nx = b->x + (axis ? 0 : v / FX), ny = b->y + (axis ? v / FX : 0); + if (world_walkable(nx - r + 1, ny - r + 1, 2 * r - 2, 2 * r - 2, (int)(b - objs))) b->x = (int16_t)nx, b->y = (int16_t)ny; + else if (axis) ball.vy = -ball.vy / 2; + else ball.vx = -ball.vx / 2; + } + int fr = ice ? 1 : 3; + ball.vx += ball.vx > 0 ? -fr : ball.vx < 0 ? fr : 0; + ball.vy += ball.vy > 0 ? -fr : ball.vy < 0 ? fr : 0; + if (abs_i(ball.vx) < fr) ball.vx = 0; + if (abs_i(ball.vy) < fr) ball.vy = 0; + /* in the hole */ + if (abs_i(b->x - HOLE_X) < 7 && abs_i(b->y - HOLE_Y) < 6 && !event_running()) { + ball.sunk = true; + event_start(EV_BALL_HOLE, b); + } +} + +/* ---------------------------------------------------------------- the rooms' things */ +void snow1_setup(int room, int from) { + (void)from; + switch (room) { + case ROOM_SNOWDIN1: + if (!flag(F_BRANCH)) obj_trigger(1026, 380, 20, 100, EV_BRANCH, ACTOR_TRIGGER); + else obj_sign(996, 384, 26, 30, "* (It's been smashed like it was nothing...)"); + break; + case ROOM_SNOWDIN5: { + Obj *l = obj_deco(SPR_LAMP, 2960, 365, true); + if (l) { + l->name = ACTOR_BLOCK, l->flags |= OF_TALK, l->event = EV_SIGN, l->text = "* (It's a conveniently-shaped lamp.)"; + obj_set_box(l, 2, 22, 15, 9); + } + obj_sign(3004, 300, 60, 66, "* (It's some sort of checkpoint or sentry-station.)|* (But there are bottles of ketchup, mustard, and relish sitting inside...)"); + if (!flag(F_SANS_MET)) obj_trigger(2572, 380, 40, 100, EV_SANS_INTRO, ACTOR_TRIGGER); + break; + } + case ROOM_BOXROAD: + obj_save(3240, 376, "* (The convenience of that lamp still fills you with determination.)"); + obj_sign(3420, 334, 20, 22, "* (This is a box.)|* (You can put an item inside or take an item out.)|* (The same box will appear later, so don't worry about coming back.)|* (Sincerely, a box lover.)"); + { + Obj *b = obj_trigger(3444, 334, 26, 24, EV_BOX, ACTOR_ITEM); + if (b) b->flags = OF_TALK | OF_SOLID; + } + break; + case ROOM_RIVER: { + Obj *r = obj_trigger(3428, 116, 26, 34, EV_FISHROD, ACTOR_ITEM); + if (r) r->flags = OF_TALK; + break; + } + case ROOM_PAPSENTRY: + obj_sign(3966, 296, 52, 64, "* YOU OBSERVE THE WELL-CRAFTED SENTRY STATION.|* WHO COULD HAVE BUILT THIS, YOU PONDER...|* I BET IT WAS THAT VERY FAMOUS ROYAL GUARDSMAN!|* (NOTE: NOT YET A VERY FAMOUS ROYAL GUARDSMAN.)"); + if (!flag(F_PAP_SENTRY)) { + obj_sans(3616, 414, DIR_RIGHT); + obj_papyrus(3660, 414, DIR_LEFT); + obj_trigger(3540, 370, 34, 110, EV_PAP_SENTRY, ACTOR_TRIGGER); + } + break; + case ROOM_DOGGO: + obj_sign(4204, 384, 22, 22, "* (Absolutely NO MOVING!!!)"); + obj_sign(4486, 398, 26, 16, "* (It's a bag of smoked dog treats.)"); + obj_sign(4296, 330, 88, 66, flag(F_DOGGO) == 2 ? "* (It's a sentry station. No one is inside.)" : "* (It's Doggo's sentry station.)"); + if (!flag(F_DOGGO)) obj_trigger(4296, 398, 70, 80, EV_DOGGO, ACTOR_TRIGGER); + break; + case ROOM_ICEFIELD: + obj_sign(4864, 368, 24, 28, "* North: Ice\n South: Ice\n West: Ice|* East: Snowdin Town\n (... and ice)"); + { + Obj *s = obj_sans(4686, 409, DIR_DOWN); + if (s) s->event = EV_SANS_TALK, s->arg = 1, s->flags |= OF_TALK; + } + break; + case ROOM_SNOWMAN: { + Obj *s = obj_trigger(4904, 60, 40, 44, EV_SNOWMAN, ACTOR_ITEM); + if (s) s->flags = OF_TALK | OF_SOLID; + break; + } + case ROOM_ELECMAZE: + if (flag(F_ELECMAZE) < 2) { + obj_papyrus(5484, 446, DIR_LEFT); + if (!flag(F_ELECMAZE)) obj_trigger(5200, 280, 30, 200, EV_ELECMAZE, ACTOR_TRIGGER); + else obj_trigger(5440, 420, 30, 40, EV_ELECMAZE, ACTOR_TRIGGER2); + } + if (flag(F_ELECMAZE) == 1) + for (unsigned i = 0; i < sizeof maze_walls / sizeof maze_walls[0]; i++) + obj_trigger(maze_walls[i][0], maze_walls[i][1], maze_walls[i][2], maze_walls[i][3], EV_MAZE_ZAP, ACTOR_BLOCK); + { + Obj *s = obj_sans(5464, 336, DIR_DOWN); + if (s) s->event = EV_SANS_TALK, s->arg = 2, s->flags |= OF_TALK; + } + maze_prints = flag(F_ELECMAZE) ? maze_len() : 0; + break; + case ROOM_BALLGAME: { + Obj *n = obj_trigger(5594, 280, 54, 30, EV_NICECREAM, ACTOR_ITEM); + if (n) n->flags = OF_TALK | OF_SOLID; + obj_sign(5682, 382, 18, 16, "* (It's a snowdecahedron.)"); + obj_sign(HOLE_X - 11, HOLE_Y - 8, 22, 16, "* Ah! Wow! Woah!\n* It's a \"#RHole#X\"."); + if (flag(F_KILLS_SNOWDIN) < 8) { + Obj *b = obj_deco(SPR_SNOWBALL, BALL_X, BALL_Y, true); + if (b) b->name = ACTOR_BALL, ball_place(b); + } + Obj *s = obj_sans(6136, 336, DIR_DOWN); + if (s) s->event = EV_SANS_TALK, s->arg = 3, s->flags |= OF_TALK; + break; + } + case ROOM_DOGI: + obj_sign(6426, 310, 24, 24, "* SMELL DANGER RATING|* Snow Smell - Snowman\n WHITE Rating\n Can become #YYELLOW#X Rating|* Unsuspicious Smell - Puppy\n #BBLUE#X Rating\n Smell of rolling around.|* Weird Smell - Humans\n #GGREEN#X Rating\n Destroy at all costs!"); + break; + case ROOM_WORDSEARCH: + obj_sign(6434, 648, 18, 18, "* (It's a word search.)\n* (The top row says GIASFCLFUBREHBER.)"); + if (!flag(F_WORDSEARCH)) { + obj_papyrus(6484, 652, DIR_LEFT); + obj_trigger(6300, 600, 30, 160, EV_WORDSEARCH, ACTOR_TRIGGER); + } + { + Obj *s = obj_sans(6536, 658, DIR_DOWN); + if (s) s->event = EV_SANS_TALK, s->arg = 4, s->flags |= OF_TALK; + } + break; + } +} + +void snow1_update(void) { + if (g_room == ROOM_BALLGAME) ball_update(); +} + +/* (while a cutscene runs too) */ +static void snow1_scene_update(void) { + if (maze_growing && maze_prints < maze_len()) maze_prints += 2; +} + +void snow1_draw(void) { + if (g_room != ROOM_ELECMAZE || !maze_prints) return; + /* Papyrus's footprints along the maze's path: two dents every 8 pixels */ + snow1_scene_update(); + int left = maze_prints; + for (int i = MAZE_POINTS - 1; i > 0 && left > 0; i--) { + int x0 = maze_path[i][0], y0 = maze_path[i][1], x1 = maze_path[i - 1][0], y1 = maze_path[i - 1][1]; + int len = abs_i(x1 - x0) + abs_i(y1 - y0); + for (int d = 0; d < len && d < left; d += 8) { + int x = x0 + (x1 > x0 ? d : x1 < x0 ? -d : 0), y = y0 + (y1 > y0 ? d : y1 < y0 ? -d : 0); + int ox = y1 != y0 ? 3 : 0, oy = x1 != x0 ? 3 : 0; + gfx_rect(x - ox - 1 - cam_x, y - oy - 1 - cam_y, 3, 2, rgb565(0x55607F), 255); + gfx_rect(x + ox - 1 - cam_x, y + oy - cam_y, 3, 2, rgb565(0x55607F), 255); + } + left -= len; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_branch(Ev *c) { + EV_BEGIN; + /* behind Frisk, the branch snaps */ + set_flag(F_BRANCH, 1); + g_shake = 10; + pl.frozen = true; + WAIT(12); + pl.dir = DIR_LEFT; + WAIT(30); + pl.dir = DIR_RIGHT; + pl.frozen = false; + if (c->self) gone(c->self); + obj_sign(996, 384, 26, 30, "* (It's been smashed like it was nothing...)"); + EV_END; +} + +static int ev_sans_intro(Ev *c) { + Obj *s = obj_get(ACTOR_SANS), *p = obj_get(ACTOR_PAPYRUS), *lamp = obj_get(ACTOR_BLOCK); + EV_BEGIN; + /* on the bridge, steps behind Frisk */ + PL_WALK(2598, 392, 2); + pl.dir = DIR_RIGHT; + WAIT(20); + s = obj_sans(2556, 422, DIR_RIGHT); + if (s) s->flags |= OF_DARK; + s = obj_get(ACTOR_SANS); + WALK(s, 2584, 422, 1); + NARRATE("* Human.|* Don't you know how to greet a new pal?|* Turn around and shake my hand."); + pl.dir = DIR_LEFT; + WAIT(30); + g_shake = 4; + WAIT(20); + s->flags &= (uint16_t)~OF_DARK; + SAY(FACE_SANS, "`1* heh. never gets old.\n`0* i'm sans. sans the skeleton.|* i'm meant to be watching for humans... but i'm not big on capturing.|* my brother papyrus, though? he's really into it.|* speak of the devil. quick, go through the gate.\n* the bars are too wide to stop anyone anyway."); + /* through the gate, then behind the lamp */ + WALK_TO(s, 2660, 432, 2); + PL_WALK(2720, 392, 2); + SAY(FACE_SANS, "* quick, behind that conveniently-shaped lamp."); + WALK_TO(s, 2920, 432, 3); + PL_WALK(2959, 392, 3); + PL_WALK(2959, 357, 2); + pl.dir = DIR_DOWN; + lamp->flags |= OF_FRONT; + WAIT_UNTIL(!s->walking); + s->dir = DIR_RIGHT; + /* Papyrus comes, scolds his brother and storms off */ + p = obj_papyrus(3180, 432, DIR_LEFT); + p = obj_get(ACTOR_PAPYRUS); + WALK(p, 3000, 432, 3); + SAY(FACE_SANS, "* sup, bro?"); + SAY(FACE_PAPYRUS, "`3* SANS!!! YOUR PUZZLES STILL AREN'T RECALIBRATED!\n* YOU'VE BEEN LAZING AROUND FOR DAYS!!!"); + SAY(FACE_SANS, "* staring at this lamp. it's really cool."); + SAY(FACE_PAPYRUS, "`3* WHAT IF A HUMAN SHOWS UP!?!|`2* I'LL BE READY! I'LL CAPTURE THEM!\n* AND THEN THE ROYAL GUARD WILL HAVE TO LET ME IN!!!"); + SAY(FACE_SANS, "* hmm... maybe this lamp will help you."); + SAY(FACE_PAPYRUS, "`3* SANS!!! YOU LAZYBONES!|* YOU GET LAZIER AND LAZIER EVERY DAY!!!"); + SAY(FACE_SANS, "* hey, take it easy. i've gotten a ton of work done today.\n`2* a skele-ton."); + SAY(FACE_PAPYRUS, "`3* SANS!!!"); + SAY(FACE_SANS, "`1* come on. you're smiling."); + SAY(FACE_PAPYRUS, "`3* I AM AND I HATE IT!|`3* UGH!!!\n`0* I WILL ATTEND TO MY PUZZLES...|* AS FOR YOUR WORK?\n`2* PUT A LITTLE MORE, \"BACKBONE\" INTO IT!!!!|* NYEH HEH HEH HEH HEH HEH!!!"); + WALK(p, 3180, 432, 4); + gone(p); + WAIT(30); + p = obj_papyrus(3180, 432, DIR_LEFT); + p = obj_get(ACTOR_PAPYRUS); + WALK(p, 3140, 432, 4); + SAY(FACE_PAPYRUS, "`2* HEH!"); + WALK(p, 3180, 432, 4); + gone(p); + SAY(FACE_SANS, "* ok, you can come out now."); + lamp->flags &= (uint16_t)~OF_FRONT; + PL_WALK(2959, 400, 2); + pl.dir = DIR_LEFT; + SAY(FACE_SANS, "* you should keep moving.\n`1* unless you want to hear more of my jokes."); + SAY(FACE_SANS, "`0* oh, one favor?|* my brother's never met a human. seeing you would make his day.|* he's harmless, promise. i'll be up ahead."); + set_flag(F_SANS_MET, 1); + set_flag(F_SANS_FAVOR, 1); + /* (the wrong way) */ + WALK(s, 2556, 432, 2); + gone(s); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_sans_talk(Ev *c) { + int k = c->self ? c->self->arg : 0; + EV_BEGIN; + switch (k) { + case 1: /* by the ice: Papyrus's special attack */ + if (!flag(F_SANS_HINT)) { + set_flag(F_SANS_HINT, 1); + SAY(FACE_SANS, "* a tip: my brother's got a #Bspecial attack#X.|* when it's #Lblue#X, stay still and it can't hurt you.|* think of a stop sign... but blue."); + } else { + SAY(FACE_SANS, "* remember... #Lblue#X stop sign."); + } + break; + case 2: /* by the maze: his brother's outfit */ + if (flag(F_ELECMAZE) < 2) SAY(FACE_SANS, "* go on. he made this one just for you."); + else if (!flag(F_SANS_COOL)) { + SAY(FACE_SANS, "* thanks. he's having a blast.|* that outfit? party costume. he won't take it off.\n* calls it his \"battle body.\"|* cool brother, right?@Cool@Uncool"); + set_flag(F_SANS_COOL, CHOICE() + 1); + if (CHOICE() == 0) SAY(FACE_SANS, "`1* you'd better tell him that."); + else SAY(FACE_SANS, "* hey, pal. sarcasm isn't funny, okay?\n* my brother's a real star."); + } else { + SAY(FACE_SANS, "* my brother's a real star.\n* he's the person who pushed me to get this sentry job."); + } + break; + case 3: /* by the Ball Game: fried snow, ever dearer, and then none */ + set_flag(F_FRIED_SNOW, flag(F_FRIED_SNOW) + 1); + if (flag(F_FRIED_SNOW) == 1) SAY(FACE_SANS, "* hey. want some fried snow?\n* it's 5G."); + else if (flag(F_FRIED_SNOW) == 2) SAY(FACE_SANS, "* fried snow? 10G."); + else if (flag(F_FRIED_SNOW) == 3) SAY(FACE_SANS, "* fried snow? 50G."); + else SAY(FACE_SANS, "`1* actually, i'm all out of snow."); + break; + case 4: /* by the word search */ + if (!flag(F_WORDSEARCH)) SAY(FACE_SANS, "* trust me. there's no way they can get past this one."); + else SAY(FACE_SANS, "* papyrus tried to solve yesterday's horoscope.\n`1* he says it was really tough."); + break; + } + EV_END; +} + +static int ev_pap_sentry(Ev *c) { + Obj *s = obj_get(ACTOR_SANS), *p = obj_get(ACTOR_PAPYRUS); + EV_BEGIN; + pl.dir = DIR_RIGHT; + SAY(FACE_PAPYRUS, "`0* SO, AS I WAS SAYING ABOUT UNDYNE..."); + SAY(FACE_SANS, "* hey, check it out."); + /* the double take */ + for (c->v[0] = 0; c->v[0] < 6; c->v[0]++) { + p->dir = (uint8_t)(c->v[0] % 2 ? DIR_RIGHT : DIR_LEFT); + WAIT(c->v[0] < 4 ? 6 : 14); + } + p->dir = DIR_LEFT; + SAY(FACE_PAPYRUS, "`3* SANS!! OH MY GOD!!\n* IS THAT... A HUMAN!?!?"); + SAY(FACE_SANS, "* uhhhh... actually, i think that's a rock."); + SAY(FACE_PAPYRUS, "`4* OH."); + SAY(FACE_SANS, "* hey, what's that in front of the rock?"); + SAY(FACE_PAPYRUS, "`3* OH MY GOD!!! (IS THAT A HUMAN?)"); + SAY(FACE_SANS, "* yes."); + SAY(FACE_PAPYRUS, "`2* SANS!!! IT'S A HUMAN!!! I'M GOING TO BE SO POPULAR!!!|`0* HUMAN! THE GREAT PAPYRUS WILL STOP YOU AND CAPTURE YOU!|`4* AND THEN... WELL, I'LL WORK THAT OUT LATER.|`2* ONWARD, IF YOU DARE!!! NYEH HEH HEH!!!"); + WALK(p, 4140, 414, 6); + gone(p); + SAY(FACE_SANS, "* well, that went well.\n* don't sweat it, kid.|* i'll keep an eye out for ya."); + WALK(s, 4140, 414, 2); + gone(s); + set_flag(F_PAP_SENTRY, 1); + if (c->self) gone(c->self); + EV_END; +} + +static bool doggo_stick; /* (snowmon.c: spared with the stick) */ +void snow_doggo_stick(void) { doggo_stick = true; } + +static int ev_doggo(Ev *c) { + Obj *d = obj_get(ACTOR_DOGGO); + EV_BEGIN; + d = obj_deco(SPR_DOGGO_OW, 4340, 386, false); + if (d) d->name = ACTOR_DOGGO, d->flags |= OF_FRONT; + NARRATE("* Something moved? Or did it?|* I only see things that move.\n* And moving humans don't stay moving for long!"); + doggo_stick = false; + BATTLE(FORM_DOGGO); + set_flag(F_DOGGO, bt.mon[0].killed ? 2 : 1); + if (flag(F_DOGGO) == 1) { + if (doggo_stick) NARRATE("* A stick? Then... no stick?|* I'll need a dog treat to figure this out."); + else NARRATE("* S-S-S-Something pet me...\n* Something that isn't m-m-moving...|* I'm gonna need some dog treats for this!!!"); + } + gone(d); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_snowman(Ev *c) { + EV_BEGIN; + { + bool has = false; + for (int i = 0; i < NUM_ITEMS; i++) has |= sv.items[i] == ITEM_SNOWMAN_PIECE; + c->v[0] = has; + } + if (c->v[0]) { + NARRATE("* Thank you... good luck!"); + } else if (flag(F_SNOWMAN) >= 2) { + NARRATE("* If you keep taking pieces of me, there'll be nothing left..."); + } else { + if (!flag(F_SNOWMAN)) NARRATE("* I'm a snowman, and I'd love to travel.|* Would you carry a piece of me far away?@Yes@No"); + else NARRATE("* Did you lose my piece...?\n* Will you take another?@Yes@No"); + if (CHOICE() == 0) { + if (item_add(ITEM_SNOWMAN_PIECE)) { + set_flag(F_SNOWMAN, flag(F_SNOWMAN) + 1); + NARRATE("* Thank you... good luck!\n* (You got the Snowman Piece.)"); + } else { + NARRATE("* (You're carrying too much.)"); + } + } else { + NARRATE("* I see... good journey, then."); + } + } + EV_END; +} + +static int ev_elecmaze(Ev *c) { + Obj *p = obj_get(ACTOR_PAPYRUS); + EV_BEGIN; + if (flag(F_ELECMAZE) == 1) goto crossed; + pl.dir = DIR_RIGHT; + SAY(FACE_PAPYRUS, "`0* HUMAN!! BEHOLD: THE INVISIBLE ELECTRICITY MAZE!!!|* TOUCH A WALL, AND THIS ORB ZAPS YOU!\n`2* NYEH HEH HEH!!!"); + /* Frisk steps in: Papyrus, holding the orb, gets the shock */ + FREE(true); + WAIT_UNTIL(pl.x + 10 >= 5282); + FREE(false); + p->spr[DIR_LEFT] = SPR_PAPYRUS_ZAP, p->flags |= OF_ANIM, p->anim_speed = 3; + g_shake = 12; + WAIT(40); + p->spr[DIR_LEFT] = SPR_PAPYRUS_L, p->flags &= (uint16_t)~OF_ANIM, p->frame = 0; + SAY(FACE_PAPYRUS, "`3* SANS!!! WHAT HAPPENED???"); + SAY(FACE_SANS, "* i think you have to hold the orb."); + SAY(FACE_PAPYRUS, "`4* OH, OKAY."); + /* he walks the maze to Frisk (his footprints show the way), gives the orb, and walks back */ + maze_growing = true; + for (c->v[0] = MAZE_POINTS - 2; c->v[0] >= 0; c->v[0]--) WALK(p, maze_path[c->v[0]][0], maze_path[c->v[0]][1] + 6, 2); + maze_growing = false; + maze_prints = maze_len(); + p->dir = DIR_LEFT; + SAY(FACE_PAPYRUS, "`0* HOLD THIS PLEASE."); + NARRATE("* (You got the orb.)"); + for (c->v[0] = 1; c->v[0] < MAZE_POINTS; c->v[0]++) WALK(p, maze_path[c->v[0]][0] + (c->v[0] == MAZE_POINTS - 1 ? 14 : 0), maze_path[c->v[0]][1] + 6, 3); + p->dir = DIR_LEFT; + SAY(FACE_PAPYRUS, "`2* OKAY! TRY IT NOW!!!"); + set_flag(F_ELECMAZE, 1); + if (c->self) gone(c->self); + for (unsigned i = 0; i < sizeof maze_walls / sizeof maze_walls[0]; i++) + obj_trigger(maze_walls[i][0], maze_walls[i][1], maze_walls[i][2], maze_walls[i][3], EV_MAZE_ZAP, ACTOR_BLOCK); + obj_trigger(5440, 420, 30, 40, EV_ELECMAZE, ACTOR_TRIGGER2); + return 1; +crossed: + SAY(FACE_PAPYRUS, "`2* YOU SOLVED IT! FAR TOO EASILY...|`0* THE NEXT ONE WON'T BE SO KIND!!!\n`2* NYEH HEH HEH!!!"); + WALK(p, 5520, 446, 5); + gone(p); + set_flag(F_ELECMAZE, 2); + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].event == EV_MAZE_ZAP || objs[i].event == EV_ELECMAZE) objs[i].kind = OBJ_NONE; + EV_END; +} + +static int ev_maze_zap(Ev *c) { + EV_BEGIN; + /* the orb shocks Frisk (no harm) and he's back at the start */ + g_shake = 10; + pl.frozen = true; + WAIT(20); + pl.x = 5258, pl.y = 356, pl.dir = DIR_RIGHT; + pl.frozen = false; + EV_END; +} + +static int ev_nicecream(Ev *c) { + EV_BEGIN; + if (!flag(F_NICECREAM)) { + set_flag(F_NICECREAM, 1); + NARRATE("* Nobody wants something cold today. Odd...|* OH!!!! A CUSTOMER!!!"); + NARRATE("* Hello! Would you like some Nice Cream?|* It's the frozen treat that warms your heart!\n* Now just 15G!@Yes@No"); + } else { + NARRATE("* Nice Cream! It's the frozen treat that warms your heart!\n* Now just 15G!@Yes@No"); + } + if (CHOICE() == 1) { + NARRATE("* Well then... Tell your friends...|* There's ice cream... Out in the middle of the woods..."); + } else if (sv.gold < 15) { + NARRATE("* Huh? You don't have enough money...|* I wish I could make Nice Cream for free..."); + } else if (!item_add(ITEM_NICE_CREAM)) { + NARRATE("* It looks like you're holding too much stuff! Oh well!"); + } else { + sv.gold = (uint16_t)(sv.gold - 15); + NARRATE("* Here you go!\n* Have a super-duper day!\n* (You got the Nice Cream.)"); + } + EV_END; +} + +static char ball_text[260]; +static int ev_ball_hole(Ev *c) { + Obj *b = c->self; + EV_BEGIN; + if (b) b->flags |= OF_HIDDEN; + { + /* the flag that pops up: by how long the ball took, or how small it was */ + int secs = ball.t / 30, g; + uint16_t spr; + const char *t; + if (secs < 6 && flag(F_BALLGAME) != 7) { + spr = SPR_FLAG_RED, g = 50, t = "* Bravery. Justice. Integrity. Kindness. Perseverance. Patience.|* Using these, you were able to win at \"Ball Game.\""; + } else if (secs < 6) { + spr = SPR_FLAG_RED, g = 10, t = "* #RRED#X - Try as you might, you continue to be yourself."; + } else if (b && b->frame >= 5) { + spr = SPR_FLAG_LIGHTBLUE, g = 4, t = "* #LLIGHT BLUE#X - \"Ball\" is \"Small.\"|* You waited, still, for this opportunity...\n* ... then dethroned \"Ball\" with a sharp attack."; + } else if (secs < 8) { + spr = SPR_FLAG_ORANGE, g = 5, t = "* #OORANGE#X - You are the kind of person who rushes fists-first through all obstacles."; + } else if (secs < 11) { + spr = SPR_FLAG_YELLOW, g = 3, t = "* #YYELLOW#X - Your sure-fire accuracy put an end to the mayhem of \"Ball.\""; + } else if (secs < 15) { + spr = SPR_FLAG_BLUE, g = 2, t = "* #BBLUE#X - Hopping and twirling, your original style pulled you through."; + } else if (secs < 20) { + spr = SPR_FLAG_GREEN, g = 1, t = "* #GGREEN#X - Your concern and care for \"Ball\" led you to a delicious victory."; + } else { + spr = SPR_FLAG_PURPLE, g = 2, t = "* #PPURPLE#X - Even when you felt trapped, you took notes and achieved the end of \"Ball.\""; + } + if (spr == SPR_FLAG_RED) set_flag(F_BALLGAME, 7); + else if (!flag(F_BALLGAME)) set_flag(F_BALLGAME, 1); + sv.gold = (uint16_t)min_i(9999, sv.gold + g); + snprintf(ball_text, sizeof ball_text, "%s|* (You won %dG.)", t, g); + Obj *f = obj_deco(spr, HOLE_X, HOLE_Y + 4, false); + if (f) f->name = ACTOR_DOG; + } + NARRATE(ball_text); + WAIT(30); + gone(obj_get(ACTOR_DOG)); + if (b) b->flags &= (uint16_t)~OF_HIDDEN, ball_place(b); + EV_END; +} + +static int ev_wordsearch(Ev *c) { + Obj *p = obj_get(ACTOR_PAPYRUS); + EV_BEGIN; + pl.dir = DIR_RIGHT; + SAY(FACE_PAPYRUS, "`0* HUMAN!!!\n* THE NEXT PUZZLE WILL NOT BE EASY!\n* IT IS DESIGNED BY MY BROTHER, SANS!"); + SAY(FACE_SANS, "* it's right there. on the ground.\n* trust me. there's no way they can get past this one."); + FREE(true); + WAIT_UNTIL(pl.x >= 6440); + FREE(false); + pl.dir = DIR_RIGHT; + SAY(FACE_PAPYRUS, "`3* SANS!!! THE PUZZLE DIDN'T DO ANYTHING!!!"); + SAY(FACE_SANS, "* whoops. i knew i should have used today's crossword instead."); + SAY(FACE_PAPYRUS, "`3* CROSSWORD!?\n* IN MY OPINION, JUNIOR JUMBLE IS EASILY THE HARDEST."); + SAY(FACE_SANS, "* what? really, dude? that easy-peasy word scramble?\n* that's for baby bones."); + SAY(FACE_PAPYRUS, "`3* UNBELIEVABLE!!!\n* HUMAN!! SOLVE THIS DISPUTE!@Crossword@Junior Jumble"); + set_flag(F_WORDSEARCH, CHOICE() + 1); + if (CHOICE() == 0) SAY(FACE_PAPYRUS, "`3* HUMANS... YOU'RE ALL THE SAME!!!"); + else SAY(FACE_PAPYRUS, "`2* HA! THE HUMAN AGREES WITH ME!!!"); + SAY(FACE_PAPYRUS, "`2* NYEH HEH HEH HEH!!!"); + WALK(p, 6640, 652, 6); + gone(p); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_fishrod(Ev *c) { + EV_BEGIN; + NARRATE("* (It's a fishing rod affixed to the ground.)\n* (Reel it in?)@Yes@No"); + if (CHOICE() == 0) { + set_flag(F_FISH, 1); + NARRATE("* (You reeled in the line...)\n* (There's a note on the hook.)|* \"Call me! Here's my number!\""); + } + EV_END; +} + +int box_menu(Ev *c); /* shop.c: the Dimensional Box */ + +int snow1_event(Ev *c) { + switch (c->id) { + case EV_BRANCH: return ev_branch(c); + case EV_SANS_INTRO: return ev_sans_intro(c); + case EV_SANS_TALK: return ev_sans_talk(c); + case EV_PAP_SENTRY: return ev_pap_sentry(c); + case EV_DOGGO: return ev_doggo(c); + case EV_SNOWMAN: return ev_snowman(c); + case EV_ELECMAZE: return ev_elecmaze(c); + case EV_MAZE_ZAP: return ev_maze_zap(c); + case EV_NICECREAM: return ev_nicecream(c); + case EV_BALL_HOLE: return ev_ball_hole(c); + case EV_WORDSEARCH: return ev_wordsearch(c); + case EV_FISHROD: return ev_fishrod(c); + case EV_BOX: return box_menu(c); + } + return -1; +} diff --git a/games/undertale/src/snowdin2.c b/games/undertale/src/snowdin2.c new file mode 100644 index 00000000..1248b37f --- /dev/null +++ b/games/undertale/src/snowdin2.c @@ -0,0 +1,448 @@ +/* Snowdin Forest, from the spaghetti to the bridge into town: the snow puzzle and the Dogi, the XOXO puzzles, + * the Multicolor Tile Puzzle, the Dog House, the ice puzzle and the slide through the trees, the snow poffs and + * Greater Dog, the Gauntlet of Deadly Terror, the cliff below and the mysterious door. */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "gfx.h" +#include "items.h" +#include "monsters.h" +#include "snowdin.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } + +/* ---------------------------------------------------------------- the XOXO puzzles */ +/* a puzzle's tiles (their top-left), its switch, its spikes */ +typedef struct { + const int16_t (*tiles)[2]; + int n; + int16_t sw_x, sw_y; + int flag; +} Xoxo; +static const int16_t x1_tiles[][2] = {{7460, 1240}, {7540, 1240}}; +static const int16_t x2_tiles[][2] = {{8180, 1200}, {8240, 1200}, {8280, 1200}, {8240, 1220}, {8280, 1220}, {8200, 1240}, + {8240, 1240}, {8260, 1240}, {8280, 1240}, {8180, 1260}, {8240, 1260}, {8180, 1280}, + {8200, 1280}, {8220, 1280}, {8240, 1280}}; +static const int16_t x3_tiles[][2] = {{9540, 1160}, {9700, 1160}, {9540, 1180}, {9580, 1180}, {9660, 1180}, {9620, 1220}, + {9580, 1240}, {9620, 1240}, {9580, 1260}, {9660, 1260}, {9540, 1300}, {9700, 1300}}; +static const Xoxo xoxos[3] = { + {x1_tiles, 2, 7500, 1196, F_XOXO1}, {x2_tiles, 15, 8098, 1240, F_XOXO2}, {x3_tiles, 12, 9743, 1224, F_XOXO3}}; +static const Xoxo *xo; /* the room's, or NULL */ +static uint8_t xo_state[16]; /* 0 X, 1 O */ +static int xo_on = -1; /* the tile under Frisk */ +static bool xo_kill; /* XOXO 2: the switch in the tree was pressed */ + +static void xo_show(void) { + for (int i = 0; i < MAX_OBJS; i++) { + Obj *o = &objs[i]; + if (o->kind != OBJ_DECO || o->name != ACTOR_TILE) continue; + bool solved = flag(xo->flag); + o->spr[0] = (uint16_t)(xo_state[o->arg] || solved ? SPR_OTILE : SPR_XTILE); + o->frame = solved ? 1 : 0; + } +} + +static void xo_setup(int k) { + xo = &xoxos[k]; + xo_on = -1, xo_kill = false; + memset(xo_state, 0, sizeof xo_state); + for (int i = 0; i < xo->n; i++) { + Obj *o = obj_deco(SPR_XTILE, xo->tiles[i][0], xo->tiles[i][1], false); + if (o) o->name = ACTOR_TILE, o->arg = (int16_t)i, o->flags |= OF_BACK, o->bh = 0; + } + Obj *sw = obj_deco(SPR_SNOWSWITCH, xo->sw_x, xo->sw_y, false); + if (sw) sw->flags |= OF_BACK | OF_TALK, sw->event = EV_XOXO_SWITCH, obj_set_box(sw, 0, 2, 24, 22), sw->name = ACTOR_SWITCH; + xo_show(); +} + +/* Frisk steps on a tile: X turns O, O turns back to X */ +static void xo_update(void) { + if (!xo || flag(xo->flag)) return; + int fx = pl.x + 10, fy = pl.y + 25, on = -1; + for (int i = 0; i < xo->n; i++) + if (fx >= xo->tiles[i][0] && fx < xo->tiles[i][0] + 20 && fy >= xo->tiles[i][1] && fy < xo->tiles[i][1] + 20) on = i; + if (on >= 0 && on != xo_on) { + xo_state[on] = !xo_state[on]; + xo_show(); + } + xo_on = on; +} + +/* past the first XOXO, Papyrus waits by the spikes */ +static void pap_xoxo1(void) { + if (flag(F_PAP_XOXO1)) return; + obj_papyrus(7720, 1252, DIR_LEFT); + obj_trigger(7600, 1180, 30, 120, EV_PAP_XOXO, ACTOR_TRIGGER); +} + +static int ev_xoxo_switch(Ev *c) { + EV_BEGIN; + if (!xo || flag(xo->flag)) { + NARRATE("* (The switch is already pressed.)"); + return 1; + } + c->v[0] = 1; + for (int i = 0; i < xo->n; i++) c->v[0] &= xo_state[i]; + if (c->v[0] || (xo == &xoxos[1] && xo_kill)) { + set_flag(xo->flag, 1); + xo_show(); + /* the spikes go down, or (the ice puzzle) the bridge over to the trees is there */ + for (int i = 0; i < MAX_OBJS; i++) { + if (objs[i].name == ACTOR_SPIKES) obj_spikes_set(&objs[i], false), objs[i].flags |= OF_HIDDEN; + if (objs[i].name == ACTOR_BLOCK) objs[i].flags &= (uint16_t)~OF_SOLID; + } + if (xo == &xoxos[0]) pap_xoxo1(); + NARRATE("* (Click!)"); + } else { + memset(xo_state, 0, sizeof xo_state); + xo_show(); + NARRATE("* (Click...)\n* (The puzzle reset.)"); + } + EV_END; +} + +/* ---------------------------------------------------------------- the Multicolor Tile Puzzle */ +#define TILES_X 8660 +#define TILES_Y 1200 +#define TILES_W 8 +#define TILES_H 6 +static int tiles_t; /* frames left of its colours shuffling, -1 off */ + +/* ---------------------------------------------------------------- the rooms' things */ +static Obj *spikes(int x, int y, int rows, bool raised) { + Obj *o = obj_spikes(x, y, 1, rows, raised, ACTOR_SPIKES); + if (o) o->spr[0] = SPR_SNOWSPIKES, o->frame = 0, o->flags |= OF_BACK; + if (o && !raised) o->flags |= OF_HIDDEN; + return o; +} + +void snow2_setup(int room, int from) { + (void)from; + xo = NULL, tiles_t = -1; + switch (room) { + case ROOM_SPAGHETTI: + obj_save(6745, 695, "* (Knowing the mouse might one day find a way to heat up the spaghetti...)\n* (It fills you with determination.)"); + obj_sign(6690, 658, 16, 20, "* HUMAN!! PLEASE ENJOY THIS SPAGHETTI.|* (LITTLE DO YOU KNOW, THIS SPAGHETTI IS A TRAP...)\n* (DESIGNED TO ENTICE YOU!!!)|* (YOU'LL BE SO BUSY EATING IT...)\n* (THAT YOU WON'T REALIZE THAT YOU AREN'T PROGRESSING!!)|* (THOROUGHLY JAPED AGAIN BY THE GREAT PAPYRUS!!!)\n* NYEH HEH HEH, PAPYRUS"); + obj_sign(6734, 646, 38, 34, "* (It's a plate of frozen spaghetti.)\n* (It's so cold, it's stuck to the table.)"); + obj_sign(6788, 644, 38, 36, "* (It's a microwave.)\n* (Its only setting is \"spaghetti.\")\n* (It's unplugged.)"); + obj_sign(6742, 585, 18, 14, "* (Squeak!)"); + break; + case ROOM_SNOWPUZZLE: + obj_sign(6984, 632, 20, 22, "* Warning: Dog Marriage|* (Yes, you read that correctly.)"); + obj_sign(6980, 920, 80, 80, "* (It's a map of this room, drawn in the snow.)\n* (An X marks its top right.)"); + { + Obj *sw = obj_trigger(7300, 650, 46, 68, EV_SNOW_SWITCH, ACTOR_SWITCH); + if (sw) sw->flags = OF_TALK; + } + spikes(7120, 940, 3, !flag(F_SNOWPUZZLE)); + if (!flag(F_DOGI)) obj_trigger(7300, 900, 140, 140, EV_DOGI, ACTOR_TRIGGER); + break; + case ROOM_XOXO1: + obj_sign(7456, 1262, 20, 20, "* Turn every X into an O.\n* Then press the switch."); + xo_setup(0); + spikes(7680, 1220, 3, !flag(F_XOXO1)); + if (flag(F_XOXO1)) pap_xoxo1(); + break; + case ROOM_XOXO2: + obj_sign(8096, 1198, 20, 22, "* Turn every X into an O.\n* Then press the switch."); + xo_setup(1); + spikes(8360, 1160, 8, !flag(F_XOXO2)); + { + /* the switch in the tree */ + Obj *k = obj_trigger(7956, 1150, 30, 56, EV_XOXO_SWITCH, ACTOR_TRIGGER3); + if (k) k->flags = OF_TALK, k->arg = 1; + } + if (!flag(F_XOXO2)) { + Obj *p = obj_papyrus(7880, 1222, DIR_DOWN); + if (p) p->event = EV_PAP_XOXO, p->arg = 2, p->flags |= OF_TALK; + if (!flag(F_PAP_XOXO1) || flag(F_PAP_XOXO1) == 1) obj_trigger(7700, 1160, 30, 140, EV_PAP_XOXO, ACTOR_TRIGGER); + } else { + Obj *s = obj_sans(8390, 1216, DIR_DOWN); + if (s) s->event = EV_SNOW_SANS_CLIFF, s->arg = 1, s->flags |= OF_TALK; + } + break; + case ROOM_TILEPUZZLE: + obj_sign(8818, 1176, 26, 30, "* (The machine isn't working.)"); + if (!flag(F_TILES)) { + obj_papyrus(8840, 1252, DIR_LEFT); + obj_trigger(8560, 1160, 30, 100, EV_TILES, ACTOR_TRIGGER); + /* (the tiles aren't there yet: nothing to walk on past the bridge) */ + Obj *b = obj_trigger(8656, 1196, 8, 130, 0, ACTOR_BLOCK); + if (b) b->flags = OF_SOLID; + } + { + Obj *s = obj_sans(8834, 1290, DIR_DOWN); + if (s) s->event = EV_SNOW_SANS_CLIFF, s->arg = 2, s->flags |= OF_TALK; + } + break; + case ROOM_DOGHOUSE: + obj_save(9260, 1300, flag(F_LESSERDOG) == 2 ? "* (Snow can always be broken down and rebuilt into something more useful.)\n* (This simple fact fills you with determination.)" + : "* (Knowing the dog will never give up trying to make the perfect snowdog...)\n* (It fills you with determination.)"); + obj_sign(9186, 1196, 20, 22, "* AWARE OF DOG\n* pleas pet dog"); + obj_sign(9356, 1170, 26, 34, "* (Lesser Dog keeps building a snow dog...)\n* (It gets taller every time.)"); + break; + case ROOM_XOXO3: + xo_setup(2); + if (!flag(F_XOXO3)) { + /* the gap to the trees, until the bridge comes */ + Obj *b = obj_trigger(9776, 1206, 10, 40, 0, ACTOR_BLOCK); + if (b) b->flags = OF_SOLID; + } + /* off the ice's edge: down to the room below */ + obj_trigger(9522, 1322, 262, 14, EV_XOXO_FALL, ACTOR_TRIGGER2); + break; + case ROOM_XOXOFAIL: + obj_sign(9520, 1440, 30, 40, "* (It's a snow Papyrus.)"); + obj_sign(9636, 1466, 30, 20, "* (It's a lump of snow with \"Sans\" written on it.)"); + break; + case ROOM_POFFZONE: { + static const int16_t poffs[][2] = {{10330, 1215}, {10485, 1235}, {10370, 1275}, {10465, 1285}, {10560, 1205}, + {10620, 1245}, {10665, 1215}, {10570, 1290}, {10745, 1270}, {10882, 1284}}; + for (int i = 0; i < 10; i++) { + Obj *p = obj_trigger(poffs[i][0] - 14, poffs[i][1] - 10, 30, 14, EV_POFF, ACTOR_ITEM); + if (p) p->flags = OF_TALK | OF_SOLID, p->arg = (int16_t)i; + } + obj_sign(10600, 1186, 18, 20, "* (Woof.)"); + if (!flag(F_GREATERDOG)) obj_trigger(10840, 1200, 30, 110, EV_GREATERDOG, ACTOR_TRIGGER); + break; + } + case ROOM_DANGERBRIDGE: + if (!flag(F_GAUNTLET)) { + obj_papyrus(11830, 1236, DIR_LEFT); + obj_sans(11850, 1200, DIR_DOWN); + obj_trigger(11300, 1220, 30, 40, EV_GAUNTLET, ACTOR_TRIGGER); + } else { + Obj *s = obj_sans(11792, 1214, DIR_DOWN); + if (s) s->event = EV_SNOW_SANS_CLIFF, s->arg = 3, s->flags |= OF_TALK; + } + break; + case ROOM_SOUTHCLIFF: { + Obj *s = obj_sans(10552, 2312, DIR_DOWN); + if (s) s->event = EV_SNOW_SANS_CLIFF, s->arg = 4, s->flags |= OF_TALK; + break; + } + case ROOM_DOORROOM: { + Obj *d = obj_trigger(9890, 1636, 40, 54, EV_MYSTERY_DOOR, ACTOR_ITEM); + if (d) d->flags = OF_TALK | OF_SOLID; + break; + } + } +} + +void snow2_update(void) { + xo_update(); +} + +void snow2_draw(void) { + /* the ice puzzle's bridge, once solved */ + if (g_room == ROOM_XOXO3 && flag(F_XOXO3)) gfx_rect(9780 - cam_x, 1214 - cam_y, 60, 24, rgb565(0xCFDBFF), 255); + /* the tile puzzle: its colours shuffle, then settle (the map's red and pink) */ + if (g_room == ROOM_TILEPUZZLE && tiles_t > 0) { + static const uint32_t cols[] = {0xFF4040, 0xFFC0C0, 0xFFFF40, 0x40C040, 0xFF8000, 0x4060FF, 0xA040FF}; + for (int y = 0; y < TILES_H; y++) + for (int x = 0; x < TILES_W; x++) + gfx_rect(TILES_X + x * 20 - cam_x, TILES_Y + y * 20 - cam_y, 20, 20, + rgb565(cols[(x * 7 + y * 3 + tiles_t / 4) % 7]), 255); + tiles_t--; + } else if (g_room == ROOM_TILEPUZZLE && !flag(F_TILES)) { + /* (before the machine: plain grey tiles) */ + gfx_rect(TILES_X - cam_x, TILES_Y - cam_y, TILES_W * 20, TILES_H * 20, rgb565(0x9090A0), 255); + } +} + +/* ---------------------------------------------------------------- the events */ +/* XOXO 2's switch in the tree: then the puzzle's own switch solves it */ +static int ev_tree_switch(Ev *c) { + EV_BEGIN; + xo_kill = true; + NARRATE("* (There's a switch on this tree.)\n* (You press it.)"); + EV_END; +} + +static int ev_snow_switch(Ev *c) { + EV_BEGIN; + if (flag(F_SNOWPUZZLE)) { + NARRATE("* (The switch is already pressed.)"); + } else { + NARRATE("* (There's a switch under the snow.)\n* (You press it.)"); + set_flag(F_SNOWPUZZLE, 1); + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].name == ACTOR_SPIKES) obj_spikes_set(&objs[i], false), objs[i].flags |= OF_HIDDEN; + } + EV_END; +} + +static int ev_dogi(Ev *c) { + Obj *a = obj_get(ACTOR_DOGAMY), *b = obj_get(ACTOR_DOGARESSA); + EV_BEGIN; + /* they come sniffing */ + a = obj_deco(SPR_DOGAMY_OW, 7330, 900, false); + if (a) a->name = ACTOR_DOGAMY; + b = obj_deco(SPR_DOGARESSA_OW, 7410, 900, false); + if (b) b->name = ACTOR_DOGARESSA; + a = obj_get(ACTOR_DOGAMY), b = obj_get(ACTOR_DOGARESSA); + WALK_TO(a, pl.x - 8, pl.y + 26, 2); + WALK(b, pl.x + 30, pl.y + 26, 2); + NARRATE("* Sniff... sniff... a strange smell.|* (A strange smell must be... eliminated!)"); + BATTLE(FORM_DOGI); + set_flag(F_DOGI, bt.mon[0].killed || bt.mon[1].killed ? 2 : 1); + gone(a), gone(b); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_pap_xoxo(Ev *c) { + Obj *p = obj_get(ACTOR_PAPYRUS); + int k = c->self && c->self->kind == OBJ_NPC ? c->self->arg : 0; + EV_BEGIN; + if (g_room == ROOM_XOXO1) { + /* past the first XOXO: the spaghetti */ + pl.dir = DIR_RIGHT; + SAY(FACE_PAPYRUS, "`0* HUMAN!!! YOU SOLVED IT!\n* BUT... WHAT ABOUT THE SPAGHETTI?|* DID YOU EAT IT? OR LEAVE IT ALONE?@Ate it@Left it"); + if (CHOICE() == 0) SAY(FACE_PAPYRUS, "`2* WOWIE!!! YOU ATE MY SPAGHETTI!!!|* IT MUST HAVE BEEN DELICIOUS!\n* NYEH HEH HEH!"); + else SAY(FACE_PAPYRUS, "`4* YOU LEFT IT ALONE?|`0* SO THERE'S STILL SOME LEFT FOR ME?\n`2* NYEH HEH HEH!"); + set_flag(F_PAP_XOXO1, 1); + WALK(p, 7740, 1252, 6); + gone(p); + if (c->self) gone(c->self); + return 1; + } + /* the second XOXO: his face, frozen in the snow */ + if (k == 2) { + SAY(FACE_PAPYRUS, "`0* NEED HELP WITH THE PUZZLE?@Yes@No"); + if (CHOICE() == 0) SAY(FACE_PAPYRUS, "`4* WELL... THERE MAY OR MAY NOT BE A SWITCH ON THAT TREE OVER THERE."); + else SAY(FACE_PAPYRUS, "`2* GOOD! A HUMAN WHO SOLVES PUZZLES!\n* NYEH HEH HEH!"); + return 1; + } + pl.dir = DIR_RIGHT; + SAY(FACE_PAPYRUS, "`4* SO... WHILE I WAITED, I REDID THE SNOW TO LOOK LIKE MY FACE.|* THEN IT FROZE. THE PUZZLE CHANGED.\n`0* ASK ME IF YOU NEED A HINT!"); + set_flag(F_PAP_XOXO1, 2); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_tiles(Ev *c) { + Obj *p = obj_get(ACTOR_PAPYRUS); + EV_BEGIN; + pl.dir = DIR_RIGHT; + SAY(FACE_PAPYRUS, "`0* HUMAN!!! THE MULTICOLOR TILE PUZZLE!\n* ONE PULL AND THE TILES CHANGE COLOR!|* EVERY COLOR DOES SOMETHING DIFFERENT!\n* RED: WALL. YELLOW: ZAP. GREEN: MONSTER. PINK: NOTHING.|* ORANGE, BLUE AND PURPLE... IT GETS COMPLICATED.|`2* GOT ALL THAT???@Yes@No"); + if (CHOICE() == 1) + SAY(FACE_PAPYRUS, "`3* OKAY! AGAIN!\n* PINK TILES ARE... WAIT, NO...|`4* ...|`0* JUST TRY IT ON YOUR OWN!"); + SAY(FACE_PAPYRUS, "`2* LET'S DO IT!!!"); + /* the machine: the colours shuffle, then settle */ + tiles_t = 90; + WAIT(95); + tiles_t = 0; + SAY(FACE_PAPYRUS, "`4* ..."); + set_flag(F_TILES, 1); + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].name == ACTOR_BLOCK) objs[i].kind = OBJ_NONE; + /* he spins out of the room */ + WALK(p, 8920, 1252, 8); + gone(p); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_xoxo_fall(Ev *c) { + EV_BEGIN; + /* off the ice's edge: down to the room under it */ + FADE_TO(ROOM_XOXOFAIL, 9600, 1460, DIR_DOWN); + EV_END; +} + +static int ev_poff(Ev *c) { + int k = c->self ? c->self->arg : 0; + EV_BEGIN; + if (k == 8 && !flag(F_POFF_GOLD)) { + set_flag(F_POFF_GOLD, 1); + sv.gold = (uint16_t)min_i(9999, sv.gold + 30); + NARRATE("* (It's a snow poff.)|* (There's 30G inside!)"); + } else { + NARRATE("* (It's a snow poff.)"); + } + EV_END; +} + +static int ev_greaterdog(Ev *c) { + Obj *d = obj_get(ACTOR_GREATERDOG); + EV_BEGIN; + /* out of a poff it jumps */ + d = obj_deco(SPR_GREATERDOG_OW, 10900, 1280, false); + if (d) d->name = ACTOR_GREATERDOG; + g_shake = 6; + WAIT(20); + BATTLE(FORM_GREATERDOG); + set_flag(F_GREATERDOG, bt.mon[0].killed ? 2 : 1); + set_flag(F_SNOWDIN_BOSSES, flag(F_SNOWDIN_BOSSES) + 1); + gone(obj_get(ACTOR_GREATERDOG)); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_gauntlet(Ev *c) { + Obj *p = obj_get(ACTOR_PAPYRUS), *s = obj_get(ACTOR_SANS); + EV_BEGIN; + pl.dir = DIR_RIGHT; + SAY(FACE_PAPYRUS, "`0* HUMAN!!!\n* THIS IS YOUR FINAL AND MOST DANGEROUS CHALLENGE!!!|`2* BEHOLD!\n* THE GAUNTLET OF DEADLY TERROR!"); + /* the gauntlet comes down: a spear, a spiked ball, a dog on a rope, a fire, a cannon */ + g_shake = 8; + WAIT(40); + SAY(FACE_PAPYRUS, "`0* ONE WORD FROM ME AND IT ALL SWINGS INTO ACTION!!!|`3* HERE IT GOES!|`4* ...|* ANY MOMENT NOW..."); + SAY(FACE_SANS, "* well? what's the holdup?"); + SAY(FACE_PAPYRUS, "`3* I'M GETTING TO IT!!!|`4* ...ACTUALLY, IT'S TOO EASY. NOT FAIR AT ALL.\n`2* A SKELETON HAS STANDARDS! NYEH HEH HEH!!!"); + WALK(p, 12000, 1236, 6); + gone(p); + SAY(FACE_SANS, "* ...|* i don't know what my brother's going to do.|* if i were you, i would keep going."); + WALK(s, 12000, 1200, 2); + gone(s); + set_flag(F_GAUNTLET, 1); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_sans_cliff(Ev *c) { + int k = c->self ? c->self->arg : 0; + EV_BEGIN; + switch (k) { + case 1: SAY(FACE_SANS, "* hey, you could have asked me for help.\n`2* i know a thing or two about trees."); break; + case 2: SAY(FACE_SANS, "* his cooking's getting better.\n* give it a year, it might even be food."); break; + case 3: + if (!flag(F_SNOW_SANS_TALK)) { + set_flag(F_SNOW_SANS_TALK, 1); + SAY(FACE_SANS, "* hey, buddy.\n* my brother's up ahead.|* remember: if you see a #Lblue#X attack, don't move."); + } else { + SAY(FACE_SANS, "* blue stop sign. got it?"); + } + break; + case 4: SAY(FACE_SANS, "* hey.\n* nice view down here, huh?"); break; + } + EV_END; +} + +static int ev_mystery_door(Ev *c) { + EV_BEGIN; + NARRATE("* (It's locked.)"); + EV_END; +} + +int snow2_event(Ev *c) { + switch (c->id) { + case EV_XOXO_SWITCH: return c->self && c->self->name == ACTOR_TRIGGER3 ? ev_tree_switch(c) : ev_xoxo_switch(c); + case EV_SNOW_SWITCH: return ev_snow_switch(c); + case EV_DOGI: return ev_dogi(c); + case EV_PAP_XOXO: return ev_pap_xoxo(c); + case EV_TILES: return ev_tiles(c); + case EV_XOXO_FALL: return ev_xoxo_fall(c); + case EV_POFF: return ev_poff(c); + case EV_GREATERDOG: return ev_greaterdog(c); + case EV_GAUNTLET: return ev_gauntlet(c); + case EV_SNOW_SANS_CLIFF: return ev_sans_cliff(c); + case EV_MYSTERY_DOOR: return ev_mystery_door(c); + } + return -1; +} diff --git a/games/undertale/src/snowmon.c b/games/undertale/src/snowmon.c new file mode 100644 index 00000000..1a7bbc40 --- /dev/null +++ b/games/undertale/src/snowmon.c @@ -0,0 +1,896 @@ +/* Snowdin's monsters: stats, ACTs and texts (from the Undertale Wiki's records of the game), their formations, + * where they come out, and their attacks, as the wiki describes them. Papyrus is in papyrus.c. */ +#include +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "items.h" +#include "monsters.h" +#include "res.h" +#include "snowdin.h" +#include "world.h" + +#define PICK(arr) ((arr)[rnd_n((int)(sizeof(arr) / sizeof((arr)[0])))]) + +/* whether the player ACTed on the monster this turn (else it's a "neutral" turn: Snowdrake tells a pun) */ +static bool acted_on(const Monster *m) { return m->state2 & 0x100; } +static void mark_acted(Monster *m) { m->state2 = (int16_t)(m->state2 | 0x100); } +static void clear_acted(Monster *m) { m->state2 = (int16_t)(m->state2 & ~0x100); } + +/* the drakes and Jerry: a joke makes the others laugh, and they can be spared */ +static void others_laugh(Battle *b, Monster *self) { + for (int i = 0; i < b->nmon; i++) { + Monster *o = &b->mon[i]; + if (o == self || !o->alive || o->gone) continue; + o->spare = true, o->state = 9; + } +} +static bool others_here(Battle *b, Monster *self) { + for (int i = 0; i < b->nmon; i++) + if (&b->mon[i] != self && b->mon[i].alive && !b->mon[i].gone) return true; + return false; +} + +/* ---------------------------------------------------------------- Snowdrake, Chilldrake */ +static void act_snowdrake(Battle *b, Monster *m, int act, char *t, int cap) { + mark_acted(m); + if (act == 0) { /* Heckle */ + if (rnd_n(6) == 0) { + snprintf(t, (size_t)cap, "* You tell Snowdrake their jokes will never land.\n* Crushed, they slink away..."); + m->gone = true, m->fade = 1; + } else { + snprintf(t, (size_t)cap, "* You boo Snowdrake."); + m->state = 3; + } + } else if (act == 1) { /* Laugh */ + snprintf(t, (size_t)cap, m->state == 1 ? "* You laugh at Snowdrake's pun." : "* You laugh at nothing in particular."); + if (m->state == 1) m->spare = true, m->state = 2; + else m->state = 4; + } else { /* Joke */ + if (others_here(b, m)) { + snprintf(t, (size_t)cap, "* You make an ice pun.\n* The other monsters think it's hilarious..."); + others_laugh(b, m); + m->state = 5; + } else { + snprintf(t, (size_t)cap, "* You make an ice pun.\n* Snowdrake isn't impressed."); + m->state = 6; + } + } +} +static const char *talk_snowdrake(Battle *b, Monster *m) { + int s = m->state; + bool acted = acted_on(m); + clear_acted(m); + if (s == 2) { m->state = 7; return "See!? Laughs!\nDad was\nwrong!"; } + if (s == 3) { m->state = 0; return "THIS won't\nbe funny\neither!"; } + if (s == 4) { m->state = 0; return "What are YOU\nlaughin' at?!?"; } + if (s == 5) { m->state = 0; return "That's not\nlike me..."; } + if (s == 6) { m->state = 0; return PICK(((const char *const[]){"Is that s'posed\nto be funny?", "Ha... Ha...\nNice try.", "I've heard\nthat one."})); } + if (s == 7) return "Thanks, you're\nall great."; + /* a neutral turn: his next pun (laugh at it to spare him) */ + if (!acted || s == 1) m->state = 1; + static const char *const puns[] = {"\"Ice\" to\nmeet you.", "Ice puns are\n\"snow\" problem", "Fights you in\n\"cold\" blood.", + "Better not\nsnow \"flake\"\nout!", "My fave ice\ncereals:\n\"frosted\"", "\"Chill\"\nout...", + "M.. m..\nmacaroni and\n\"freeze\""}; + return PICK(puns); +} +static int attack_drake(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_DRAKE_ARCS : ATK_DRAKE_LINES; } + +static void act_chilldrake(Battle *b, Monster *m, int act, char *t, int cap) { + mark_acted(m); + if (act == 0) { /* Clash */ + snprintf(t, (size_t)cap, "* You tell Chilldrake it's all wrong."); + m->state = 3; + } else if (act == 1) { /* Agree */ + if (m->state == 1) { + snprintf(t, (size_t)cap, "* You agree with Chilldrake.\n* It seems to get very uncomfortable..."); + m->spare = true, m->state = 2; + } else { + snprintf(t, (size_t)cap, "* You agree with Chilldrake before it gives its speech."); + m->state = 4; + } + } else { /* Joke */ + if (others_here(b, m)) { + snprintf(t, (size_t)cap, "* You make fun of Chilldrake.\n* The other monsters think it's hilarious..."); + others_laugh(b, m); + } else { + snprintf(t, (size_t)cap, "* You make fun of Chilldrake."); + } + m->state = 5; + } +} +static const char *talk_chilldrake(Battle *b, Monster *m) { + int s = m->state; + bool acted = acted_on(m); + clear_acted(m); + (void)b; + if (s == 2) { m->state = 6; return "To tell you\nthe truth..."; } + if (s == 3) { m->state = 0; return "WRONG! Let's\nfight and die."; } + if (s == 4) { m->state = 0; return "You don't\nknow my\ncause!"; } + if (s == 5) { m->state = 0; return "Only Snowy\ncan do that."; } + if (s == 6) return "Do you...\nreally..."; + if (!acted || s == 1) m->state = 1; + static const char *const q[] = {"Brush my\nteeth? No way\nin heck!", "NEVER do your\nhomework !!", "No bedtime!\nOnly DEADTIME", + "*turns music\nup all the\nway*"}; + return PICK(q); +} + +/* ---------------------------------------------------------------- Ice Cap */ +static void act_icecap(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + mark_acted(m); + if (m->spr_override) { /* "Ice" now */ + snprintf(t, (size_t)cap, act == 0 ? "* You inform Ice Cap that it still looks fine..." : "* ..."); + return; + } + if (act == 0) { /* Compliment */ + snprintf(t, (size_t)cap, "* You inform Ice Cap that it has a great hat!"); + m->state = 1; + } else if (act == 1) { /* Ignore */ + m->state2 = (int16_t)(m->state2 + 1); + if ((m->state2 & 0xFF) >= 2) { + snprintf(t, (size_t)cap, "* You continue not looking at Ice Cap's hat.\n* It seems defeated..."); + m->spare = true; + } else { + snprintf(t, (size_t)cap, "* You manage to tear your eyes away from Ice Cap's hat.\n* It looks annoyed..."); + } + m->state = 2; + } else { /* Steal */ + if (m->spare) { + snprintf(t, (size_t)cap, "* You tried to steal Ice Cap's hat...\n* And succeeded!\n* (It melts in your hands...)"); + m->spr_override = SPR_ICECAP_HATLESS; + m->exp = 25, m->gold = 40, m->spare_gold = 35, m->at = 1, m->df = -100; + } else { + snprintf(t, (size_t)cap, "* You tried to steal Ice Cap's hat...\n* ... but it's not weakened enough!"); + m->state = 3; + } + } +} +static const char *talk_icecap(Battle *b, Monster *m) { + (void)b; + clear_acted(m); + if (m->spr_override) return "I... I..."; + int s = m->state; + m->state = 0; + if (s == 9) return "Haha! That was\nACTUALLY\nfunny!"; + if (s == 1) return PICK(((const char *const[]){"DUH! Who\nDOESN'T know?", "Envious? TOO\nBAD!", "My hat's too\nloud for me to\nhear you."})); + if (s == 2) return (m->state2 & 0xFF) >= 2 ? "Fine!!! I\ndon't care!!!" : "HELLO??? My\nhat's up here."; + if (s == 3) return "I KNEW IT!!!\nTHIEF!!"; + static const char *const q[] = {"Where's YOUR\nhat?", "Your head\nlooks so\n...NAKED", "What a great\nhat! (Mine)", + "Snow? No! It's\nhat residue.", "I just looove\nmy hat. OK?"}; + return PICK(q); +} +static int attack_icecap(Battle *b, Monster *m) { + (void)b; + return m->spr_override ? ATK_IDLE : rnd_n(2) ? ATK_ICECAP_HATS : ATK_ICECAP_WAVES; +} +static const char *flavor_icecap(Battle *b, Monster *m) { + (void)b; + if (m->spr_override) return "* 'Ice Cap' is no more."; + if (m->spare) return "* Ice Cap is desperate for attention."; + return NULL; +} + +/* ---------------------------------------------------------------- Jerry */ +static void act_jerry(Battle *b, Monster *m, int act, char *t, int cap) { + (void)act; + snprintf(t, (size_t)cap, "* You and the other monsters ditch Jerry when it looks away!"); + m->gone = true, m->fade = 1, m->spare_gold = 0; + b->state[7] = 1; +} +static const char *talk_jerry(Battle *b, Monster *m) { + if (m->state == 9) { m->state = 0; return "Hahaha! Say\nsomething else\nfunny!"; } + if (!others_here(b, m)) return PICK(((const char *const[]){"Well... can YOU\ngive me a ride\nhome?", "Awkwarrrd.", "The wi-fi here\nsucks."})); + static const char *const q[] = {"Guys, it's\nCOLD. Does\nANYONE care?", "Why are we\ndoing this?\nWhat a fail.", + "Wow, you guys\nSUCK at this.", "Ka-SIGH."}; + return PICK(q); +} +static bool hit_jerry(Battle *b, Monster *m, int dmg) { + (void)b; + /* it takes a fifth of every hit */ + m->hp = (int16_t)(m->hp - (dmg + 4) / 5); + m->hurt = 30; + if (m->hp <= 0) m->hp = 0, m->killed = true; + return true; +} + +/* ---------------------------------------------------------------- Gyftrot */ +static const char *const gyft_decor[] = { + "* You remove the striped cane that says \"I use this tiny cane to walk\" on it.", + "* You remove the box of non-dog-related raisins.", + "* You remove the lenticular bookmark of a smug teen winking.", + "* You remove the barbed wire made of pipe cleaners.", + "* You remove a small, confused dog.", + "* You remove a stocking filled with chicken nuggets."}; +static void act_gyftrot(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + mark_acted(m); + /* state: decorations left (3 at first, kept as 3 - state2 & 7), state: what it says next */ + int left = 3 - (m->state2 & 7); + if (act == 0) { /* Decorate */ + snprintf(t, (size_t)cap, "* You add some googly eyes you found on the ground."); + m->state = left == 0 ? 5 : 1; + if (left == 0) m->state2 = (int16_t)(m->state2 | 0x10); /* decorated again: no gift now */ + } else if (act == 1) { /* Undecorate */ + if (left > 0) { + snprintf(t, (size_t)cap, "%s", gyft_decor[(m->state2 & 7) + rnd_n(3)]); + m->state2 = (int16_t)(m->state2 + 1); + m->state = left == 1 ? 3 : 2; + if (left == 1) m->spare = true; + } else { + snprintf(t, (size_t)cap, "* You try to undecorate...?"); + m->state = 4; + } + } else { /* Gift */ + if (left > 0 || (m->state2 & 0x10)) { + snprintf(t, (size_t)cap, "* Gyftrot refuses your gift."); + m->state = left > 0 ? 6 : 7; + } else { + snprintf(t, (size_t)cap, "* You give Gyftrot a gift."); + m->spare_gold = 75, m->state = 8; + } + } +} +static const char *talk_gyftrot(Battle *b, Monster *m) { + (void)b; + clear_acted(m); + int s = m->state; + m->state = 0; + switch (s) { + case 1: return "GOSHDARN\nTEENAGE GOOGLY\nEYES!!!"; + case 2: return "That's a\nlittle better."; + case 3: return "A weight has\nbeen lifted."; + case 4: return "Er... Those\nare real."; + case 5: return "I WAS STARTING\nTO TRUST YOU!!!"; + case 6: return "How do I know\nit's not a\ntrick?"; + case 7: return "I don't want\nyour gift!"; + case 8: return "Aw, you\nshouldn'\nhave..."; + } + if (m->spare) return "Thanks."; + static const char *const q[] = {"Is this funny\nto you?", "Don't put any\nmore on me!", "Leave me\nalone...", + "Hohoho! Go\nahead and\nlaugh...", "Get this off\nof me..."}; + return PICK(q); +} +static int attack_gyftrot(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_GYFT_PRESENTS : ATK_GYFT_SNOW; } + +/* ---------------------------------------------------------------- the dogs: the Stick spares them */ +static bool stick_dog(Battle *b, Monster *m, int item, char *t, int cap) { + if (item != ITEM_STICK) return false; + bool pair = m->def == mon_def(MON_DOGAMY) || m->def == mon_def(MON_DOGARESSA); + snprintf(t, (size_t)cap, pair ? "* You threw the stick and the dogs ran to get it.\n* You played fetch for a while." + : "* You threw the stick and the dog ran to get it.\n* You played fetch for a while."); + for (int i = 0; i < b->nmon; i++) + if (b->mon[i].alive && !b->mon[i].gone) b->mon[i].spare = true, b->mon[i].state = 20; + if (m->def == mon_def(MON_DOGGO)) snow_doggo_stick(); + return true; +} + +/* Doggo: he can be pet once he's survived an attack without seeing you move */ +static void act_doggo(Battle *b, Monster *m, int act, char *t, int cap) { + (void)act; + bool calm = b->turn >= 1 && sv.hp >= m->state2; + if (!calm && !m->spare) { + snprintf(t, (size_t)cap, "* Doggo is too suspicious of your movements."); + m->state = 1; + return; + } + m->acts[5]++; + snprintf(t, (size_t)cap, "* You pet Doggo."); + m->spare = true, m->state = 2; + if (m->acts[5] >= 5) m->df = 0; +} +static const char *talk_doggo(Battle *b, Monster *m) { + int s = m->state; + m->state = 0; + if (s == 20) return "HUH!!! A FUN\nSTICK APPEARS!"; + if (s == 2) { + switch (m->acts[5]) { + case 1: return "WHAT!!! I'VE\nBEEN PET!!!|PET?|PAT?|POT?"; + case 2: return "WHERE'S THAT\nCOMING FROM!"; + case 3: return "THERE'S NO END\nTO IT!!"; + case 4: return "WELL, THIS IS\nTHOROUGH !!!"; + default: return "OK. That's\nenough."; + } + } + if (b->turn == 0) return "Don't move an\ninch!"; + if (sv.hp < m->state2) return "MOVING?"; + return "Will it move\nthis time?"; +} +static int attack_doggo(Battle *b, Monster *m) { + (void)b; + m->state2 = sv.hp; /* (unhurt by this attack: calm enough to pet) */ + return ATK_DOGGO_SWORD; +} +static const char *flavor_doggo(Battle *b, Monster *m) { + if (m->spare) return "* Doggo has been pet."; + if (b->turn >= 1 && sv.hp >= m->state2) return "* Doggo can't seem to find anything."; + return NULL; +} + +/* Lesser Dog: a pet spares it; more pets raise its head ever higher */ +static void act_lesserdog(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b, (void)act; + static const char *const pet[] = { + "* You barely lifted your hand and Lesser Dog got excited.", + "* You lightly touched the Dog.\n* It's already overexcited...", + "* You pet the Dog.\n* It raises its head up to meet your hand.", + "* You pet the Dog.\n* It was a good Dog.", + "* You pet the Dog.\n* Its excitement knows no bounds.", + "* Critical pet!\n* Dog excitement increased.", + "* You have to jump up to pet the Dog.", + "* You don't even pet it.\n* It gets more excited.", + "* There is no way to stop this madness.", + "* Lesser Dog enters the realm of the clouds.", + "* You call the Dog but it is too late.\n* It cannot hear you.", + "* ...", + "* You can reach Lesser Dog again."}; + int n = m->acts[5]++; + if (n < 13) snprintf(t, (size_t)cap, "%s", pet[n]); + else if (n < 19) snprintf(t, (size_t)cap, "* You pet Lesser Dog."); + else if (n < 33) snprintf(t, (size_t)cap, "* It's possible that you may have a problem."); + else if (n < 44) snprintf(t, (size_t)cap, "* Lesser Dog is unpettable but appreciates the attempt."); + else snprintf(t, (size_t)cap, "* Perhaps mankind was not meant to pet this much."); + m->spare = true; + m->state = 1; +} +static const char *talk_lesserdog(Battle *b, Monster *m) { + (void)b; + int n = m->acts[5]; + if (m->state == 20) { m->state = 0; return "(Wag wag)"; } + if (m->state == 1) { + m->state = 0; + if (n <= 3) return "(Pant! Pant!)"; + if (n <= 6) return "(Excited\nnoises)"; + static const char *const q[] = {"(Motor\nrevving)", "(Plane\ntakeoff)", "(Kettle\nwhistle)", "(...)", "(Faraway\nbark)", "(...)", "(Bark)"}; + if (n <= 13) return q[n - 7]; + return "(Pant pant)"; + } + static const char *const q[] = {"(Pant pant)", "(Wag wag)", "(Thinks of\nfood)", "(Tiny bark)"}; + return PICK(q); +} +static int attack_lesserdog(Battle *b, Monster *m) { + (void)b; + if (m->acts[5] >= 6) return ATK_IDLE; /* (a critical pet: too excited to attack) */ + return rnd_n(2) ? ATK_LDOG_JUMP : ATK_LDOG_SPEARS; +} +static void draw_lesserdog(Battle *b, Monster *m, int x, int y) { + (void)b; + /* each pet lifts its head: its neck grows */ + int neck = min_i(m->acts[5], 13) * 7; + if (m->acts[5] >= 34) neck = 0; + if (neck) gfx_rect(x - 4, y - 46 - neck, 9, neck + 4, C_WHITE, 255); + gfx_sprite(m->hurt ? SPR_LESSERDOG_HURT : SPR_LESSERDOG_B, m->hurt ? 0 : (int)(g_frame / 6), x, y - neck * 0, 0, 255); +} + +/* the Dogi: roll in the snow, let them re-sniff you, then pet them both */ +static void act_dogi(Battle *b, Monster *m, int act, char *t, int cap) { + bool husband = m->def == mon_def(MON_DOGAMY); + /* b->state[0]: rolled around, [1]: re-sniffed after, [2], [3]: Dogamy, Dogaressa pet */ + if (act == 0) { /* Pet */ + if (!b->state[1]) { + snprintf(t, (size_t)cap, husband ? "* The Dogs are too suspicious of your smell." : "* The Dogaressa is too suspicious of your smell."); + } else { + snprintf(t, (size_t)cap, husband ? "* You pet Dogamy." : "* You pet the Dogaressa."); + b->state[husband ? 2 : 3] = 1; + m->state = 1; + /* both pet: their minds expanded */ + if (b->state[2] && b->state[3]) + for (int i = 0; i < b->nmon; i++) b->mon[i].spare = true; + else if (count_alive() == 1) + m->spare = true; + } + } else if (act == 1) { /* Re-sniff */ + if (b->state[1]) snprintf(t, (size_t)cap, "* The Dogs already know you smell fine."); + else if (b->state[0]) snprintf(t, (size_t)cap, "* The Dogs sniff you again...\n* After rolling in the dirt, you smell all right!"), b->state[1] = 1; + else snprintf(t, (size_t)cap, "* The Dogs sniff you again...\n* But you smell just as weird as before!"); + } else { /* Roll Around */ + snprintf(t, (size_t)cap, "* You roll around in the dirt and snow.\n* You smell like a weird puppy."); + b->state[0] = 1; + } +} +static const char *talk_dogamy(Battle *b, Monster *m) { + if (count_alive() == 1) return "..."; + if (b->state[2] && b->state[3]) return "Dogs can pet\nother dogs???"; + if (m->state == 20) return "A stick!"; + if (b->state[1]) return "Smells like a\nlittle puppy!"; + if (b->state[0]) return "Hmm? Huh?"; + static const char *const q[] = {"Hmm? Is that\na...", "Huh? What's\nthat smell?", "Don't touch\nmy wife!"}; + return PICK(q); +} +static const char *talk_dogaressa(Battle *b, Monster *m) { + if (count_alive() == 1) return "..."; + if (b->state[2] && b->state[3]) return "A new world\n... !"; + if (m->state == 20) return "Fetch!!!"; + if (b->state[1]) return "(A puppy?)"; + static const char *const q[] = {"(I smell it\ntoo...)", "(Hands off\nmy hubby!)", "(Weird smell...)"}; + return PICK(q); +} +static int attack_dogi(Battle *b, Monster *m) { + /* alone, each has its own: Dogamy's sad hearts, Dogaressa's angry axes; together they take turns */ + if (count_alive() == 1) return m->def == mon_def(MON_DOGAMY) ? ATK_DOGI_HEARTS : ATK_DOGI_AXES; + return b->turn % 2 ? ATK_DOGI_HEARTS : ATK_DOGI_AXES; +} + +/* Greater Dog: call it (or ignore it), pet it, play with it, pet it twice */ +static void act_greaterdog(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + int s = m->state & 0xFF; + if (act == 0) { /* Pet */ + if (s == 1) { + snprintf(t, (size_t)cap, "* Greater Dog flops into your lap for pets and dozes off...|* ...then bolts awake, thrilled!"); + m->state = 2, m->df = -20; + } else if (s == 3) { + snprintf(t, (size_t)cap, "* You pet the dog. It leans all its weight on you.\n* More pets are needed...!"); + m->state = 4; + } else if (s == 4) { + snprintf(t, (size_t)cap, "* One last, perfect pet.\n* The dog rolls over, completely satisfied."); + m->state = 5, m->spare = true; + } else if (s == 5) { + snprintf(t, (size_t)cap, "* Tummy rubs are forbidden."); + } else if (s == 2) { + snprintf(t, (size_t)cap, "* Greater Dog's excitement is creating a power field that prevents petting."); + } else { + snprintf(t, (size_t)cap, "* Greater Dog is too far away to pet.\n* You just pet the air."); + } + } else if (act == 1) { /* Beckon */ + if (s == 0) snprintf(t, (size_t)cap, "* You call the Greater Dog.\n* It bounds towards you, flecking slobber into your face."), m->state = 1; + else snprintf(t, (size_t)cap, "* The Greater Dog's ears perk up.\n* Nothing else happens."); + } else if (act == 2) { /* Play */ + if (s == 2) { + snprintf(t, (size_t)cap, "* You toss a snowball. It falls apart.|* Greater Dog fetches ALL the snow anyway.\n* Worn out, it rests its head on you..."); + m->state = 3; + } else if (s >= 3) { + snprintf(t, (size_t)cap, "* Greater Dog is too tired to play."); + } else { + snprintf(t, (size_t)cap, "* Greater Dog is not excited enough to play with."); + } + } else { /* Ignore */ + m->state2 = (int16_t)(m->state2 + 1); + if (m->state2 >= 4) { + snprintf(t, (size_t)cap, "* Greater Dog decides you are too boring."); + m->gone = true, m->fade = 1; + } else { + snprintf(t, (size_t)cap, "* Greater Dog inches closer."); + if (s == 0) m->state = 1; + } + } +} +static const char *flavor_greaterdog(Battle *b, Monster *m) { + (void)b; + switch (m->state & 0xFF) { + case 1: return "* Greater Dog just wants affection."; + case 2: return "* Greater Dog is patting the ground with its front paws."; + case 3: return "* Greater Dog wants some TLC."; + case 4: return "* Pet capacity is 40-percent."; + case 5: return "* Greater Dog is contented."; + } + return NULL; +} +static int attack_greaterdog(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_GDOG_SPEAR : ATK_GDOG_BARK; } + +/* ---------------------------------------------------------------- Glyde */ +static void act_glyde(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + /* state: applause (to 2), state2: nothings after them */ + if (act == 0) { + m->state++; + snprintf(t, (size_t)cap, m->state == 1 ? "* You clap really sloppily.\n* Glyde sucks up your praise like a vacuum cleaner." + : "* You clap like a gorilla.\n* Glyde is becoming addicted to your praise."); + m->state2 = 0; + } else if (act == 1) { + if (m->state >= 2 && m->state2 >= 2) { + snprintf(t, (size_t)cap, "* You boo loudly.\n* Glyde leaves to look elsewhere for praise."); + m->gone = true, m->fade = 1; + } else { + snprintf(t, (size_t)cap, "* You boo... but haters only make Glyde stronger.\n* Glyde ATTACK UP+DEFENSE DOWN."); + m->at = (int16_t)(m->at + 2), m->df = (int16_t)(m->df - 10); + } + } else { + if (m->state < 2) { + snprintf(t, (size_t)cap, "* You do nothing.\n* No effect."); + } else { + m->state2++; + if (m->state2 >= 3) snprintf(t, (size_t)cap, "* You do nothing.\n* Glyde leaves to look elsewhere for praise."), m->gone = true, m->fade = 1; + else if (m->state2 == 2) snprintf(t, (size_t)cap, "* You do nothing.\n* Glyde looks desperate for attention."); + else snprintf(t, (size_t)cap, "* You do nothing.\n* Glyde looks disappointed you aren't paying attention."); + } + } +} +static const char *talk_glyde(Battle *b, Monster *m) { + (void)b; + if (m->state == 1 && m->state2 == 0) return "OK! I rule!\nI admit it!"; + if (m->state >= 2 && m->state2 == 0) return "What else do\nyou have to\nsay!?"; + if (m->state >= 2 && m->state2 == 1) return "Eh? You forgot\nto clap."; + if (m->state >= 2 && m->state2 == 2) return "HELLO?? I'M\nRIGHT HERE!!!"; + static const char *const q[] = {"How great\nI am.", "Look. Watch.\nObserve.", "Wow. Check out\nmy pecs.", "Sorry... for\nNOTHING\n*ollies*"}; + return PICK(q); +} +static int attack_glyde(Battle *b, Monster *m) { (void)b, (void)m; return ATK_GLYDE_STARS; } + +/* ---------------------------------------------------------------- the table */ +extern const MonDef papyrus_def; /* papyrus.c */ +static const MonDef snow_defs[MON_COUNT - MON_RUINS_COUNT] = { + [MON_SNOWDRAKE - MON_RUINS_COUNT] = { + .name = "Snowdrake", .spare_gold = 12, .hp = 74, .at = 6, .df = 2, .exp = 22, .gold = 18, .spr_idle = SPR_SNOWDRAKE_B, + .spr_hurt = SPR_SNOWDRAKE_HURT, .idle_speed = 8, .check = "This teen comedian fights to keep a captive audience.", + .acts = {"Heckle", "Laugh", "Joke"}, .nacts = 3, + .neutral = {"* Snowdrake is assessing the crowd.", "* Snowdrake is practicing its next pun.", + "* Snowdrake is smiling at its own bad joke."}, + .act = act_snowdrake, .talk = talk_snowdrake, .attack = attack_drake}, + [MON_ICECAP - MON_RUINS_COUNT] = { + .name = "Ice Cap", .spare_gold = 13, .hp = 48, .at = 6, .df = 0, .exp = 17, .gold = 17, .spr_idle = SPR_ICECAP_B, + .spr_hurt = SPR_ICECAP_HURT, .idle_speed = 6, .check = "This teen wonders why it isn't named 'Ice Hat.'", + .acts = {"Compliment", "Ignore", "Steal"}, .nacts = 3, + .neutral = {"* It's snowing dandruff.", "* Ice Cap also wants a hat for its nose.", + "* Ice Cap makes sure its hat is still there.", "* Ice Cap is thinking about a certain article of clothing.", + "* Here comes that new clothes smell."}, + .low_hp = "* Ice Cap's hat is loose.", .act = act_icecap, .talk = talk_icecap, .attack = attack_icecap, + .flavor = flavor_icecap}, + [MON_GYFTROT - MON_RUINS_COUNT] = { + .name = "Gyftrot", .spare_gold = 20, .hp = 114, .at = 7, .df = 3, .exp = 35, .gold = 30, .spr_idle = SPR_GYFTROT_B, + .spr_hurt = SPR_GYFTROT_HURT, .idle_speed = 8, .check = "Some teens \"decorated\" it as a prank.", + .acts = {"Decorate", "Undecorate", "Gift"}, .nacts = 3, + .neutral = {"* Gyftrot laments its lack of hands.", "* Gyftrot eyes you with suspicion.", + "* Gyftrot distrusts your youthful demeanor.", "* Ah, the scent of fresh pine needles.", + "* Gyftrot tries vainly to remove its decorations."}, + .act = act_gyftrot, .talk = talk_gyftrot, .attack = attack_gyftrot}, + [MON_DOGGO - MON_RUINS_COUNT] = { + .name = "Doggo", .spare_gold = 30, .hp = 70, .at = 6, .df = 1, .exp = 30, .gold = 30, .spr_idle = SPR_DOGGO_B, .spr_hurt = SPR_DOGGO_HURT, + .idle_speed = 6, .check = "Easily excited by movement. Hobbies include: squirrels.", .acts = {"Pet"}, .nacts = 1, + .neutral = {"* Doggo is too suspicious of your movements."}, + .act = act_doggo, .talk = talk_doggo, .attack = attack_doggo, .flavor = flavor_doggo, .on_item = stick_dog}, + [MON_LESSERDOG - MON_RUINS_COUNT] = { + .name = "Lesser Dog", .spare_gold = 15, .hp = 60, .at = 6, .df = 0, .exp = 18, .gold = 15, .spr_idle = SPR_LESSERDOG_B, + .spr_hurt = SPR_LESSERDOG_HURT, .idle_speed = 6, .check = "Wields a stone dogger made of pomer-granite.", + .acts = {"Pet", "Pet", "Pet", "Pet", "Pet"}, .nacts = 5, + .neutral = {"* Lesser Dog cocks its head to one side.", "* Lesser Dog thinks your weapon is a dog treat.", + "* Lesser Dog is really not paying attention.", "* Smells like dog chow."}, + .act = act_lesserdog, .talk = talk_lesserdog, .attack = attack_lesserdog, .draw = draw_lesserdog, + .on_item = stick_dog}, + [MON_DOGAMY - MON_RUINS_COUNT] = { + .name = "Dogamy", .spare_gold = 20, .hp = 108, .at = 6, .df = 4, .exp = 30, .gold = 25, .spr_idle = SPR_DOGAMY_B, .spr_hurt = SPR_DOGAMY_B, + .check = "Husband of Dogaressa.\n* Knows only what he smells.", .acts = {"Pet", "Re-sniff", "Roll Around"}, .nacts = 3, + .neutral = {"* The Dogs keep shifting their axes to protect each other.", "* The Dogs are re-evaluating your smell.", + "* The Dogs are practicing for the next couples contest.", + "* The Dogs are saying sickly sweet things to each other."}, + .act = act_dogi, .talk = talk_dogamy, .attack = attack_dogi, .on_item = stick_dog}, + [MON_DOGARESSA - MON_RUINS_COUNT] = { + .name = "Dogaressa", .spare_gold = 20, .hp = 108, .at = 6, .df = 4, .exp = 30, .gold = 25, .spr_idle = SPR_DOGARESSA_B, + .spr_hurt = SPR_DOGARESSA_B, .check = "This dog's wife.\n* Only knows what she smells.", .acts = {"Pet", "Re-sniff", "Roll Around"}, + .nacts = 3, + .neutral = {"* The Dogs keep shifting their axes to protect each other.", "* The Dogs are re-evaluating your smell."}, + .act = act_dogi, .talk = talk_dogaressa, .attack = attack_dogi, .on_item = stick_dog}, + [MON_GREATERDOG - MON_RUINS_COUNT] = { + .name = "Greater Dog", .spare_gold = 40, .hp = 105, .at = 6, .df = 4, .exp = 80, .gold = 60, .spr_idle = SPR_GREATERDOG_B, + .spr_hurt = SPR_GREATERDOG_HURT, .idle_speed = 10, .check = "It's so excited that it thinks fighting is just play.", + .acts = {"Pet", "Beckon", "Play", "Ignore"}, .nacts = 4, + .neutral = {"* Greater Dog is watching you intently.", "* Greater Dog is waiting for your command.", + "* It smells like freshly-squeezed puppy juice.", "* Greater Dog is seeking affection."}, + .quotes = {"(Bark!)", "(Pant pant)", "(Wag wag)"}, + .low_hp = "* Greater Dog is panting slowly.", .act = act_greaterdog, .attack = attack_greaterdog, + .flavor = flavor_greaterdog, .on_item = stick_dog}, + [MON_JERRY - MON_RUINS_COUNT] = { + .name = "Jerry", .hp = 80, .at = 1, .df = 8, .exp = 1, .gold = 55, .spr_idle = SPR_JERRY_B, .spr_hurt = SPR_JERRY_HURT, + .idle_speed = 6, .dy = 10, .check = "Everyone knows Jerry.\n* Makes attacks 2 seconds longer.", .acts = {"Ditch"}, + .nacts = 1, + .neutral = {"* Jerry eats powdery food and licks its hands loudly.", "* Jerry sneezes without covering its nose.", + "* Jerry tells everyone it has to go to the bathroom.", "* Jerry lets out a yawn.", + "* Smells like....... Jerry."}, + .low_hp = "* Jerry is wounded.", .act = act_jerry, .talk = talk_jerry, .on_hit = hit_jerry}, + [MON_CHILLDRAKE - MON_RUINS_COUNT] = { + .name = "Chilldrake", .spare_gold = 12, .hp = 74, .at = 6, .df = 2, .exp = 22, .gold = 18, .spr_idle = SPR_CHILLDRAKE_B, + .spr_hurt = SPR_CHILLDRAKE_B, .idle_speed = 8, .check = "Rebels against everything!!\n* Looking for its friend Snowy.", + .acts = {"Clash", "Agree", "Joke"}, .nacts = 3, + .neutral = {"* Chilldrake starts a one-monster riot.", "* Chilldrake is chanting an anarchist spell.", + "* Chilldrake is eating its own homework.", "* It smells like \"Ice\" scented body-spray.", + "* Chilldrake is wondering where Snowy went."}, + .act = act_chilldrake, .talk = talk_chilldrake, .attack = attack_drake}, + [MON_GLYDE - MON_RUINS_COUNT] = { + .name = "Glyde", .spare_gold = 120, .hp = 220, .at = 9, .df = -20, .exp = 100, .gold = 140, .spr_idle = SPR_GLYDE_B, + .spr_hurt = SPR_GLYDE_HURT, .idle_speed = 6, .dy = -6, .check = "Refuses to give more details about its statistics.", + .acts = {"Applaud", "Boo", "Nothing"}, .nacts = 3, + .neutral = {"* Glyde does fancy flips.", "* Glyde is giving itself a high five.\n* ... somehow.", + "* Glyde sees its reflection and gets jealous.", "* An arrogant-smelling wind blows through."}, + .act = act_glyde, .talk = talk_glyde, .attack = attack_glyde}, +}; +const MonDef *snow_mon_def(int id) { + if (id == MON_PAPYRUS) return &papyrus_def; + return &snow_defs[id - MON_RUINS_COUNT]; +} + +static const Form snow_forms[FORM_COUNT - FORM_RUINS_COUNT] = { + [FORM_SNOWDRAKE - FORM_RUINS_COUNT] = {{MON_SNOWDRAKE}, 1, "* Snowdrake flutters forth!"}, + [FORM_ICECAP - FORM_RUINS_COUNT] = {{MON_ICECAP}, 1, "* Icecap struts into view."}, + [FORM_LESSERDOG - FORM_RUINS_COUNT] = {{MON_LESSERDOG}, 1, "* Lesser Dog appears."}, + [FORM_CHILLDRAKE - FORM_RUINS_COUNT] = {{MON_CHILLDRAKE}, 1, "* Chilldrake saunters up!"}, + [FORM_ICECAP_JERRY - FORM_RUINS_COUNT] = {{MON_ICECAP, MON_JERRY}, 2, "* Icecap appears.\n* Jerry came too."}, + [FORM_ICECAP_JERRY_SNOWDRAKE - FORM_RUINS_COUNT] = {{MON_SNOWDRAKE, MON_ICECAP, MON_JERRY}, 3, + "* Icecap and Snowdrake confront you, sighing.\n* Jerry."}, + [FORM_ICECAP_JERRY_CHILLDRAKE - FORM_RUINS_COUNT] = {{MON_CHILLDRAKE, MON_ICECAP, MON_JERRY}, 3, + "* Icecap and Chilldrake confront you, sighing.\n* Jerry."}, + [FORM_GYFTROT - FORM_RUINS_COUNT] = {{MON_GYFTROT}, 1, "* Gyftrot confronts you!"}, + [FORM_GLYDE - FORM_RUINS_COUNT] = {{MON_GLYDE}, 1, "* Glyde swooped in!"}, + [FORM_DOGGO - FORM_RUINS_COUNT] = {{MON_DOGGO}, 1, "* Doggo blocks the way!"}, + [FORM_DOGI - FORM_RUINS_COUNT] = {{MON_DOGAMY, MON_DOGARESSA}, 2, "* Dogi assault you!"}, + [FORM_GREATERDOG - FORM_RUINS_COUNT] = {{MON_GREATERDOG}, 1, "* It's the Greater Dog."}, + [FORM_PAPYRUS - FORM_RUINS_COUNT] = {{MON_PAPYRUS}, 1, "* Papyrus blocks the way!"}, +}; +const Form *snow_form(int form) { return &snow_forms[form - FORM_RUINS_COUNT]; } + +/* random encounters: the wiki's pools (no more of them once Papyrus is spared with no one killed here) */ +int snow_encounter(int room) { + if (flag(F_PAPYRUS) == 1 && !flag(F_KILLS_SNOWDIN)) return -1; + int drake = flag(F_SNOWDRAKE_DEAD) ? FORM_CHILLDRAKE : FORM_SNOWDRAKE; + bool lesser = !flag(F_LESSERDOG) && rnd_n(4) == 0; + switch (room) { + case ROOM_BOXROAD: case ROOM_PAPSENTRY: case ROOM_ICEFIELD: + if (lesser) return FORM_LESSERDOG; + return rnd_n(2) ? drake : FORM_ICECAP; + case ROOM_SNOWPUZZLE: case ROOM_DANGERBRIDGE: + if (lesser) return FORM_LESSERDOG; + if (rnd_n(2)) return FORM_ICECAP_JERRY; + return flag(F_SNOWDRAKE_DEAD) ? FORM_ICECAP_JERRY_CHILLDRAKE : FORM_ICECAP_JERRY_SNOWDRAKE; + case ROOM_SOUTHCLIFF: return FORM_GYFTROT; + case ROOM_DOORROOM: return FORM_GLYDE; + } + return -1; +} + +/* ---------------------------------------------------------------- attacks */ +static int bx0(void) { return bt.x0 + 3; } +static int bx1(void) { return bt.x1 - 3; } +static int by0(void) { return bt.y0 + 3; } +static int by1(void) { return bt.y1 - 3; } +#define P(v) ((v) * FX) +static Bullet *shot(uint16_t spr, int x, int y, int vx, int vy) { + Bullet *b = bullet_new(spr, P(x), P(y), vx, vy); + if (b) b->owner = (uint8_t)bt.atk_owner; + return b; +} +/* aimed at the SOUL, sp (1/16 px) a frame */ +static void aim(Bullet *b, int sp) { + int dx = bt.sx - b->x, dy = bt.sy - b->y; + int d = abs_i(dx) + abs_i(dy); + if (d) b->vx = dx * sp / d, b->vy = dy * sp / d; +} + +/* Snowdrake: crescents falling in arcs from the top corners / in lines at the SOUL */ +static void atk_drake_arcs(int t) { + if (t < 120 && t % 14 == 0) { + bool left = (t / 14) % 2; + Bullet *b = shot(SPR_ICESHARD, left ? bx0() : bx1(), by0(), (left ? 1 : -1) * (P(1) + rnd_n(P(1))), -P(1)); + if (b) b->kind = BK_GRAVITY, b->ay = 3, b->r = 3; + } +} +static void atk_drake_lines(int t) { + if (t < 120 && t % 20 == 0) { + int x = bx0() + 8 + rnd_n(bx1() - bx0() - 16); + for (int k = 0; k < 3; k++) { + Bullet *b = shot(SPR_ICESHARD, x + (k - 1) * 10, by0() - 10 - k * 6, 0, 0); + if (b) aim(b, P(2)), b->r = 3; + } + } +} +/* Ice Cap: ice shot up from hats at the bottom, falling back; zig-zag walls closing top and bottom */ +static void atk_icecap_hats(int t) { + if (t < 120 && t % 18 == 0) { + Bullet *b = shot(SPR_ICESHARD, bx0() + 8 + rnd_n(bx1() - bx0() - 16), by1(), rnd_n(P(1)) - P(1) / 2, -P(4)); + if (b) b->kind = BK_GRAVITY, b->ay = 5, b->r = 3; + } +} +static void atk_icecap_waves(int t) { + /* columns of blocks scroll in from the right, their gaps zig-zagging */ + if (t < 130 && t % 6 == 0) { + int h = by1() - by0(); + int gap_mid = by0() + h / 2 + ((t / 6) % 8 < 4 ? (t / 6) % 4 : 4 - (t / 6) % 4) * h / 10 - h / 5; + for (int side = 0; side < 2; side++) { + int y0 = side ? gap_mid + 13 : by0(), y1 = side ? by1() : gap_mid - 13; + if (y1 <= y0) continue; + Bullet *b = shot(SPR_BONE, bx1() + 4, (y0 + y1) / 2, -P(2), 0); + if (b) b->flags |= BF_BOX, b->w = 5, b->h = (int16_t)(y1 - y0); + } + } +} +/* Gyftrot: three presents rise from the bottom (one blue: keep still), snowflakes fall in waves */ +static void atk_gyft_presents(int t) { + if (t % 50 == 0 && t < 130) { + int blue = rnd_n(3); + for (int k = 0; k < 3; k++) { + Bullet *b = shot(SPR_PRESENT, bx0() + (bx1() - bx0()) * (k + 1) / 4, by1() + 4, 0, -P(1) - P(1) / 2); + if (b) b->color = (uint8_t)(k == blue ? BC_BLUE : BC_WHITE), b->r = 4; + } + } +} +static void atk_gyft_snow(int t) { + if (t < 130 && t % 8 == 0) { + Bullet *b = shot(SPR_SNOWFLAKE, bx0() + 6 + rnd_n(bx1() - bx0() - 12), by0() - 4, 0, P(1) + P(1) / 4); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)(b->x / FX), b->r = 3; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_SNOWFLAKE) continue; + b->t++; + b->y += b->vy; + b->x = P(b->a) + P(8) * gfx_sin(b->t * 4) / 1024; + if (b->y > P(by1() + 8)) b->kind = BK_NONE; + } +} +/* Doggo: a blue blade sweeps across the board (still, it can't see you) */ +static void atk_doggo_sword(int t) { + if (t == 10 || t == 80) { + bool right = t == 80; + Bullet *b = shot(SPR_BONE, right ? bx1() + 6 : bx0() - 6, (by0() + by1()) / 2, right ? -P(3) : P(3), 0); + if (b) b->flags |= BF_BOX, b->w = 4, b->h = (int16_t)(by1() - by0()), b->color = BC_BLUE; + } +} +/* Lesser Dog: a little dog runs on the spot, then leaps at the SOUL; or spears, blue then white */ +static void atk_ldog_jump(int t) { + if (t == 0) { + Bullet *b = shot(SPR_DOG_OW, bx1() - 10, by1() - 8, 0, 0); + if (b) b->kind = BK_SCRIPT, b->r = 6, b->anim = 4; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_DOG_OW) continue; + b->t++; + if (b->t % 4 == 0) b->frame++; + if (b->t == 40 || b->t == 100) aim(b, P(3)), b->vy -= P(2), b->c = 1; + if (b->c) { + b->vy += 4; + b->x += b->vx, b->y += b->vy; + if (b->y > P(by1() - 8)) b->y = P(by1() - 8), b->vx = b->vy = 0, b->c = 0; + if (b->x < P(bx0() + 6)) b->x = P(bx0() + 6); + if (b->x > P(bx1() - 6)) b->x = P(bx1() - 6); + } + } +} +static void atk_ldog_spears(int t) { + if (t == 5) { + Bullet *b = shot(SPR_BONE, bx1() + 20, (by0() + by1()) / 2, -P(3), 0); + if (b) b->flags |= BF_BOX, b->w = 40, b->h = 4, b->color = BC_BLUE; + } + if (t == 70) { + bool left = rnd_n(2); + Bullet *b = shot(SPR_BONE, left ? bx0() - 20 : bx1() + 20, by0() + 10 + rnd_n(by1() - by0() - 20), left ? P(3) : -P(3), 0); + if (b) b->flags |= BF_BOX, b->w = 40, b->h = 4, b->kind = BK_SCRIPT, b->a = left; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_BONE) continue; + b->t++; + if (b->t < 26) b->x += b->vx; + else if (b->t > 50) b->x -= b->vx; + } +} +/* the Dogi: two axes rise, then swing down crossing; a ring of hearts barked from one to the other (half blue) */ +static void atk_dogi_axes(int t) { + if (t == 0 || t == 70) { + for (int k = 0; k < 2; k++) { + Bullet *b = shot(SPR_KNIFE, k ? bx1() - 14 : bx0() + 14, by0() + 18, 0, -P(1) / 2); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)k, b->r = 5; + } + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_KNIFE) continue; + b->t++; + if (b->t < 16) b->y += b->vy; + else b->x += b->a ? -P(2) : P(2), b->y += P(1); + if (b->t > 70) b->kind = BK_NONE; + } +} +static void atk_dogi_hearts(int t) { + if (t % 50 == 5 && t < 120) { + int cy = by0() + 12 + rnd_n(by1() - by0() - 24); + for (int k = 0; k < 8; k++) { + Bullet *b = shot(SPR_HEARTBULLET, bx0() - 10, cy, P(2), 0); + if (b) b->kind = BK_ORBIT, b->a = (int16_t)(bx0() - 10), b->b = (int16_t)cy, b->c = P(13), b->d = (int16_t)(k * 32 * 16), + b->vx = 40, b->vy = 0, b->color = (uint8_t)(k % 2 ? BC_BLUE : BC_WHITE), b->r = 3, b->ax = P(2); + } + } + /* the ring's middle moves across */ + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind == BK_ORBIT && b->spr == SPR_HEARTBULLET) b->a = (int16_t)(b->a + 2); + } +} +/* Greater Dog: its spear flies right to left flickering blue and white; a sleeping dog barks if you move */ +static void atk_gdog_spear(int t) { + if (t % 45 == 0 && t < 130) { + Bullet *b = shot(SPR_BONE, bx1() + 20, by0() + 8 + rnd_n(by1() - by0() - 16), -P(3), 0); + if (b) b->flags |= BF_BOX, b->w = 36, b->h = 4, b->kind = BK_SCRIPT; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_BONE) continue; + b->t++; + b->x += b->vx; + b->color = (uint8_t)((b->t / 10) % 2 ? BC_BLUE : BC_WHITE); + if (b->x < P(bx0() - 30)) b->kind = BK_NONE; + } +} +static void atk_gdog_bark(int t) { + static int32_t lx, ly; + if (t == 0) { + lx = bt.sx, ly = bt.sy; + Bullet *d = shot(SPR_DOG_OW, (bx0() + bx1()) / 2, by1() - 6, 0, 0); + if (d) d->kind = BK_SCRIPT, d->flags |= BF_HARMLESS; + } + if (t > 10 && t % 16 == 0 && (bt.sx != lx || bt.sy != ly)) { + Bullet *b = shot(SPR_HEARTBULLET, (bx0() + bx1()) / 2, by1() - 14, 0, 0); + if (b) aim(b, P(2)), b->r = 3; + } + lx = bt.sx, ly = bt.sy; +} +/* Glyde: waves of stars */ +static void atk_glyde_stars(int t) { + if (t < 140 && t % 24 == 0) { + bool left = (t / 24) % 2; + for (int k = 0; k < 5; k++) { + Bullet *b = shot(SPR_SNOWFLAKE, left ? bx0() - 6 : bx1() + 6, by0() + 6 + k * (by1() - by0() - 12) / 4, left ? P(2) : -P(2), + (k - 2) * 6); + if (b) b->r = 3, b->angle = 1; + } + } +} + +static const int16_t snow_lengths[ATK_COUNT - ATK_RUINS_COUNT] = { + [ATK_DRAKE_ARCS - ATK_RUINS_COUNT] = 150, [ATK_DRAKE_LINES - ATK_RUINS_COUNT] = 150, + [ATK_ICECAP_HATS - ATK_RUINS_COUNT] = 150, [ATK_ICECAP_WAVES - ATK_RUINS_COUNT] = 180, + [ATK_GYFT_PRESENTS - ATK_RUINS_COUNT] = 170, [ATK_GYFT_SNOW - ATK_RUINS_COUNT] = 160, + [ATK_DOGGO_SWORD - ATK_RUINS_COUNT] = 150, [ATK_LDOG_JUMP - ATK_RUINS_COUNT] = 150, + [ATK_LDOG_SPEARS - ATK_RUINS_COUNT] = 140, [ATK_DOGI_AXES - ATK_RUINS_COUNT] = 150, + [ATK_DOGI_HEARTS - ATK_RUINS_COUNT] = 170, [ATK_GDOG_SPEAR - ATK_RUINS_COUNT] = 160, + [ATK_GDOG_BARK - ATK_RUINS_COUNT] = 150, [ATK_GLYDE_STARS - ATK_RUINS_COUNT] = 170, +}; +int papyrus_attack_length(int atk); /* papyrus.c */ +void papyrus_attack(int atk, int t); +void papyrus_attack_draw(int atk, int t); + +int snow_attack_length(int atk) { + if (atk >= ATK_PAP_FIRST && atk <= ATK_PAP_LAST) return papyrus_attack_length(atk); + int n = snow_lengths[atk - ATK_RUINS_COUNT] ? snow_lengths[atk - ATK_RUINS_COUNT] : 150; + /* Jerry makes attacks 2 seconds longer */ + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].def == mon_def(MON_JERRY) && bt.mon[i].alive && !bt.mon[i].gone) n += 60; + return n; +} + +void snow_attack_run(Battle *b, int atk, int t) { + (void)b; + if (t < 0) return; + switch (atk) { + case ATK_DRAKE_ARCS: atk_drake_arcs(t); break; + case ATK_DRAKE_LINES: atk_drake_lines(t); break; + case ATK_ICECAP_HATS: atk_icecap_hats(t); break; + case ATK_ICECAP_WAVES: atk_icecap_waves(t); break; + case ATK_GYFT_PRESENTS: atk_gyft_presents(t); break; + case ATK_GYFT_SNOW: atk_gyft_snow(t); break; + case ATK_DOGGO_SWORD: atk_doggo_sword(t); break; + case ATK_LDOG_JUMP: atk_ldog_jump(t); break; + case ATK_LDOG_SPEARS: atk_ldog_spears(t); break; + case ATK_DOGI_AXES: atk_dogi_axes(t); break; + case ATK_DOGI_HEARTS: atk_dogi_hearts(t); break; + case ATK_GDOG_SPEAR: atk_gdog_spear(t); break; + case ATK_GDOG_BARK: atk_gdog_bark(t); break; + case ATK_GLYDE_STARS: atk_glyde_stars(t); break; + default: + if (atk >= ATK_PAP_FIRST && atk <= ATK_PAP_LAST) papyrus_attack(atk, t); + break; + } +} + +void snow_attack_draw(Battle *b, int atk, int t) { + (void)b; + if (atk >= ATK_PAP_FIRST && atk <= ATK_PAP_LAST) papyrus_attack_draw(atk, t); +} + +/* after a battle in Snowdin: who was killed, who's been met */ +void snow_battle_done(int form) { + for (int i = 0; i < bt.nmon; i++) { + const Monster *m = &bt.mon[i]; + if (m->def == mon_def(MON_SNOWDRAKE) && m->killed) set_flag(F_SNOWDRAKE_DEAD, 1); + } + if (form == FORM_LESSERDOG) set_flag(F_LESSERDOG, bt.mon[0].killed ? 2 : 1); +} diff --git a/games/undertale/src/snowtown.c b/games/undertale/src/snowtown.c new file mode 100644 index 00000000..c2fcdb02 --- /dev/null +++ b/games/undertale/src/snowtown.c @@ -0,0 +1,313 @@ +/* Snowdin Town: the shop, the inn, Grillby's, the library, the townsfolk, the foggy path where Papyrus fights, + * his house and the time spent with him, and the way on to Waterfall. Signs and books are the game's; the + * townsfolk's talks are kept short. */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "save.h" +#include "shop.h" +#include "snowdin.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } + +/* someone of the town who's drawn on the map: a box to talk to, what they say */ +static void folk(int x, int y, const char *text) { + Obj *o = obj_sign(x - 12, y - 18, 24, 26, text); + (void)o; +} + +void town_setup(int room, int from) { + (void)from; + switch (room) { + case ROOM_SNOWTOWN: + obj_save(518, 1076, "* (The sight of such a friendly town fills you with determination.)"); + obj_sign(266, 1046, 30, 24, "* (Welcome to Snowdin Town!)"); + obj_sign(776, 1048, 20, 20, "* (Don't want to walk to the other side of town?)\n* (Try the undersnow tunnels!)|* (They're simple, quick, and convenient!)"); + { + Obj *b = obj_trigger(566, 1072, 26, 24, EV_BOX, ACTOR_ITEM); + if (b) b->flags = OF_TALK | OF_SOLID; + Obj *shop = obj_trigger(446, 1066, 28, 24, EV_SHOP, ACTOR_TRIGGER); + (void)shop; + Obj *house = obj_trigger(2238, 1086, 28, 26, EV_TOWN_DOOR, ACTOR_TRIGGER2); + if (house) house->arg = 0; + Obj *shed = obj_trigger(2398, 1084, 28, 16, EV_TOWN_DOOR, ACTOR_TRIGGER3); + if (shed) shed->arg = 1; + } + folk(850, 1029, "* My sister's walking our little brother on a leash again.\n* Is that weird? It's weird, right?"); + folk(911, 1101, "* I'm taking little Cinnamon for a walk!"); + folk(991, 1081, "* Teens kept decorating Gyftrot's horns as a prank...|* So now everyone decorates a tree and puts presents under it instead."); + folk(1202, 1043, "* Papyrus reports straight to the Royal Guard.\n* Around here, that's about all the government we've got."); + folk(1457, 1042, "* Everyone makes light of how things are down here.\n* I don't think it's funny."); + folk(1515, 1040, "* If we didn't laugh about it, we'd just be sad.\n* So we laugh."); + folk(1840, 1044, "* (The sign says \"Librarby.\")"); + if (flag(F_PAPYRUS) == 1) { + Obj *p = obj_papyrus(2190, 1100, DIR_DOWN); + if (p) p->event = EV_PAP_HOUSE, p->flags |= OF_TALK; + if (!flag(F_GRILLBYS)) { + Obj *s = obj_sans(1290, 1104, DIR_DOWN); + if (s) s->event = EV_GRILLBYS, s->flags |= OF_TALK; + } + } + folk(1099, 1093, "* Yo! You're a kid too, right?\n* I can tell 'cause you're wearing a striped shirt.|* I'm going to see Undyne fight someday.\n* She's the coolest!"); + break; + case ROOM_TOWNNORTH: + folk(1463, 851, "* The kids are playing \"monsters and humans.\"\n* Ah, to be young again..."); + folk(1513, 880, "* I'm the human! You can't catch me!"); + folk(1505, 807, "* (Knock knock.)\n* ... Who's there?\n* ...|* Oh, I just love it when someone knocks."); + folk(1910, 789, "* I throw ice into the water.\n* It floats all the way to the CORE."); + break; + case ROOM_TOWNDOCK: + folk(1611, 589, "* Tra la la.\n* The boat isn't going anywhere today."); + break; + case ROOM_INN1: { + Obj *k = obj_trigger(636, 770, 26, 26, EV_INN, ACTOR_ITEM); + if (k) k->flags = OF_TALK | OF_SOLID; + folk(698, 815, "* My mom runs this inn.\n* Sleep in a bed and you'll feel all better!"); + break; + } + case ROOM_INN2: + obj_sign(680, 520, 80, 80, "* (Two people are snoring loudly.)"); + break; + case ROOM_GRILLBYS: + folk(1246, 770, "* (Grillby is silently cleaning a glass.)"); + folk(1214, 792, "* Cheep cheep!\n* (The dogs here are the Royal Guard's Snowdin squad.)"); + folk(1194, 786, "* I'm fishing for a date.\n* Literally."); + folk(1156, 782, "* (Lesser Dog is playing poker against itself.)"); + folk(1174, 834, "* (Bark!)"); + folk(1134, 860, "* I'm thinking of getting a collar...\n* Then maybe someone would take me for a walk."); + folk(1316, 903, "* I want new drinks...\n* And hot guys!"); + folk(1324, 833, "* Monster food turns into energy right away.\n* I want to try human food someday."); + folk(1329, 767, "* New Home's getting crowded.\n* I bet someday everyone moves out here."); + if (flag(F_DOGI) != 2) { + folk(1209, 871, "* Watch out for Greater Dog.\n* It'll love you to death."); + folk(1238, 853, "* Nobody respects the sentries..."); + } + break; + case ROOM_LIBRARY: + obj_sign(1830, 506, 30, 40, "* Monster funerals, technically speaking, are cool as heck.|* When monsters get old and kick the bucket, they turn into dust.\n* At funerals, we take that dust and spread it on that person's favorite thing.|* Then their essence will live on in that thing...\n* Uhhh, am I at the page minimum yet? I'm kinda sick of writing this."); + obj_sign(1874, 506, 30, 40, "* While monsters are mostly made of magic, human beings are mostly made of water.|* Humans, with their physical forms, are far stronger than us.\n* But they will never know the joy of expressing themselves through magic.|* They will never get a bullet-pattern birthday card..."); + obj_sign(1918, 506, 30, 40, "* (Here I am... Writing this book.)\n* (A person comes in and picks up the book...)\n* (They start reading it...!)"); + obj_sign(1962, 506, 30, 40, "* Because they are made of magic, monsters' bodies are attuned to their SOUL.|* If a monster doesn't want to fight, its defenses will weaken.\n* And the crueller the intentions of our enemies, the more their attacks will hurt us.|* Therefore, if a being with a powerful SOUL struck with the desire to kill...\n* Um, let's end the chapter here..."); + obj_sign(2006, 506, 30, 40, "* Fearing the humans no longer, we moved out of our old city, HOME.|* We braved harsh cold, damp swampland, and searing heat...\n* Until we reached what we now call our capital.|* \"NEW HOME.\"\n* Again, our King is really bad at names...?"); + obj_sign(2050, 506, 30, 40, "* Love, hope, compassion...\n* This is what people say monster SOULs are made of.|* But the absolute nature of the \"SOUL\" is unknown.\n* After all, humans have proven their SOULs don't need these things to exist."); + folk(1896, 640, "* Yes, the sign outside says \"Librarby.\"\n* We made a typo when we were making it."); + folk(2031, 655, flag(F_WORDSEARCH) == 2 ? "* I can see it in your eyes...\n* You think Junior Jumble is harder." : "* I can see it in your eyes...\n* You think crosswords are harder."); + folk(2002, 589, "* There's no news around here, so the newspaper is mostly comics and puzzles."); + folk(2044, 590, "* I make the word searches.\n* Number one in the underground!"); + break; + case ROOM_PSHOUSE: + { + Obj *couch = obj_trigger(2300, 892, 82, 40, EV_COUCH, ACTOR_ITEM); + if (couch) couch->flags = OF_TALK; + } + obj_sign(2316, 834, 52, 30, "* (A TV.)"); + obj_sign(2398, 800, 64, 50, "* (The kitchen.)"); + if (flag(F_PAP_DATE) == 1) { + Obj *p = obj_papyrus(2276, 940, DIR_RIGHT); + if (p) p->event = EV_PAP_DATE, p->flags |= OF_TALK; + } + break; + case ROOM_SANSROOM: + obj_sign(2560, 600, 40, 40, "* (It's dark... A trash tornado swirls in the corner.)"); + break; + case ROOM_SHED: + obj_sign(2650, 770, 30, 20, flag(F_PAP_CAPTURED) <= 1 ? "* SORRY, I HAVE TO LOCK YOU IN THE GUEST ROOM UNTIL UNDYNE ARRIVES.\n* FEEL FREE TO MAKE YOURSELF AT HOME!!!|* REFRESHMENTS AND ACCOMODATIONS HAVE BEEN PROVIDED.\n* - NYEHFULLY YOURS, PAPYRUS" + : flag(F_PAP_CAPTURED) == 2 ? "* PLEASE ASK BEFORE YOU ESCAPE!!!\n* WHEN YOU WENT MISSING, I GOT WORRIED SICK!!!\n* - SLIGHTLY BONETROUSLED, PAPYRUS" + : "* IF YOU'RE JUST LOOKING FOR A PLACE TO STAY...\n* JUST ASK!!! YOU DON'T NEED TO FIGHT ME!!!\n* - YOUR HOST, PAPYRUS"); + obj_sign(2680, 820, 40, 30, "* (A dog bed. It's warm.)"); + break; + case ROOM_FOGROOM: + if (!flag(F_PAPYRUS)) obj_trigger(3290, 1030, 30, 150, EV_PAP_FIGHT, ACTOR_TRIGGER); + obj_trigger(3596, 1040, 24, 140, EV_SNOW_END, ACTOR_TRIGGER2); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_shop(Ev *c) { + EV_BEGIN; + pl.y = (int16_t)(pl.y + 6); /* (a step back from the door, for after) */ + shop_open(SHOP_SNOWDIN); + WAIT_UNTIL(g_mode == MODE_WORLD); + pl.dir = DIR_DOWN; + EV_END; +} + +static int ev_inn(Ev *c) { + EV_BEGIN; + NARRATE("* Hello, traveller.\n* Welcome to Snowed Inn.|* A room is 80G for the night.\n* Would you like to stay?@Stay@Leave"); + if (CHOICE() == 1) { + NARRATE("* Come back anytime!"); + } else if (sv.gold < 80) { + NARRATE("* Oh... You don't have enough money...|* ... Um, you know what? Take the room anyway."); + c->v[0] = 1; + } else { + c->v[0] = 1; + } + if (c->v[0]) { + NARRATE("* Here's your key.\n* Sleep well!"); + world_fade_hold(ROOM_INN2, 540, 620, DIR_DOWN, 90); + WAIT_UNTIL(!world_fading()); + sv.hp = sv.maxhp; + set_flag(F_INN, flag(F_INN) + 1); + NARRATE("* (You slept soundly. Your HP was maxed out.)|* (The innkeeper gave you your money back.)"); + } + EV_END; +} + +static int ev_town_door(Ev *c) { + int k = c->self ? c->self->arg : 0; + EV_BEGIN; + if (k == 0 && flag(F_TOWN_HOUSE)) { /* Papyrus and Sans's house */ + FADE_TO(ROOM_PSHOUSE, 2436, 914, DIR_UP); + return 1; + } + NARRATE("* (It's locked.)"); + pl.y = (int16_t)(pl.y + 6); /* (a step back off the door) */ + EV_END; +} + +static int ev_pap_fight(Ev *c) { + Obj *p = obj_get(ACTOR_PAPYRUS); + EV_BEGIN; + /* through the fog, a tall silhouette */ + p = obj_papyrus(3440, 1100, DIR_LEFT); + p = obj_get(ACTOR_PAPYRUS); + pl.dir = DIR_RIGHT; + WALK(p, 3400, 1100, 1); + if (flag(F_PAP_CAPTURED) >= 3) { + SAY(FACE_PAPYRUS, "`0* HUMAN! YOU KEEP COMING BACK...\n* WOULD YOU LIKE TO SKIP OUR BATTLE?@Yes@No"); + if (CHOICE() == 0) { + SAY(FACE_PAPYRUS, "`2* WELL THEN! LET'S BE FRIENDS INSTEAD!!!"); + set_flag(F_PAPYRUS, 1); + goto spared; + } + } else if (flag(F_PAP_CAPTURED)) { + SAY(FACE_PAPYRUS, "`0* HUMAN! YOU ESCAPED!\n* LET'S TRY THIS AGAIN!!!"); + } else { + SAY(FACE_PAPYRUS, "`0* HUMAN. I HAVE BEEN THINKING.\n* YOU LIKE PASTA. YOU SOLVE PUZZLES. YOU SEEM... COOL.|`2* I COULD BE YOUR FRIEND!!!|`3* NO! A ROYAL GUARD CAN'T BEFRIEND A HUMAN!\n* I MUST CAPTURE YOU AND JOIN THE GUARD!!!"); + } + sv.hp = sv.maxhp; + BATTLE(FORM_PAPYRUS); + set_flag(F_SNOWDIN_BOSSES, flag(F_SNOWDIN_BOSSES) + 1); + if (battle_result() == BR_SCRIPTED) { + /* captured: off to the shed */ + set_flag(F_PAP_CAPTURED, flag(F_PAP_CAPTURED) + 1); + if (flag(F_PAP_CAPTURED) == 1) + SAY(FACE_PAPYRUS, "`2* NYEH HEH HEH! CAPTURED!!!\n* OFF TO THE CAPTURE ZONE WITH YOU! (OUR SHED.)"); + else if (flag(F_PAP_CAPTURED) == 2) + SAY(FACE_PAPYRUS, "`2* CAPTURED AGAIN!!!\n* THE SHED HAS BEEN IMPROVED SINCE YOUR LAST VISIT."); + else + SAY(FACE_PAPYRUS, "`2* YOU ARE... PERSISTENT!\n* BUT I AM THE PERSISTENTEST!!!"); + gone(p); + world_fade_hold(ROOM_SHED, 2640, 840, DIR_DOWN, 40); + WAIT_UNTIL(!world_fading()); + return 1; + } + if (bt.mon[0].killed) { + set_flag(F_PAPYRUS, 2); + gone(p); + SAY(FACE_PAPYRUS, "`4* WELL... I DIDN'T SEE THAT COMING.|* STILL, I THINK YOU CAN BE BETTER THAN THIS.\n* I BELIEVE IN YOU!"); + if (c->self) gone(c->self); + return 1; + } + set_flag(F_PAPYRUS, 1); +spared: + SAY(FACE_PAPYRUS, "`4* NYOO HOO HOO... I COULDN'T EVEN CAPTURE YOU.\n* SO MUCH FOR THE ROYAL GUARD.|`0* WAIT... YOU WANT TO BE FRIENDS???|`2* WOWIE!!! COME HANG OUT AT MY HOUSE LATER!|`0* (THE CAPITAL IS FURTHER ON, PAST THE TOWN.)"); + set_flag(F_PAP_DATE, 1); + set_flag(F_TOWN_HOUSE, 1); + WALK(p, 3240, 1100, 6); + gone(p); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_pap_house(Ev *c) { + EV_BEGIN; + if (flag(F_PAP_DATE) == 1) { + SAY(FACE_PAPYRUS, "`0* HUMAN! READY TO HANG OUT?\n* COME INSIDE!!!"); + FADE_TO(ROOM_PSHOUSE, 2436, 914, DIR_UP); + } else { + SAY(FACE_PAPYRUS, "`2* HELLO, FRIEND!!!"); + } + EV_END; +} + +static int ev_pap_date(Ev *c) { + EV_BEGIN; + /* his room, his spaghetti, his number */ + SAY(FACE_PAPYRUS, "`0* WELCOME TO MY HOUSE!\n* THIS IS WHERE I LIVE WITH MY BROTHER, SANS.|* LET'S GO TO MY ROOM!!!"); + FADE_TO(ROOM_PAPROOM, 2290, 650, DIR_UP); + { + Obj *p = obj_papyrus(2330, 640, DIR_LEFT); + (void)p; + } + SAY(FACE_PAPYRUS, "`0* MY ROOM!!! IMPRESSIVE, ISN'T IT?|`4* NOW... HANGING OUT. I READ A GUIDE ABOUT THIS.|`0* STEP ONE: A PRESENT!\n* FOR YOU: SPAGHETTI!@Eat it@Keep it"); + if (CHOICE() == 0) SAY(FACE_PAPYRUS, "`2* WOWIE!!! YOU LIKED IT?!?\n* I'LL HAVE TO MAKE MORE!!!"); + else SAY(FACE_PAPYRUS, "`2* SAVING IT FOR LATER?\n* A TRUE CONNOISSEUR!"); + SAY(FACE_PAPYRUS, "`4* HUMAN... I'VE THOUGHT ABOUT IT.\n* LET'S STAY FRIENDS! THE BEST OF FRIENDS!!!|`2* TAKE MY PHONE NUMBER! CALL ANY TIME!\n* NYEH HEH HEH!!!"); + NARRATE("* (You got Papyrus's phone number.)"); + set_flag(F_PAP_DATE, 2); + FADE_TO(ROOM_SNOWTOWN, 2240, 1096, DIR_DOWN); + EV_END; +} + +static int ev_grillbys(Ev *c) { + EV_BEGIN; + SAY(FACE_SANS, "* hey.\n* thanks for keeping my brother entertained.|* want to grab some lunch?@Sure@Not now"); + if (CHOICE() == 1) { + SAY(FACE_SANS, "* ok. maybe later."); + return 1; + } + SAY(FACE_SANS, "* well, i know a shortcut."); + FADE_TO(ROOM_GRILLBYS, 1230, 880, DIR_UP); + SAY(FACE_SANS, "* here's a good seat.|* so, what'll it be?\n`2* fries or burger?@Fries@Burger"); + SAY(FACE_SANS, "* nice.|* say... papyrus says a #Yflower#X talks to him sometimes.\n* gives him advice. weird, right?|* if you see a talking flower, tell me, ok?|`1* oh, and thanks for paying."); + set_flag(F_GRILLBYS, 1); + FADE_TO(ROOM_SNOWTOWN, 1310, 1096, DIR_DOWN); + EV_END; +} + +static int ev_snow_end(Ev *c) { + EV_BEGIN; + /* on to Waterfall: not made yet */ + set_flag(F_SNOW_EXIT, 1); + sv.room = (int16_t)g_room, sv.x = (int16_t)(pl.x - 20), sv.y = pl.y; + save_write_auto(); + menu_end_open(); + EV_END; +} + +static int ev_couch(Ev *c) { + EV_BEGIN; + if (!flag(F_COUCH_GOLD)) { + set_flag(F_COUCH_GOLD, 1); + sv.gold = (uint16_t)min_i(9999, sv.gold + 20); + NARRATE("* (There's 20G under the couch!)"); + } else { + NARRATE("* (It's a couch.)"); + } + EV_END; +} + +int town_event(Ev *c) { + switch (c->id) { + case EV_SHOP: return ev_shop(c); + case EV_INN: return ev_inn(c); + case EV_TOWN_DOOR: return ev_town_door(c); + case EV_PAP_FIGHT: return ev_pap_fight(c); + case EV_PAP_HOUSE: return ev_pap_house(c); + case EV_PAP_DATE: return ev_pap_date(c); + case EV_GRILLBYS: return ev_grillbys(c); + case EV_SNOW_END: return ev_snow_end(c); + case EV_COUCH: return ev_couch(c); + } + return -1; +} diff --git a/games/undertale/src/text.c b/games/undertale/src/text.c index d636eea4..a41ede6e 100644 --- a/games/undertale/src/text.c +++ b/games/undertale/src/text.c @@ -254,6 +254,7 @@ static int last_choice; static char fmt_buf[512]; void text_set_top(int top) { box_top = top; } +void text_wrap_width(int w) { wrap_width = w; } void text_open(int face, const char *s) { box_face = face; diff --git a/games/undertale/src/text.h b/games/undertale/src/text.h index a566b0d7..d4c17127 100644 --- a/games/undertale/src/text.h +++ b/games/undertale/src/text.h @@ -53,6 +53,7 @@ void text_draw(void); int text_choice(void); /* 0 or 1: the last choice made (a list's: its index, -1 Back) */ void text_open_menu(const char *const *opts, int n); /* a list of options in the box */ void text_set_top(int top); +void text_wrap_width(int w); /* where the next writer's lines wrap (pixels from its left) */ int text_menu_sel(void); /* (the tests) a list's selection, 100 + a page's choice, -1 neither open */ /* -1: by where Frisk is (the game's way), 0 bottom, 1 top */ extern char g_name[8]; /* the fallen human's name */ #endif diff --git a/games/undertale/src/world.c b/games/undertale/src/world.c index fa2a7d98..50073d31 100644 --- a/games/undertale/src/world.c +++ b/games/undertale/src/world.c @@ -245,10 +245,30 @@ static bool step(int sx, int sy, bool slide) { return false; } +static int8_t slide_dx, slide_dy; +bool pl_sliding(void) { return slide_dx || slide_dy; } + static void player_move(uint32_t keys, uint32_t pressed) { int dx = ((keys & K_RIGHT) != 0) - ((keys & K_LEFT) != 0); int dy = ((keys & K_DOWN) != 0) - ((keys & K_UP) != 0); face_from_keys(keys, pressed); + /* on ice he slides the way he went on until he's off it, or something stops him */ + if (room_ice(pl.x + PBX + PBW / 2, pl.y + PBY + PBH / 2)) { + if (!slide_dx && !slide_dy && (dx || dy)) { + static const int8_t ddx[4] = {0, 0, -1, 1}, ddy[4] = {1, -1, 0, 0}; + slide_dx = ddx[pl.dir], slide_dy = ddy[pl.dir]; + } + if (slide_dx || slide_dy) { + bool moved = false; + for (int i = 0; i < 4; i++) moved |= step(slide_dx, slide_dy, false); + if (!moved) slide_dx = slide_dy = 0; + pl.anim = 0, pl.frame = 0; + pl.moving = moved; + return; + } + } else { + slide_dx = slide_dy = 0; + } bool moved = false; for (int i = 0; i < SPEED; i++) { if (dx) moved |= step(dx, 0, !dy); @@ -343,7 +363,9 @@ void world_update(uint32_t keys, uint32_t pressed) { /* a door */ for (int i = 0; i < ndoors; i++) if (boxes_meet(pl.x + PBX, pl.y + PBY, PBW, PBH, doors[i].x, doors[i].y, doors[i].w, doors[i].h)) { - world_fade_to(doors[i].room, doors[i].tx, doors[i].ty, doors[i].dir); + /* (a side door between rooms with a gap keeps Frisk's height: DOOR_KEEP) */ + world_fade_to(doors[i].room, doors[i].tx == DOOR_KEEP ? pl.x : doors[i].tx, + doors[i].ty == DOOR_KEEP ? pl.y : doors[i].ty, doors[i].dir); fade.walked = true; return; } @@ -376,8 +398,9 @@ Obj *obj_npc(int name, const uint16_t spr[4], int x, int y, int dir, int event) Frame f; frame_get(spr[0], 0, &f); o->name = (uint8_t)name, o->dir = (uint8_t)dir, o->event = (uint16_t)event; - o->bx = (int16_t)(f.w / 5), o->bw = (int16_t)(f.w - 2 * (f.w / 5)), o->bh = (int16_t)(f.h / 4 < 8 ? 8 : f.h / 4); - o->by = (int16_t)(f.h - o->bh); + /* its box: the bottom of its sprite, a little narrower (from the sprite's origin: its top-left or its feet) */ + o->bx = (int16_t)(f.w / 5 - f.ox), o->bw = (int16_t)(f.w - 2 * (f.w / 5)), o->bh = (int16_t)(f.h / 4 < 8 ? 8 : f.h / 4); + o->by = (int16_t)(f.h - o->bh - f.oy); o->flags = OF_SOLID | (event ? OF_TALK : 0) | OF_WALKANIM; return o; } @@ -449,8 +472,22 @@ bool near_frisk(const Obj *o, int d) { return abs_i(ox - px) <= d && abs_i(oy - py) <= d; } +bool cam_pan(int x, int y, int sp) { + cam_locked = true; + cam_x += clamp_i(x - cam_x, -sp, sp), cam_y += clamp_i(y - cam_y, -sp, sp); + return cam_x == x && cam_y == y; +} +void cam_free(void) { cam_locked = false; } + +void room_draw_floor(void); /* rooms.c */ + +int g_shake; /* frames the view shakes */ + void world_draw(void) { + int keep_x = cam_x, keep_y = cam_y; + if (g_shake > 0) cam_x += (rnd_n(3) - 1) * 2, cam_y += (rnd_n(3) - 1) * 2, g_shake--; gfx_tiles(cam_x, cam_y); + room_draw_floor(); /* the room's objects and Frisk, the lower ones in front */ DrawRef order[MAX_OBJS + 1]; int n = 0; @@ -480,7 +517,9 @@ void world_draw(void) { for (int k = 0; k < o->arg; k++) gfx_sprite(o->spr[0], o->frame, o->x + k * 20 - cam_x, o->y + r * 20 - cam_y, 0, 255); continue; } - gfx_sprite(obj_sprite(o), o->frame, o->x - cam_x, o->y - cam_y, 0, o->alpha); + if (o->flags & OF_DARK) gfx_sprite_color(obj_sprite(o), o->frame, o->x - cam_x, o->y - cam_y, 0, C_BLACK, o->alpha); + else gfx_sprite(obj_sprite(o), o->frame, o->x - cam_x, o->y - cam_y, (o->flags & OF_FLIP) ? GFX_FLIPX : 0, o->alpha); } } + cam_x = keep_x, cam_y = keep_y; } diff --git a/games/undertale/src/world.h b/games/undertale/src/world.h index 150a7314..3df2f043 100644 --- a/games/undertale/src/world.h +++ b/games/undertale/src/world.h @@ -24,7 +24,9 @@ enum { OF_ANIM = 16, /* its frames cycle (anim_speed) even standing */ OF_WALKANIM = 32, /* its frames cycle while it walks */ OF_FRONT = 64, /* drawn over everything else */ - OF_BACK = 128 /* drawn under everything else */ + OF_BACK = 128, /* drawn under everything else */ + OF_DARK = 256, /* a silhouette */ + OF_FLIP = 512 /* drawn mirrored */ }; #define MAX_OBJS 48 typedef struct { @@ -81,9 +83,12 @@ void obj_spikes_set(Obj *o, bool raised); Obj *obj_rock(int x, int y, int name, int event); /* pushed by walking into it; with an event, it talks */ void obj_set_box(Obj *o, int bx, int by, int bw, int bh); bool near_frisk(const Obj *o, int d); /* within d pixels (their feet) */ +bool room_ice(int x, int y); /* rooms.c: ice there (Frisk slides) */ +bool pl_sliding(void); /* the room fades out, then in: room changes in the middle */ void world_fade_to(int room, int x, int y, int dir); void world_fade_hold(int room, int x, int y, int dir, int hold); /* black for `hold` frames in the middle */ bool world_fading(void); extern uint8_t g_fade; /* 0 clear, 255 black: drawn over the room */ +extern int g_shake; /* frames the view shakes */ #endif diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index 1c81bf1f..ee13235c 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -1,11 +1,11 @@ #!/usr/bin/env python3 """Checks of Undertale on a computer (make test): the host build, with -AddressSanitizer and UBSan, through the menus, every battle, the saves and -the whole Ruins. +AddressSanitizer and UBSan, through the menus, every battle, the saves, the +whole Ruins and the whole of Snowdin. python3 tests/check.py build/play [--quick] ---quick skips playing the whole Ruins (the longest part).""" +--quick skips playing the whole Ruins and Snowdin (the longest parts).""" import os import re import shutil @@ -26,7 +26,11 @@ for i, n in enumerate(n.strip() for n in body.split(",") if n.strip()): FLAGS[n] = i -MODE_WORLD, MODE_BATTLE, MODE_END = 2, 3, 8 +MODE_WORLD, MODE_BATTLE, MODE_END, MODE_SHOP = 2, 3, 8, 9 +# rooms and battles (src/data.h, src/monsters.h) +ROOMS = {m.group(1): int(m.group(2)) for m in + re.finditer(r"#define ROOM_(\w+) (\d+)", open(os.path.join(HERE, "..", "src", "data.h")).read())} +FORM_SNOWDRAKE, FORM_PAPYRUS = 19, 31 def run(args, frames, saves=None, what=""): @@ -81,6 +85,28 @@ def check(cond, msg): s = run(["--god", "--battle", "16", "--path", "act:3"], 6000, what="Napstablook, cheered up") check(s and s["mode"] == MODE_WORLD and s["kills"] == 0, f"Napstablook was not spared by cheering: {s}") +# Snowdin's battles: fled from, fought (the Snowdrake, the Gyftrot, the Glyde, the Greater Dog...), and Papyrus, +# who can't be fled: spared once he spares you, or (the SOUL hurt) he captures you +for form in range(FORM_SNOWDRAKE, FORM_PAPYRUS): + s = run(["--god", "--battle", str(form), "--path", "flee"], 1500, what=f"battle {form}, fleeing") + check(s and s["mode"] == MODE_WORLD, f"battle {form}: fleeing did not end it: {s}") +for form in (19, 20, 26, 27, 28, 30): + s = run(["--god", "--battle", str(form), "--path", "fight"], 4000, what=f"battle {form}, fighting") + check(s and s["mode"] == MODE_WORLD and s["kills"] >= 1, f"battle {form}: FIGHT did not win it: {s}") +s = run(["--god", "--battle", str(FORM_PAPYRUS), "--path", "spare"], 15000, what="Papyrus, spared") +check(s and s["mode"] == MODE_WORLD and s["kills"] == 0, f"Papyrus was not spared: {s}") +s = run(["--battle", str(FORM_PAPYRUS), "--path", "spare"], 6000, what="Papyrus, captured") +check(s and s["mode"] == MODE_WORLD and s["hp"] == 1, f"Papyrus did not capture Frisk: {s}") + +# the shop in Snowdin: a Cinnamon Bunny for 25G; Papyrus's date: his phone number +s = run(["--name", "Frisk", "--noenc", "--room", str(ROOMS["SNOWTOWN"]), "--at", "446,1092", "--gold", "100", "--keys", + "2-24:up,60:z,90:down,100:down,110:down,120:z,140:z,170:x,190:down,200:down,210:down,220:z"], 400, what="the shop") +check(s and s["gold"] == 75 and s["items"][0] == 16, f"the shop did not sell a Cinnamon Bunny: {s}") +s = run(["--name", "Frisk", "--noenc", "--room", str(ROOMS["PSHOUSE"]), "--at", "2436,914", "--flag", + f"{FLAGS['F_PAPYRUS']}=1", "--flag", f"{FLAGS['F_PAP_DATE']}=1", "--path", + "go:2300,918;l;w5;l;w5;l;w5;z;pick:0;talk;w60"], 2500, what="Papyrus's date") +check(s and flag(s, "PAP_DATE") == 2, f"the date did not end with Papyrus's number: {s}") + # the leaf pile's SAVE, then Continue from the title d = tempfile.mkdtemp(prefix="undertale_check_") s = run(["--name", "Frisk", "--noenc", "--room", "8", "--at", "5012,4498", "--path", "u;z;w20;z;w30;x"], 300, saves=d, @@ -99,7 +125,7 @@ def check(cond, msg): if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--path-file", os.path.join(HERE, "ruins.path")], 40000, what="the Ruins") - check(s and s["mode"] == MODE_END, f"the Ruins did not end at their door: {s}") + check(s and s["mode"] == MODE_WORLD and s["room"] == ROOMS["SNOWDIN1"], f"the Ruins' door did not lead to Snowdin: {s}") if s: for name, v in (("FLOWEY_MET", 1), ("DUMMY", 1), ("RUINS5_DONE", 1), ("RUINS6_DONE", 1), ("PHONE", 1), ("RUINS9_ROCK", 1), ("RUINS11_ROCK", 5), ("NAPSTA", 1), ("ONESWITCH", 1), ("ROTATE4", 1), @@ -109,6 +135,20 @@ def check(cond, msg): check(s["kills"] == 0, f"the Ruins: {s['kills']} killed on the friendly way") check(s["items"].count(1) == 2, f"the Ruins: not the two pieces of Monster Candy: {s['items']}") +# the whole of Snowdin, the friendly way: Sans, Papyrus's puzzles (the maze, the X/O ones, the ice, the tiles), +# Doggo, Dogamy and Dogaressa, Greater Dog, the Gauntlet, the town, Papyrus spared, the way on +if not QUICK: + s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["SNOWDIN1"]), "--at", "34,392", "--path-file", + os.path.join(HERE, "snowdin.path")], 30000, what="Snowdin") + check(s and s["mode"] == MODE_END, f"Snowdin did not end on the way to Waterfall: {s}") + if s: + for name, v in (("BRANCH", 1), ("SANS_MET", 1), ("PAP_SENTRY", 1), ("DOGGO", 1), ("ELECMAZE", 2), + ("WORDSEARCH", 1), ("SNOWPUZZLE", 1), ("DOGI", 1), ("XOXO1", 1), ("XOXO2", 1), ("XOXO3", 1), + ("PAP_XOXO1", 2), ("TILES", 1), ("GREATERDOG", 1), ("GAUNTLET", 1), ("PAPYRUS", 1), + ("PAP_DATE", 1), ("TOWN_HOUSE", 1), ("SNOW_EXIT", 1)): + check(flag(s, name) == v, f"Snowdin: F_{name} is {flag(s, name)}, not {v}") + check(s["kills"] == 0, f"Snowdin: {s['kills']} killed on the friendly way") + if failures: print("\n".join("FAIL " + f for f in failures)) sys.exit(1) diff --git a/games/undertale/tests/play.c b/games/undertale/tests/play.c index 1f369196..6277afa7 100644 --- a/games/undertale/tests/play.c +++ b/games/undertale/tests/play.c @@ -1,7 +1,7 @@ /* Plays Undertale on a computer, with scripted keys, and saves frames. * * play [--frames N] [--keys "10-40:right,50:z,..."] [--shots 30,60|all] [--out DIR] [--saves DIR] - * [--room N --at X,Y] [--name NAME] [--flag F=V]... [--battle ID] [--trace] + * [--room N --at X,Y] [--name NAME] [--flag F=V]... [--gold N] [--battle ID] [--trace] * * --path "x,y;x,y;z;w30;..." steers Frisk to each point in turn (holding arrows), presses Z ("z"), X ("x"), * waits ("wN": N frames) or mashes Z through talks ("talk": until no text or event is left), when the scripted @@ -9,6 +9,7 @@ * Keys: left right up down z x c home. "a-b:key" holds the key from frame a to b, "a:key" for one frame. * --room starts a new game in room N (its ROOM_* number) with Frisk's top-left at (X, Y), past the title. * Screenshots are DIR/shot_.ppm. */ +#include #include #include #include @@ -97,13 +98,21 @@ static uint32_t path_keys(int f) { if (e) { const char *n = e + 1; bool nb = !strncmp(n, "fight", 5) || !strncmp(n, "spare", 5) || !strncmp(n, "bt", 2) || !strncmp(n, "act:", 4) || - !strncmp(n, "flee", 4); + !strncmp(n, "flee", 4) || !strncmp(n, "seq:", 4); bool hb = !strncmp(path_at, "fight", 5) || !strncmp(path_at, "spare", 5) || !strncmp(path_at, "bt", 2) || - !strncmp(path_at, "act:", 4) || !strncmp(path_at, "flee", 4) || !strncmp(path_at, "pick:", 5); + !strncmp(path_at, "act:", 4) || !strncmp(path_at, "flee", 4) || !strncmp(path_at, "pick:", 5) || + !strncmp(path_at, "seq:", 4); if (!hb && ((g_mode == MODE_BATTLE && nb) || (g_mode == MODE_WORLD && text_menu_sel() >= 0 && !strncmp(n, "pick:", 5)))) path_at = e + 1; } } + /* a choice up while Frisk still walks: a "pick:" a few steps on (past "talk"s and points) is for it */ + if (g_mode == MODE_WORLD && text_menu_sel() >= 0 && strncmp(path_at, "pick:", 5)) { + char *n = strchr(path_at, ';'); + for (int k = 0; n && k < 3 && (!strncmp(n + 1, "talk", 4) || !strncmp(n + 1, "go:", 3) || isdigit((unsigned char)n[1])); k++) + n = strchr(n + 1, ';'); + if (n && !strncmp(n + 1, "pick:", 5)) path_at = n + 1; + } /* "pick:N": the option N of the next list or choice */ if (!strncmp(path_at, "pick:", 5) && g_mode == MODE_WORLD) { int n = atoi(path_at + 5), sel = text_menu_sel(); @@ -123,7 +132,28 @@ static uint32_t path_keys(int f) { * "bt" (a scripted battle) reads on; Z on whatever else comes (the bar, the texts). A battle the path didn't * expect: Frisk flees it */ bool btok = !strncmp(path_at, "fight", 5) || !strncmp(path_at, "spare", 5) || !strncmp(path_at, "bt", 2) || - !strncmp(path_at, "act:", 4) || !strncmp(path_at, "flee", 4); + !strncmp(path_at, "act:", 4) || !strncmp(path_at, "flee", 4) || !strncmp(path_at, "seq:", 4); + /* "seq:a,b@2,...": an ACT a turn (b@2: on the second monster), MERCY once one can be spared or they're done */ + static char *seq_for; + static int seq_i; + int seq_act = 0, seq_target = 0; + bool seq = !strncmp(path_at, "seq:", 4); + if (seq) { + if (seq_for != path_at) seq_for = path_at, seq_i = 0; + const char *q = path_at + 4; + for (int k = 0; k < seq_i && q && *q && *q != ';'; k++) { + q = strchr(q, ','); + if (q) q++; + } + if (q && *q && *q != ';') { + seq_act = atoi(q); + const char *at = strchr(q, '@'), *comma = strchr(q, ','), *semi = strchr(q, ';'); + if (at && (!comma || at < comma) && (!semi || at < semi)) seq_target = atoi(at + 1) - 1; + } + bool can = false; + for (int i = 0; i < bt.nmon; i++) can |= bt.mon[i].alive && !bt.mon[i].gone && bt.mon[i].spare; + if (can) seq_act = 0; + } static int idle; if (g_mode == MODE_BATTLE) { idle = 0; @@ -131,11 +161,16 @@ static uint32_t path_keys(int f) { if (f & 1) return 0; if (bt.scripted) return K_Z; /* (Flowey's: read on) */ int want = !btok || !strncmp(path_at, "flee", 4) || !strncmp(path_at, "spare", 5) ? 3 : !strncmp(path_at, "act:", 4) ? 1 : 0; + if (seq) want = seq_act ? 1 : 3; int mercy = (!btok || !strncmp(path_at, "flee", 4)) && !bt.no_flee ? 1 : 0; switch (battle_ui()) { case BUI_MENU: return bt.button < want ? K_RIGHT : bt.button > want ? K_LEFT : K_Z; + case BUI_TARGET: + if (seq && bt.button == 1) return bt.target < seq_target ? K_DOWN : bt.target > seq_target ? K_UP : K_Z; + return K_Z; case BUI_ACTS: { - int n = atoi(path_at + 4); + int n = seq ? seq_act : atoi(path_at + 4); + if (seq && bt.act == n) seq_i++; return bt.act + 2 <= n ? K_DOWN : bt.act < n ? K_RIGHT : bt.act - 2 >= n ? K_UP : bt.act > n ? K_LEFT : K_Z; } case BUI_MERCY: return bt.mercy < mercy ? K_DOWN : bt.mercy > mercy ? K_UP : K_Z; @@ -190,6 +225,15 @@ static uint32_t path_keys(int f) { int gx, gy; sscanf(tok + 3, "%d,%d", &gx, &gy); static int planned_room; + if (planned == path_at && planned_room != g_room) { + /* a door to another area on the way: the point was there, so it is reached */ + RoomInfo a, b; + room_info(planned_room, &a), room_info(g_room, &b); + if (a.area != b.area) { + path_at = next, planned = NULL; + return 0; + } + } if (planned != path_at || planned_room != g_room) { planned = path_at, planned_room = g_room; if (!go_plan(gx, gy)) { @@ -279,7 +323,7 @@ int main(int argc, char **argv) { const char *out = "build/play", *saves = NULL, *shots = ""; int frames = 120, room = -1, ax = 0, ay = 0, battle = -1; const char *name = NULL; - int nflags = 0, fl[64][2]; + int nflags = 0, fl[64][2], gold = -1; bool trace = false, coll = false, god = false; for (int i = 1; i < argc; i++) { if (!strcmp(argv[i], "--frames") && i + 1 < argc) frames = atoi(argv[++i]); @@ -316,6 +360,7 @@ int main(int argc, char **argv) { } else if (!strcmp(argv[i], "--trace")) trace = true; else if (!strcmp(argv[i], "--noenc")) g_no_encounters = true; else if (!strcmp(argv[i], "--god")) god = true; + else if (!strcmp(argv[i], "--gold") && i + 1 < argc) gold = atoi(argv[++i]); else if (!strcmp(argv[i], "--coll")) coll = true; else fprintf(stderr, "unknown option %s\n", argv[i]), exit(2); } @@ -341,6 +386,7 @@ int main(int argc, char **argv) { } } for (int i = 0; i < nflags; i++) set_flag(fl[i][0], fl[i][1]); + if (gold >= 0) sv.gold = (uint16_t)gold; if (battle >= 0) battle_start(battle); bool all = !strcmp(shots, "all"); for (int f = 0; f < frames && g_running; f++) { diff --git a/games/undertale/tests/snowdin.path b/games/undertale/tests/snowdin.path new file mode 100644 index 00000000..540c2c36 --- /dev/null +++ b/games/undertale/tests/snowdin.path @@ -0,0 +1,242 @@ +# Snowdin from the Ruins door (play it with --room 46 --at 34,392 --name Frisk --noenc --god), the friendly +# way: one step a line, as in ruins.path; seq:a,b@2 picks an ACT a turn (b on the second monster) then MERCY. +# The forest road: Sans at the gate, Papyrus at the lamp +go:1060,404 +1100,404 +go:1760,404 +1800,404 +go:2200,404 +2240,404 +go:2530,404 +2580,404 +talk +# Box Road, the sentry station +go:3200,400 +go:3530,400 +3560,400 +talk +# Doggo: pet it after its attack +go:4110,404 +go:4290,404 +4330,404 +seq:1,1 +go:4570,404 +go:4660,404 +# the invisible electricity maze, along Papyrus's footprints +go:5180,400 +5210,400 +talk +5280,360 +talk +5260,356 +5330,356 +5330,316 +5390,316 +5390,416 +5445,416 +talk +go:5480,420 +# the ball game room (over the plank bridge), the word search, Junior Jumble +go:5490,370 +5530,350 +go:5760,330 +go:6040,420 +go:6080,600 +go:6280,650 +6320,650 +talk +go:6450,650 +pick:0 +talk +# the spaghetti, then the snow puzzle's switch and Dogamy and Dogaressa +go:6600,640 +6640,640 +go:6880,660 +6930,660 +go:7316,690 +u +z +talk +go:7100,960 +go:7180,960 +go:7300,960 +seq:3,2,1@1,1@2 +# the first X/O puzzle, Papyrus and the spaghetti question; the second, with the switch in the tree +go:7370,1100 +7370,1140 +go:7450,1222 +go:7530,1222 +go:7500,1196 +u +z +talk +go:7590,1222 +7620,1222 +talk +pick:0 +talk +go:7690,1222 +7720,1222 +talk +go:7960,1186 +u +z +talk +go:8094,1232 +u +z +talk +# the multicolor tile puzzle +go:8480,1222 +8520,1222 +go:8580,1222 +pick:0 +talk +go:8840,1236 +# the dog house; the ice X/O puzzle: slides (a key, then the wait while Frisk slides), the switch, the bridge +go:9000,1240 +go:9300,1240 +go:9446,1230 +u +u +u +u +u +r +r +r +r +r +r +r +r +r +r +r +r +r +r +r +r +r +r +r +r +r +r +r +w18 +u +r +w11 +l +u +w20 +l +w17 +d +d +d +d +r +l +w3 +r +r +w56 +d +w8 +l +w66 +u +r +r +w8 +r +r +d +d +w30 +r +r +w41 +u +u +w36 +d +w36 +u +l +w50 +r +r +w66 +u +w17 +l +w36 +d +d +l +w3 +d +d +l +w11 +r +r +w46 +u +w5 +z +talk +l +w36 +u +u +u +u +u +u +u +u +u +l +w3 +u +u +l +w31 +u +r +r +w67 +r +r +r +r +r +r +r +9845,1196 +# the snow poffs, Greater Dog (beckon, pet, play, pet, pet), the Gauntlet bridge +go:10500,1240 +go:10830,1240 +seq:2,1,3,1,1 +talk +go:10950,1244 +go:11100,1236 +go:11300,1236 +talk +go:11990,1236 +# Snowdin Town, the fog, Papyrus spared, the way on to Waterfall +go:600,1090 +go:1500,1090 +go:2500,1090 +go:3240,1090 +go:3300,1090 +spare +talk +go:3560,1090 +3640,1090 +talk diff --git a/games/undertale/tools/fetch.py b/games/undertale/tools/fetch.py index 708a6fba..657aea85 100644 --- a/games/undertale/tools/fetch.py +++ b/games/undertale/tools/fetch.py @@ -25,6 +25,7 @@ CATEGORIES = { "maps": ["Maps"], "sprites": ["Overworld_sprites", "Battle_sprites", "Face_sprites", "Sprites", "Item_files", "Location_files"], + "screens": ["Screenshots", "Cut_content_files"], } PAGES = ["Ruins", "Ruins/Puzzles", "Toriel", "Toriel/In_battle", "Toriel's_Home", "Flowey", "Napstablook", "Cell_Phone/Toriel", "SAVE_Point", "Froggit", "Whimsun", "Moldsmal", "Loox", "Vegetoid", "Migosp", @@ -33,7 +34,25 @@ "HP", "AT", "DF", "Stats", "FIGHT", "ACT", "MERCY", "ITEM", "Flowey/In_battle", "Napstablook/In_battle", "Encounter", "Home", "Annoying_Dog", "Rock", "Mouse", "Golden_flower", "Chara", "Frisk", "Name", "Item", "Consumables", "Weapons", "Armor", "Cell_Phone", "Intro", "Game_Over", "Damage", "Monster_Candy", - "Toriel's_Home", "Blue_SOUL", "Bullet_board", "Spare", "Flee", "Gold", "Save"] + "Toriel's_Home", "Blue_SOUL", "Bullet_board", "Spare", "Flee", "Gold", "Save", + # Snowdin + "Snowdin", "Snowdin/Puzzles", "Snowdin_Town", "Sans", "Papyrus", "Papyrus/In_battle", "Sans/In_battle", + "Snowdrake", "Ice_Cap", "Gyftrot", "Doggo", "Lesser_Dog", "Greater_Dog", "Dogamy_and_Dogaressa", "Jerry", + "Chilldrake", "Glyde", "Snowman", "Monster_Kid", "Multicolor_Tile_Puzzle", "Nice_Cream_guy", "Nice_Cream", + "Dimensional_Box", "Ball_Game", "Grillby's", "Grillby", "Papyrus_and_Sans's_House", "Papyrus's_room", + "Sans's_room", "Shop", "Snowdin_Shop", "Snowed_Inn", "Innkeeper", "Librarby", "Gift_Bear", "Ice_Wolf", + "Cell_Phone/Papyrus", "Papyrus_date", "Mysterious_door", "Snowdin_Forest", "Royal_Guard", "Blue_attack", + "Faun", "Big_Mouth", "Crazy_Bun", "Drunk_Bun", "Politics_Bear", "Punk_Hamster", "Rabbit_Kid", + "Rabbit_Lady_and_Cinnamon", "Red_Bird", "Red_Demon", "Scarf_Lady", "Slime_family", "Ugly_Fish", + "Library_Lizard", "Library_Loox", "Knock_lover", "Lady_Garf", "Wrap_Mouse", "Innkeeper's_child", + "Snoring_guests", "Mad_Mew_Mew", "Snowdrake's_mother", "Snowdrake's_father", "Bonetrousle", + "Tough_Glove", "Manly_Bandanna", "Old_Tutu", "Ballet_Shoes", "Cinnamon_Bunny", "Bisicle", "Unisicle", + "Nice_Cream_(item)", "Snowman_Piece", "Snowman_Piece", "Punch_Card", "Dog_Residue", "Abandoned_Quiche", + "Astronaut_Food", "Hot_Dog...?", "Hot_Cat", "Spaghetti", "Glamburger", "Sea_Tea", "Temmie_Flakes", + "Junk_Food", "Annoying_Dog/In_battle", "Lesser_Dog/In_battle", "Greater_Dog/In_battle", "Doggo/In_battle", + "Dogamy_and_Dogaressa/In_battle"] +# files the categories leave out, as their wiki names +FILES = ["QC sprite.png", "QC screenshot shop.png"] DEMO = { "MacUnderTale.zip": "https://thisisatestofthevideogamedeliverysystem.sfo2.digitaloceanspaces.com/game/MacUnderTale.zip", } @@ -97,6 +116,13 @@ def main(): if url: print(kind, name) save(path, get(url)) + for name in FILES: + path = os.path.join(ref, "wiki", "sprites", name.replace(" ", "_")) + if not os.path.exists(path): + url = file_url("File:" + name) + if url: + print("file", name) + save(path, get(url)) for page in PAGES: path = os.path.join(ref, "wiki", "pages", page.replace("/", "__") + ".txt") if os.path.exists(path): diff --git a/games/undertale/tools/pack.py b/games/undertale/tools/pack.py index 3da1cbd7..5a96062d 100644 --- a/games/undertale/tools/pack.py +++ b/games/undertale/tools/pack.py @@ -10,7 +10,7 @@ lowest first, the run padded to a byte), until the row's width - TILES: the areas' 20 x 20 tiles: bpp (0: one colour), colours, the colours (RGB565), 400 pixels of bpp bits - ROOMS: 32 bytes each (res.c room_info): the room's rectangle on its area's map, its tile grid and - collision map (4-pixel cells, 1 walkable), its area, flags and name + collision map (4-pixel cells, 1 walkable), its area, flags (1: ice, its bits after the collision's) and name - GRID, COLL: the rooms' tile ids (u16, 0xFFFF none) and collision bits - FONTS: height, first character, count, flags, then 8 bytes a glyph (advance, w, h, ox, oy, 0, bitmap offset u16) and the bitmaps (rows of whole bytes, highest bit first) @@ -183,6 +183,35 @@ def load_frames(ref, src): return frames if kind == "png": return [Image.open(os.path.join(HERE, name)).convert("RGBA")] + if kind == "move": + # 'move:File.gif:x0,y0,x1,y1:i,j,...': the biggest thing that moves in a part of a screenshot GIF (against + # its median frame), in frames i, j...; halved + name, box, which = name.split(":") + x0, y0, x1, y1 = map(int, box.split(",")) + im = Image.open(os.path.join(ref, "wiki", "screens", name)) + st = np.stack([np.asarray(f.convert("RGB"))[y0:y1, x0:x1] for f in ImageSequence.Iterator(im)]).astype(int) + bg = np.median(st, axis=0) + out = [] + for i in map(int, which.split(",")): + m = np.abs(st[i] - bg).sum(2) > 30 + lab, n = ndimage.label(ndimage.binary_dilation(m, iterations=4)) + k = int(np.argmax(ndimage.sum(m, lab, range(1, n + 1)))) + 1 + sl = ndimage.find_objects(lab)[k - 1] + a = (m & (lab == k))[sl] + rgba = np.dstack([st[i][sl].astype(np.uint8), (a * 255).astype(np.uint8)]) + # each frame on a canvas of the window's size, its feet at the bottom middle: frames line up + f = Image.fromarray(rgba, "RGBA") + canvas = Image.new("RGBA", (x1 - x0, y1 - y0), (0, 0, 0, 0)) + canvas.paste(f, ((x1 - x0 - f.width) // 2, y1 - y0 - f.height), f) + out.append(halve(canvas)) + return out + if kind == "map": + # 'map:Map.png:x,y,w,h': a piece of an area's map, as it is + name, box = name.split(":") + x, y, w, h = map(int, box.split(",")) + return [Image.open(os.path.join(ref, "wiki", "maps", name)).convert("RGBA").crop((x, y, x + w, y + h))] + if kind == "gen": # drawn by tools/sprites.py + return S.GEN[name]() if kind == "wiki2": # a wiki file of the 640 x 480 battle, at the game's size: halved im = Image.open(os.path.join(ref, "wiki", "sprites", name)) return [shrink(fr.convert("RGBA")) for fr in ImageSequence.Iterator(im)] @@ -241,13 +270,19 @@ class Area: def __init__(self, ref, spec): im = Image.open(os.path.join(ref, "wiki", "maps", spec["map"])) - if im.mode != "P": - im = im.convert("RGB").quantize(256, method=Image.Quantize.MAXCOVERAGE) - self.idx = np.array(im) - p = im.getpalette() - self.rgb = [tuple(p[3 * i:3 * i + 3]) for i in range(len(p) // 3)] - self.transparent = im.info.get("transparency", None) - if isinstance(self.transparent, bytes): + if im.mode == "P": + self.idx = np.array(im) + p = im.getpalette() + self.rgb = [tuple(p[3 * i:3 * i + 3]) for i in range(len(p) // 3)] + self.transparent = im.info.get("transparency", None) + if not isinstance(self.transparent, int): # (bytes: none of the palette's) + self.transparent = None + else: + # every colour exactly (some maps have more than 256) + a = np.asarray(im.convert("RGB")).astype(np.int32) + cols, inv = np.unique((a[..., 0] << 16) | (a[..., 1] << 8) | a[..., 2], return_inverse=True) + self.idx = inv.reshape(a.shape[:2]).astype(np.int32) + self.rgb = [(int(c) >> 16, int(c) >> 8 & 255, int(c) & 255) for c in cols] self.transparent = None self.spec = spec for patch in spec.get("patches", []): @@ -272,11 +307,25 @@ def patch(self, p): self.idx[dy:dy + h, dx:dx + w] = self.idx[sy:sy + h, sx:sx + w].copy() elif p[0] == "erase": # the nearest pixel of the colours, looking a little around the rectangle (only it changes) - _, x, y, w, h, cols = p + _, x, y, w, h, cols, *drop = p + if cols == "ring": # a little more than the box: the outline's last pixels + x, y, w, h = x - 2, y - 2, w + 4, h + 4 m = 4 x0, y0 = max(0, x - m), max(0, y - m) win = self.idx[y0:y + h + m, x0:x + w + m] - keep = np.isin(win, [i for i, k in enumerate(self.rgb) if k in [tuple(c) for c in cols]]) + if cols == "ring": + # the colours just around the rectangle (but those of drop): what's behind the monster + ring = np.ones(win.shape, bool) + ring[y - y0:y - y0 + h, x - x0:x - x0 + w] = False + # (black: the outlines of what's erased, unless the patch says otherwise) + dropped = drop[0] if drop else [(0, 0, 0)] + # (only colours common around it: a few pixels of a colour are the monster's own, sticking out) + u, n = np.unique(win[ring], return_counts=True) + ids = {int(i) for i, c in zip(u, n) if c >= 0.05 * ring.sum()} - \ + {i for i, k in enumerate(self.rgb) if k in dropped} + keep = np.isin(win, list(ids)) + else: + keep = np.isin(win, [i for i, k in enumerate(self.rgb) if k in [tuple(c) for c in cols]]) if not keep.any(): raise ValueError("erase %s: none of its colours there" % (p,)) _, (iy, ix) = ndimage.distance_transform_edt(~keep, return_indices=True) @@ -302,7 +351,7 @@ def room_pixels(area, r): out = np.zeros((h, w), np.int32) xs0, ys0, xs1, ys1 = max(x, 0), max(y, 0), min(x + w, W), min(y + h, H) sub = area.idx[ys0:ys1, xs0:xs1] - lut = np.array([rgb565(*c) for c in area.rgb] + [0] * (256 - len(area.rgb)), np.int32) + lut = np.array([rgb565(*c) for c in area.rgb] + [0] * max(0, 256 - len(area.rgb)), np.int32) if area.transparent is not None: lut[area.transparent] = 0 out[ys0 - y:ys1 - y, xs0 - x:xs1 - x] = lut[sub] @@ -316,6 +365,9 @@ def floor_mask(area, r, x0, y0, x1, y1): return np.isin(area.idx[y0:y1, x0:x1], walk_idx) +KEEP = -32768 # a door's landing: Frisk's own x or y, kept + + def apply_links(area, rooms): """the links between rooms one above the other through a dark doorway, ("v", lower, upper, x, w, y): a door each way between the lower room's floor under the doorway (x .. x + w, y in it) and the upper's above it, the @@ -324,6 +376,17 @@ def apply_links(area, rooms): lo = rooms.get(link[1]) if lo is None or lo["area"] != area.spec["name"]: continue + if link[0] == "h": + # side by side: the left room's right edge and the right one's left edge, Frisk's height kept + ri = rooms[link[2]] + y, h = link[3:5] + lx, _, lw, _ = lo["rect"] + rx = ri["rect"][0] + lo.setdefault("fix", []).append(("walk", lx + lw - 8, y, 8, h)) + ri.setdefault("fix", []).append(("walk", rx, y, 8, h)) + lo.setdefault("doors", []).append(((lx + lw - 2, y, 2, h), link[2], (rx + 2, KEEP), "right")) + ri.setdefault("doors", []).append(((rx, y, 2, h), link[1], (lx + lw - 22, KEEP), "left")) + continue x, w, yd = link[3:6] if link[0] == "v" else link[2:5] cx = x + w // 2 lx, ly, lw, lh = lo["rect"] @@ -368,6 +431,8 @@ def collision(area, r): xs0, ys0, xs1, ys1 = max(X0, 0), max(Y0, 0), min(X1, W), min(Y1, H) big[ys0 - Y0:ys1 - Y0, xs0 - X0:xs1 - X0] = np.isin(area.idx[ys0:ys1, xs0:xs1], list(walk_idx)) sub = big[margin:margin + ch * 4, margin:margin + cw * 4] + if r.get("open"): # floors of many colours (a carpet, planks): its floor_rects alone say + sub = np.ones_like(sub) cells = sub.reshape(ch, 4, cw, 4).mean(axis=(1, 3)) >= 0.5 # piles of leaves are floor, outline and all soft = area.spec.get("piles") @@ -384,6 +449,12 @@ def collision(area, r): # other colour within `margin` pixels of it (a pile's leaves don't count) if margin: other = ~big & ~pile_big + # lines drawn on the floor (a path's outline) aren't walls + lines = area.spec.get("lines", []) + r.get("lines", []) + if lines: + win = np.zeros(big.shape, area.idx.dtype) + win[ys0 - Y0:ys1 - Y0, xs0 - X0:xs1 - X0] = area.idx[ys0:ys1, xs0:xs1] + other &= ~np.isin(win, [i for i, k in enumerate(area.rgb) if k in [tuple(c) for c in lines]]) near = np.zeros_like(sub) for dy in range(2 * margin + 1): for dx in range(2 * margin + 1): @@ -396,8 +467,12 @@ def collision(area, r): for fx, fy, fw, fh in r["floor_rects"]: keep[max(0, (fy - y) // 4):max(0, (fy + fh - y + 3) // 4), max(0, (fx - x) // 4):max(0, (fx + fw - x + 3) // 4)] = True cells &= keep - for kind, fx, fy, fw, fh in r.get("fix", []): - cells[max(0, (fy - y) // 4):max(0, (fy + fh - y + 3) // 4), max(0, (fx - x) // 4):max(0, (fx + fw - x + 3) // 4)] = kind == "walk" + raw = sub.reshape(ch, 4, cw, 4).mean(axis=(1, 3)) >= 0.5 + for kind, fx, fy, fw, fh, *how in r.get("fix", []): + sl = (slice(max(0, (fy - y) // 4), max(0, (fy + fh - y + 3) // 4)), + slice(max(0, (fx - x) // 4), max(0, (fx + fw - x + 3) // 4))) + # "floor": walkable only where the floor's colours are (the edge of a room, past the margin rule) + cells[sl] = raw[sl] if how == ["floor"] else kind == "walk" out = bytearray() for row in cells: rb = bytearray((cw + 7) // 8) @@ -448,8 +523,25 @@ def pack_room(area, r, tiles, strings): block = big[ty * 20:ty * 20 + 20, tx * 20:tx * 20 + 20] grid += struct.pack("= 0.5 + for fx, fy, fw, fh in r.get("no_ice", []): + cells[max(0, (fy - y) // 4):(fy + fh - y + 3) // 4, max(0, (fx - x) // 4):(fx + fw - x + 3) // 4] = False + for row in cells: + rb = bytearray((cw + 7) // 8) + for i, v in enumerate(row): + if v: + rb[i >> 3] |= 1 << (i & 7) + coll += rb + flags |= 1 return dict(rect=(x, y, w, h), g=(gx, gy, cols, rows), grid=bytes(grid), coll=bytes(coll), cw=cw, ch=ch, - area=r["area_id"], flags=r.get("flags", 0), name=strings.add(r.get("title", ""))) + area=r["area_id"], flags=flags, name=strings.add(r.get("title", ""))) # ------------------------------------------------------------------ main @@ -482,10 +574,41 @@ def main(): if not out or im.tobytes() != out[-1].tobytes(): out.append(im) imgs = out + if "box" in opts: + bx, by, bw, bh = opts["box"] + imgs = [im.crop((bx, by, bx + bw, by + bh)) for im in imgs] if "every" in opts: imgs = imgs[::opts["every"]] if "frames" in opts: imgs = [imgs[i] for i in opts["frames"]] + if opts.get("clear_bg"): # the black around a monster (the wiki's GIFs have no see-through) is clear + out = [] + for im in imgs: + a = np.array(im) + dark = (a[:, :, 0] < 8) & (a[:, :, 1] < 8) & (a[:, :, 2] < 8) | (a[:, :, 3] < 128) + lab, _ = ndimage.label(dark) + edge = set(np.unique(np.concatenate([lab[0], lab[-1], lab[:, 0], lab[:, -1]]))) - {0} + a[np.isin(lab, list(edge))] = 0 + out.append(Image.fromarray(a, "RGBA")) + imgs = out + if "clear" in opts: # these colours are see-through (a map's floor behind a thing cut from it) + out = [] + for im in imgs: + a = np.array(im) + for c in opts["clear"]: + a[(a[:, :, 0] == c[0]) & (a[:, :, 1] == c[1]) & (a[:, :, 2] == c[2])] = 0 + out.append(Image.fromarray(a, "RGBA")) + imgs = out + if opts.get("mirror"): + imgs = [im.transpose(Image.FLIP_LEFT_RIGHT) for im in imgs] + if "tints" in opts: # the first frame, then it again in each colour (the SOUL's modes) + a = np.array(imgs[0].convert("RGBA")) + lum = a[:, :, :3].max(axis=2).astype(np.float32) / 255 + imgs = [imgs[0]] + for t in opts["tints"]: + b = a.copy() + b[:, :, :3] = (lum[:, :, None] * np.array(t, np.float32)).astype(np.uint8) + imgs.append(Image.fromarray(b, "RGBA")) if "scale" in opts: imgs = [im.resize((im.width * opts["scale"], im.height * opts["scale"]), Image.NEAREST) for im in imgs] w0, h0 = imgs[0].size diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index 4ebfb97b..31a80b56 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -58,6 +58,51 @@ ]), ] +SNOW = [(133, 163, 216), (114, 129, 177)] +ICE = [(139, 163, 186), (180, 192, 201), (195, 207, 216)] +WOOD = [(169, 124, 41), (91, 65, 0), (62, 35, 0)] +# the paths' outlines +SNOW_LINES = [(44, 46, 63)] +INN_FLOOR = [(249, 210, 97)] +PS_FLOOR = [(109, 85, 127), (74, 109, 127)] +# the XOXO puzzles' tiles (drawn by the game, X or O), the spikes it raises and lowers +XOXO1 = [(7460, 1240), (7540, 1240)] +XOXO2 = [(8180, 1200), (8240, 1200), (8280, 1200), (8240, 1220), (8280, 1220), (8200, 1240), (8240, 1240), + (8260, 1240), (8280, 1240), (8180, 1260), (8240, 1260), (8180, 1280), (8200, 1280), (8220, 1280), (8240, 1280)] +XOXO3 = [(9540, 1160), (9700, 1160), (9540, 1180), (9580, 1180), (9660, 1180), (9620, 1220), (9580, 1240), + (9620, 1240), (9580, 1260), (9660, 1260), (9540, 1300), (9700, 1300)] +SNOW_SPIKES = [(7120, 940), (7120, 960), (7120, 980), (7680, 1220), (7680, 1240), (7680, 1260)] + \ + [(8360, 1160 + 20 * i) for i in range(8)] +BLUE = [(0, 0, 255)] +SPIKE_COLOURS = [(128, 128, 128), (192, 192, 192), (255, 255, 255), (0, 0, 0)] +AREAS.append(dict(name="snowdin", map="Snowdin_map.png", floor=SNOW + ICE + WOOD, margin=2, lines=SNOW_LINES, ice=ICE, + patches=[ + # Sans, Papyrus and the monsters who come out after Papyrus' fight or at the very end; the SAVE stars + ("erase", 2881, 400, 26, 40, "ring"), ("erase", 3236, 374, 28, 34, "ring"), ("erase", 4668, 380, 37, 37, "ring"), + ("erase", 5440, 290, 42, 56, "ring"), ("erase", 6108, 280, 54, 58, "ring"), ("erase", 6508, 610, 54, 56, "ring"), + ("erase", 6743, 695, 24, 27, "ring"), ("erase", 7332, 944, 94, 52, "ring"), ("erase", 7858, 1170, 44, 60, "ring"), + ("erase", 8008, 1160, 44, 49, "ring"), ("erase", 8374, 1186, 32, 42, "ring"), ("erase", 8816, 1254, 34, 46, "ring"), + ("erase", 9258, 1300, 24, 27, "ring"), ("erase", 9692, 1488, 36, 44, "ring"), ("erase", 10630, 1270, 38, 50, "ring"), + ("erase", 11772, 1176, 38, 48, "ring"), ("erase", 10182, 2274, 38, 46, "ring"), + ("erase", 10328, 2255, 69, 58, "ring"), ("erase", 10532, 2274, 38, 46, "ring"), + ("erase", 7026, 576, 58, 50, "ring"), ("erase", 5948, 258, 54, 52, "ring"), + # Snowdrake and his parents by Papyrus' sentry station: the trees and the path there from beside (the trees + # repeat every 40 pixels) + ("copy", 3620, 316, 80, 72, 3700, 316), ("copy", 3620, 316, 80, 72, 3780, 316), ("copy", 3620, 316, 30, 72, 3860, 316), +])) +# (the puzzles' tiles and spikes first: what's beside them is erased after) +AREAS[-1]["patches"][:0] = [("erase", x, y, 20, 20, "ring", BLUE) for x, y in XOXO1 + XOXO2 + XOXO3] + \ + [("erase", x, y, 20, 20, "ring", SPIKE_COLOURS) for x, y in SNOW_SPIKES] +AREAS.append(dict(name="snowtown", map="Snowdin_Town_map.png", floor=SNOW, margin=2, lines=SNOW_LINES, patches=[ + # the SAVE star; Papyrus and Undyne by the house, the dogs at the library, Papyrus in the fog and at home + # (they come later) + ("erase", 518, 1076, 22, 22, "ring"), + ("erase", 1860, 1008, 34, 82, "ring"), ("erase", 1898, 1010, 56, 78, "ring"), ("erase", 1952, 1004, 44, 86, "ring"), + ("erase", 1998, 1012, 40, 78, "ring"), ("erase", 2038, 1018, 40, 72, "ring"), + ("erase", 2132, 1026, 32, 84, "ring"), ("erase", 2163, 1040, 32, 72, "ring"), + ("erase", 3376, 1036, 30, 66, "ring"), ("erase", 2212, 854, 32, 50, "ring"), ("erase", 2262, 580, 36, 52, "ring"), +])) + ROOMS = [ # the landing: the bed of golden flowers, a hallway, the Delta Rune arch dict(name="area1", area="ruins", rect=(0, 5900, 680, 260), title="Ruins", margin=0, @@ -176,10 +221,104 @@ fix=[("walk", 10000, 1950, 40, 10)], doors=[((10000, 1956, 40, 4), "basement2", (10010, 2034), "down")]), dict(name="ruinsexit", area="ruins", floor_colors=[(0, 0, 0), (97, 44, 97)], margin=0, rect=(9940, 0, 200, 300), floor_rects=[(9980, 70, 80, 230)], title="Ruins - Exit"), + + # ---- Snowdin: the forest, from the Ruins' door to the town + # the forest's walkway: the path is walked all along (trunks and a branch drawn over it are in front) + dict(name="snowdin1", area="snowdin", rect=(0, 240, 1070, 240), title="Snowdin Forest", + fix=[("walk", 40, 404, 1030, 52)]), + dict(name="snowdin2", area="snowdin", rect=(1100, 240, 670, 240), title="Snowdin Forest", fix=[("walk", 1100, 404, 670, 52)]), + dict(name="snowdin3", area="snowdin", rect=(1800, 240, 410, 240), title="Snowdin Forest", fix=[("walk", 1800, 404, 410, 52)]), + dict(name="snowdin4", area="snowdin", rect=(2240, 240, 300, 240), title="Snowdin Forest", fix=[("walk", 2240, 404, 300, 52)]), + # Papyrus' gate on the bridge: its bars are too wide to stop anyone + dict(name="snowdin5", area="snowdin", rect=(2570, 240, 590, 240), title="Snowdin Forest", + fix=[("walk", 2570, 412, 100, 44)]), + dict(name="boxroad", area="snowdin", rect=(3160, 240, 380, 240), title="Snowdin - Box Road"), + dict(name="river", area="snowdin", rect=(3220, 0, 320, 240), title="Snowdin Forest"), + dict(name="papsentry", area="snowdin", rect=(3540, 240, 580, 240), title="Snowdin Forest"), + dict(name="doggo", area="snowdin", rect=(4120, 240, 460, 240), title="Snowdin Forest"), + dict(name="icefield", area="snowdin", rect=(4580, 240, 620, 240), ice=True, title="Snowdin Forest"), + dict(name="snowman", area="snowdin", rect=(4720, 0, 380, 240), title="Snowdin Forest"), + dict(name="elecmaze", area="snowdin", rect=(5200, 240, 300, 240), title="Snowdin Forest"), + dict(name="ballgame", area="snowdin", rect=(5500, 240, 800, 580), ice=True, title="Snowdin Forest", + fix=[("walk", 5716, 318, 68, 22)]), # the plank bridge over the chasm + dict(name="dogi", area="snowdin", rect=(6300, 240, 300, 220), title="Snowdin Forest"), + dict(name="wordsearch", area="snowdin", rect=(6300, 520, 320, 300), title="Snowdin Forest"), + dict(name="spaghetti", area="snowdin", rect=(6620, 520, 300, 300), title="Snowdin - Spaghetti"), + dict(name="snowpuzzle", area="snowdin", rect=(6920, 540, 620, 580), title="Snowdin Forest", + fix=[("walk", 7254, 958, 50, 22)]), # the plank bridge + dict(name="xoxo1", area="snowdin", rect=(7260, 1120, 440, 240), title="Snowdin Forest"), + dict(name="xoxo2", area="snowdin", rect=(7700, 1120, 800, 240), title="Snowdin Forest"), + dict(name="tilepuzzle", area="snowdin", rect=(8500, 1120, 400, 240), title="Snowdin Forest", + floor_colors=[(255, 192, 192)], fix=[("walk", 8614, 1238, 52, 22)]), # the plank bridge + dict(name="doghouse", area="snowdin", rect=(8900, 1120, 540, 240), title="Snowdin - Dog House"), + # the ice puzzle: once solved, a bridge to the trees Frisk slides through (an object blocks it until then) + dict(name="xoxo3", area="snowdin", rect=(9440, 1120, 400, 220), ice=True, title="Snowdin Forest", + fix=[("walk", 9780, 1204, 60, 36), ("walk", 9520, 1320, 264, 20)], doors=[((9836, 1205, 4, 40), "poffzone", (10196, 1200), "right")]), + dict(name="xoxofail", area="snowdin", rect=(9440, 1340, 340, 260), title="Snowdin Forest"), + dict(name="poffzone", area="snowdin", rect=(10140, 1120, 820, 240), title="Snowdin Forest", + fix=[("walk", 10190, 1212, 40, 24), ("walk", 10840, 1260, 120, 14)], + doors=[((10190, 1195, 4, 30), "xoxo3", (9796, 1200), "left"), + ((10302, 1350, 36, 8), "southcliff", (10590, 2190), "down")]), + dict(name="dangerbridge", area="snowdin", rect=(10960, 1120, 1040, 240), title="Snowdin Forest", + fix=[("walk", 11110, 1226, 690, 26)], doors=[((11990, 1236, 10, 50), "snowtown", (4, 1088), "right")]), + # the mysterious door, up a long corridor from the cliff under the ice bridge + dict(name="doorroom", area="snowdin", rect=(9780, 1590, 320, 590), title="Snowdin Forest", + floor_colors=[(22, 67, 88), (27, 89, 109), (30, 106, 122), (6, 14, 22), (13, 37, 51), (19, 56, 75)]), + dict(name="southcliff", area="snowdin", rect=(9480, 2180, 1200, 240), title="Snowdin Forest", + fix=[("walk", 9922, 2180, 40, 60)], doors=[((10585, 2180, 30, 6), "poffzone", (10310, 1320), "up")]), + + # ---- Snowdin Town + dict(name="snowtown", area="snowtown", rect=(0, 960, 3260, 240), title="Snowdin Town", + fix=[("walk", 0, 1080, 8, 50, "floor")], + doors=[((0, 1080, 4, 50), "dangerbridge", (11968, 1232), "left"), + ((624, 1066, 28, 24), "inn1", (628, 918), "up"), ((1312, 1070, 26, 20), "grillbys", (1236, 914), "up"), + ((1840, 1066, 26, 24), "library", (2026, 664), "up"), + # the undersnow tunnels: an igloo each end of the town + ((726, 1066, 24, 24), "snowtown", (2336, 1094), "down"), ((2336, 1084, 26, 16), "snowtown", (728, 1078), "down")]), + dict(name="townnorth", area="snowtown", rect=(1400, 700, 640, 260), title="Snowdin Town"), + dict(name="towndock", area="snowtown", rect=(1400, 480, 410, 220), title="Snowdin Town"), + dict(name="fogroom", area="snowtown", rect=(3260, 960, 360, 240), title="Snowdin Town", + fix=[("walk", 3440, 1084, 180, 48)]), # the way on: Waterfall's blue ground + # the interiors: their floors are many colours, so their floor and furniture are rectangles + dict(name="inn1", area="snowtown", rect=(500, 740, 260, 220), title="Snowed Inn", open=True, margin=0, + floor_rects=[(520, 800, 222, 100), (600, 900, 80, 60), (536, 756, 44, 48)], + fix=[("wall", 705, 850, 37, 50)], + doors=[((604, 952, 72, 8), "snowtown", (626, 1078), "down"), ((536, 756, 44, 6), "inn2", (512, 676), "right")]), + dict(name="inn2", area="snowtown", rect=(500, 480, 320, 230), title="Snowed Inn", open=True, margin=0, + floor_rects=[(522, 600, 116, 76), (662, 600, 136, 76), (504, 684, 312, 22), (566, 670, 32, 16), (706, 670, 32, 16)], + doors=[((504, 684, 4, 22), "inn1", (548, 790), "down")]), + dict(name="grillbys", area="snowtown", rect=(1080, 710, 320, 250), title="Grillby's", open=True, margin=0, + floor_rects=[(1090, 800, 300, 150)], + fix=[("wall", 1092, 826, 64, 44), ("wall", 1140, 884, 104, 48), ("wall", 1300, 820, 90, 130), + ("wall", 1098, 924, 44, 26)], + doors=[((1220, 944, 50, 6), "snowtown", (1314, 1080), "down")]), + dict(name="library", area="snowtown", rect=(1810, 480, 300, 225), title="Librarby", open=True, margin=0, + floor_rects=[(1822, 566, 276, 132)], fix=[("wall", 1822, 620, 88, 80), ("wall", 1976, 616, 88, 66)], + doors=[((2000, 694, 70, 6), "snowtown", (1842, 1078), "down")]), + dict(name="pshouse", area="snowtown", rect=(2210, 710, 300, 245), title="Snowdin Town", open=True, margin=0, + floor_rects=[(2220, 848, 280, 100), (2220, 768, 280, 34), (2222, 800, 56, 52)], + fix=[("wall", 2300, 892, 82, 40), ("wall", 2318, 836, 52, 30), ("wall", 2462, 868, 40, 64)], + doors=[((2420, 944, 50, 8), "snowtown", (2240, 1096), "down"), ((2228, 766, 34, 4), "paproom", (2296, 660), "up"), ((2440, 766, 30, 4), "sansroom", (2560, 660), "up")]), + dict(name="paproom", area="snowtown", rect=(2150, 500, 260, 200), title="Snowdin Town", open=True, margin=0, + floor_rects=[(2160, 574, 240, 120)], + fix=[("wall", 2160, 636, 92, 56), ("wall", 2338, 556, 64, 44), ("wall", 2160, 556, 40, 64), + ("wall", 2358, 648, 44, 44)], + doors=[((2286, 690, 40, 8), "pshouse", (2234, 774), "down")]), + dict(name="sansroom", area="snowtown", rect=(2470, 510, 180, 190), title="Snowdin Town", open=True, margin=0, + floor_rects=[(2480, 566, 160, 126)], fix=[("wall", 2480, 560, 52, 32), ("wall", 2598, 556, 42, 56)], + doors=[((2550, 690, 40, 8), "pshouse", (2444, 774), "down")]), + dict(name="shed", area="snowtown", rect=(2550, 710, 290, 245), title="Snowdin Town", open=True, margin=0, + floor_rects=[(2580, 770, 180, 120), (2560, 886, 80, 64)], fix=[("wall", 2580, 730, 56, 100)], + doors=[((2560, 945, 80, 8), "snowtown", (2400, 1096), "down")]), ] -# rooms one above the other through a dark doorway (tools/pack.py: apply_links) +# rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side +# by side with a gap, a door each way along the rows y .. y + h LINKS = [ + ("h", "snowdin1", "snowdin2", 404, 52), + ("h", "snowdin2", "snowdin3", 404, 52), + ("h", "snowdin3", "snowdin4", 404, 52), + ("h", "snowdin4", "snowdin5", 404, 52), ("v", "ruins1", "ruins2", 506, 28, 5175), ("v", "ruins4", "ruins5", 1244, 32, 4640), ("v", "ruins7", "ruins7a", 4946, 28, 4400), diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index 56f5de8c..79597cdc 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -6,7 +6,112 @@ wiki:File.png a file of the Undertale Wiki, every frame of a GIF; the wiki shows sprites at twice the size, halved here (wiki1: as it is) Options: origin (x, y) in the source's pixels, center (its middle), feet (the middle of its bottom), -frames (which of them), keep (no crop to the opaque pixels).""" +frames (which of them), keep (no crop to the opaque pixels), every (one frame in n), clear (colours made +see-through), mirror (flipped left to right), box (x, y, w, h: a part of the source, after halving). +More sources: move:File.gif:x0,y0,x1,y1:frames (what moves in a wiki screenshot GIF), map:Map.png:x,y,w,h (a piece +of an area's map), gen:name (drawn here, GEN).""" +from PIL import Image, ImageDraw + + +def _img(w, h): + return Image.new("RGBA", (w, h), (0, 0, 0, 0)) + + +def gen_otile(): + # the XOXO puzzles' O (red), and once the puzzle's solved, the same in green + out = [] + for c in ((255, 0, 0, 255), (0, 192, 0, 255)): + im = _img(20, 20) + d = ImageDraw.Draw(im) + d.ellipse([3, 3, 16, 16], outline=c, width=2) + out.append(im) + return out + + +def gen_snowball(): + # the Ball Game's snowball, from big to small (it melts as it rolls) + out = [] + for r in (10, 9, 8, 7, 6, 5, 4, 3): + im = _img(22, 22) + d = ImageDraw.Draw(im) + d.ellipse([11 - r, 11 - r, 11 + r, 11 + r], fill=(255, 255, 255, 255), outline=(0, 0, 0, 255)) + d.arc([11 - r + 2, 11 - r + 2, 11 + r - 2, 11 + r - 2], 200, 300, fill=(180, 192, 220, 255)) + out.append(im) + return out + + +def gen_bone(): + # a bone 6 pixels wide, its ends' knobs (drawn stretched to any length: gfx_bone) + im = _img(6, 6) + d = ImageDraw.Draw(im) + d.rectangle([0, 0, 5, 5], fill=(255, 255, 255, 255)) + return [im] + + +def gen_orb(): + im = _img(10, 10) + d = ImageDraw.Draw(im) + d.ellipse([0, 0, 9, 9], fill=(200, 220, 255, 255), outline=(255, 255, 255, 255)) + return [im] + + +def gen_snowflake(): + im = _img(9, 9) + d = ImageDraw.Draw(im) + for a, b in (((4, 0), (4, 8)), ((0, 4), (8, 4)), ((1, 1), (7, 7)), ((1, 7), (7, 1))): + d.line([a, b], fill=(255, 255, 255, 255)) + return [im] + + +def gen_iceshard(): + im = _img(7, 11) + d = ImageDraw.Draw(im) + d.polygon([(3, 0), (6, 4), (3, 10), (0, 4)], fill=(255, 255, 255, 255)) + return [im] + + +def gen_present(): + im = _img(10, 10) + d = ImageDraw.Draw(im) + d.rectangle([0, 2, 9, 9], fill=(255, 255, 255, 255)) + d.rectangle([4, 2, 5, 9], fill=(0, 0, 0, 255)) + d.rectangle([0, 5, 9, 5], fill=(0, 0, 0, 255)) + d.line([(2, 0), (4, 2)], fill=(255, 255, 255, 255)) + d.line([(7, 0), (5, 2)], fill=(255, 255, 255, 255)) + return [im] + + +def gen_knife(): + # Doggo's dog-knife: a blade, up + im = _img(5, 30) + d = ImageDraw.Draw(im) + d.polygon([(2, 0), (4, 6), (4, 24), (0, 24), (0, 6)], fill=(255, 255, 255, 255)) + d.rectangle([0, 24, 4, 29], fill=(255, 255, 255, 255)) + return [im] + + +def gen_dogpaw(): + im = _img(9, 9) + d = ImageDraw.Draw(im) + d.ellipse([2, 4, 7, 8], fill=(255, 255, 255, 255)) + for x in (1, 4, 7): + d.ellipse([x - 1, 0, x + 1, 2], fill=(255, 255, 255, 255)) + return [im] + + +def gen_heartbullet(): + im = _img(9, 8) + d = ImageDraw.Draw(im) + d.polygon([(0, 2), (2, 0), (4, 2), (6, 0), (8, 2), (4, 7)], fill=(255, 255, 255, 255)) + return [im] + + +GEN = {"otile": gen_otile, "snowball": gen_snowball, "bone": gen_bone, "orb": gen_orb, "snowflake": gen_snowflake, + "iceshard": gen_iceshard, "present": gen_present, "knife": gen_knife, "dogpaw": gen_dogpaw, + "heartbullet": gen_heartbullet} + +SNOW_CLEAR = [(133, 163, 216), (114, 129, 177), (139, 163, 186), (180, 192, 201), (195, 207, 216)] +PAP_GIF = "move:Papyrus_screenshot_back_and_forth.gif:0,280,640,450:" SPRITES = [ # Frisk walking: down and up 4 frames, left and right 2 (the game's own frames, from the demo) @@ -21,7 +126,7 @@ ("savepoint", "demo:spr_savepoint", {"origin": (0, 0), "keep": True}), ("flowey", "demo:spr_flowey", {"origin": (0, 0), "keep": True}), # the SOUL, 8 x 8 as the game's 16 x 16 halved; frame 1: blue - ("heart", "demo2:spr_heart", {"center": True, "keep": True}), + ("heart", "demo2:spr_heart", {"center": True, "keep": True, "tints": [(0, 60, 255)]}), # red, blue ] + [ # the battle: its buttons (orange, then yellow when chosen), the FIGHT target and its bar, the slash, the HP label (n, "demo2:spr_" + n, {"keep": True}) for n in [ @@ -74,6 +179,67 @@ ] + [ ("frog_ow", "wiki:Froggit_overworld.png", {"keep": True}), ("napsta_ow", "wiki:Napstablook_overworld.png", {"keep": True}), +] + [ + # ---- Snowdin + # Papyrus walking (from a screenshot of him pacing at home: right; left is the same, mirrored), and facing you + ("papyrus_r", PAP_GIF + "19,21,23,25", {"feet": True}), + ("papyrus_l", PAP_GIF + "19,21,23,25", {"feet": True, "mirror": True}), + ("papyrus_d", "wiki:Papyrus_overworld.png", {"feet": True}), + ("sans_d", "wiki:Sans_overworld.png", {"feet": True}), + ("doggo_ow", "wiki:Doggo_overworld.png", {"feet": True}), + ("dogamy_ow", "wiki:Dogamy_overworld.png", {"feet": True}), + ("dogaressa_ow", "wiki:Dogaressa_overworld.png", {"feet": True}), + ("greaterdog_ow", "wiki:Greater_Dog_overworld.png", {"feet": True}), + ("poff", "wiki:Greater_Dog_overworld_snow_poff.png", {"feet": True}), + ("dog_ow", "wiki:Annoying_Dog_sprite.gif", {"feet": True}), + ("dog_bone", "wiki:Annoying_Dog_sprite_bone.gif", {"feet": True, "dedupe": True}), + # the puzzles' things: an X tile, its O, Snowdin's spikes (all cut from the map: its snow made see-through), + # the switches, the snowball, the electric orb + ("xtile", "map:Snowdin_map.png:7460,1240,20,20", {"keep": True, "clear": SNOW_CLEAR}), + ("otile", "gen:otile", {"keep": True}), + ("snowspikes", "map:Snowdin_map.png:7680,1220,20,20", {"keep": True, "clear": SNOW_CLEAR}), + ("snowswitch", "map:Snowdin_map.png:7498,1196,24,14", {"keep": True, "clear": SNOW_CLEAR}), + ("snowball", "gen:snowball", {"center": True, "keep": True}), + ("lamp", "map:Snowdin_map.png:2960,365,19,31", {"keep": True, "clear": SNOW_CLEAR + [(44, 46, 63)]}), + ("papyrus_zap", "wiki:Papyrus_overworld_electrocuted.gif", {"feet": True, "dedupe": True}), +] + [ + # the Ball Game's flags, by the time the ball took + ("flag_" + c, "wiki:%s_flag_overworld.png" % n, {"feet": True}) for c, n in [ + ("lightblue", "Light_blue"), ("purple", "Purple"), ("green", "Green"), ("blue", "Blue"), ("yellow", "Yellow"), + ("orange", "Orange"), ("red", "Red")] +] + [ + ("orb", "gen:orb", {"center": True, "keep": True}), + # the shop's picture (QC behind her counter): the top of the wiki's screenshot + ("shop_qc", "wiki:QC_screenshot_shop.png", {"keep": True, "box": (0, 0, 320, 120)}), +] + [ + # Snowdin's bullets, their middle at their origin + (n, "gen:" + n, {"center": True}) for n in ["bone", "snowflake", "iceshard", "present", "knife", "dogpaw", + "heartbullet"] +] + [ + # Snowdin's monsters + ("snowdrake_b", "wiki:Snowdrake_battle.gif", {"feet": True, "clear_bg": True, "every": 6}), + ("snowdrake_hurt", "wiki:Snowdrake_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("icecap_b", "wiki:Ice_Cap_battle_idle.gif", {"feet": True, "clear_bg": True}), + ("icecap_hurt", "wiki:Ice_Cap_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("icecap_hatless", "wiki:Ice_Cap_battle_hatless.png", {"feet": True, "clear_bg": True}), + ("gyftrot_b", "wiki:Gyftrot_battle_idle.gif", {"feet": True, "clear_bg": True, "every": 14}), + ("gyftrot_hurt", "wiki:Gyftrot_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("doggo_b", "wiki:Doggo_battle_idle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 8}), + ("doggo_hurt", "wiki:Doggo_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("lesserdog_b", "wiki:Lesser_Dog_battle_idle.gif", {"feet": True, "clear_bg": True}), + ("lesserdog_hurt", "wiki:Lesser_Dog_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("greaterdog_b", "wiki:Greater_Dog_battle.gif", {"feet": True, "clear_bg": True}), + ("greaterdog_hurt", "wiki:Greater_Dog_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("dogamy_b", "wiki:Dogamy_battle.png", {"feet": True, "clear_bg": True}), + ("dogaressa_b", "wiki:Dogaressa_battle.png", {"feet": True, "clear_bg": True}), + ("jerry_b", "wiki:Jerry_battle.gif", {"feet": True, "clear_bg": True}), + ("jerry_hurt", "wiki:Jerry_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("chilldrake_b", "wiki:Chilldrake_battle_idle.gif", {"feet": True, "clear_bg": True, "every": 6}), + ("glyde_b", "wiki:Glyde_battle_idle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 15}), + ("glyde_hurt", "wiki:Glyde_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("papyrus_b", "wiki:Papyrus_battle.png", {"feet": True, "clear_bg": True}), + ("papyrus_hurt", "wiki:Papyrus_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("papyrus_confused", "wiki:Papyrus_battle_confused.gif", {"feet": True, "clear_bg": True, "dedupe": True}), ] + [ # the intro's pictures, the title, GAME OVER ("introimage", "demo:spr_introimage", {"keep": True, "clear_black": True}), diff --git a/tools/release.py b/tools/release.py index 689c7c2b..b8b05e0b 100644 --- a/tools/release.py +++ b/tools/release.py @@ -27,9 +27,9 @@ "on its own"), "hollowknight": ("Hollow Knight", "from King's Pass to Hornet in Greenpath. Too big to share the calculator with " "NumPlay: install it on its own"), - "undertale": ("Undertale", "the Ruins, from the bed of golden flowers to the door out: Flowey, Toriel, Napstablook " - "and every puzzle, the rest of the Underground to come. Too big to share the calculator with NumPlay: " - "install it on its own"), + "undertale": ("Undertale", "the Ruins and Snowdin, from the bed of golden flowers to the edge of Waterfall: Flowey, " + "Toriel, Sans, Papyrus and every puzzle, the rest of the Underground to come. Too big to share the " + "calculator with NumPlay: install it on its own"), "championisland": ("Champion Island", "the Doodle Champion Island Games. Too big to share the calculator with " "NumPlay: install it on its own"), "numpowder": ("NumPowder", "The Powder Toy on the calculator: sand, water, fire, acid, electricity and nearly 200 " From 9a491fea29c78b5e5d49e92efceeb93a6fb5a603 Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 02:13:24 +0000 Subject: [PATCH 06/19] Undertale: the longer speeches and signs in our own words Toriel's lessons and phone calls, Flowey at the Ruins door, the frogs' advice, Snowdin's library books and Papyrus's notes now say what they did in the game in shorter words of our own, rather than the game's script. The choices and the events they lead to are unchanged. --- games/undertale/src/events.c | 12 +++++----- games/undertale/src/monsters.c | 6 ++--- games/undertale/src/ruins1.c | 24 +++++++++---------- games/undertale/src/ruins2.c | 24 +++++++++---------- games/undertale/src/ruins3.c | 44 ++++++++++++++++------------------ games/undertale/src/snowdin1.c | 6 ++--- games/undertale/src/snowdin2.c | 2 +- games/undertale/src/snowtown.c | 18 +++++++------- games/undertale/src/toriel.c | 16 ++++++------- 9 files changed, 75 insertions(+), 77 deletions(-) diff --git a/games/undertale/src/events.c b/games/undertale/src/events.c index 753fe6c1..1cd5d96d 100644 --- a/games/undertale/src/events.c +++ b/games/undertale/src/events.c @@ -47,19 +47,19 @@ static int ev_phone(Ev *c) { case 0: set_flag(F_CALL_HELLO, flag(F_CALL_HELLO) + 1); if (flag(F_CALL_HELLO) == 1) - SAY(FACE_TORIEL, "`0* This is TORIEL.|* You only wanted to say\n hello...?\n* Well then.|`2* 'Hello!'|`0* I hope that suffices.\n* Hee hee."); + SAY(FACE_TORIEL, "`0* TORIEL here.|* Just saying hello?|`2* Well, hello to you too!"); else if (flag(F_CALL_HELLO) == 2) SAY(FACE_TORIEL, "`0* This is TORIEL.|* You want to say hello again?|`2* 'Salutations!'|`0* Is that enough?"); else if (flag(F_CALL_HELLO) == 3) - SAY(FACE_TORIEL, "`0* This is TORIEL.|`1* Are you bored?\n* I should have given a book\n to you.|* My apologies.|`0* Why not use your imagination\n to divert yourself?|* Pretend you are...\n* A monarch!|`2* Rule over the leaf pile with\n a fist of iron.|`0* Can you do that for me?"); + SAY(FACE_TORIEL, "`0* TORIEL here.|`1* Bored? I should have\n left you a book.|`0* Pretend to be royalty!|`2* Rule the leaf pile!"); else - SAY(FACE_TORIEL, "`0* This is TORIEL.|* Hello, my child.|`1* Sorry, I do not have much to\n say.|`0* It was nice to hear your\n voice, though."); + SAY(FACE_TORIEL, "`0* TORIEL here.|`1* I have little to say...|`0* But it is nice to hear\n from you."); break; case 1: - SAY(FACE_TORIEL, "`0* This is TORIEL.|* Help with a puzzle...?|`1* Um, you have not left the\n room, have you?|`0* Wait patiently for me and we\n can solve it together!"); + SAY(FACE_TORIEL, "`0* TORIEL here.|* A puzzle?|`1* Please wait for me; we\n can solve it together."); break; case 2: - SAY(FACE_TORIEL, "`0* This is TORIEL.|* You want to know more about\n me?|`1* Well, I am afraid there is\n not much to say.|`2* I am just a silly little lady\n who worries too much!"); + SAY(FACE_TORIEL, "`0* TORIEL here.|* About me?|`2* Oh, there is not much to\n tell. I worry a lot!"); break; case 3: set_flag(F_CALL_MOM, 1); @@ -68,7 +68,7 @@ static int ev_phone(Ev *c) { case 4: set_flag(F_CALL_FLIRT, flag(F_CALL_FLIRT) + 1); if (flag(F_CALL_FLIRT) == 1) - SAY(FACE_TORIEL, "`3* ... huh???|`8* Oh, heh.. heh...\n* Ha ha ha!|`2* How adorable...\n* I could pinch your cheek!|`0* You can certainly find better\n than an old woman like me."); + SAY(FACE_TORIEL, "`3* ...oh?|`8* Ha ha ha!|`2* How sweet of you.|`0* But you can do better than\n an old lady like me."); else if (flag(F_CALL_MOM)) SAY(FACE_TORIEL, "`3* Oh dear, are you serious...?|* And after you said you want\n to call me \"mother...\"|`1* You are an... ...\n \"interesting\" child."); else diff --git a/games/undertale/src/monsters.c b/games/undertale/src/monsters.c index ab7b083e..11155d90 100644 --- a/games/undertale/src/monsters.c +++ b/games/undertale/src/monsters.c @@ -11,7 +11,7 @@ /* ---------------------------------------------------------------- the ACTs */ static void act_dummy(Battle *b, Monster *m, int act, char *t, int cap) { (void)b; - snprintf(t, (size_t)cap, "* You talk to the DUMMY.\n* ...|* It doesn't seem much for\n conversation.|* TORIEL seems happy with you."); + snprintf(t, (size_t)cap, "* You chat with the DUMMY.\n* It doesn't answer.|* TORIEL looks pleased."); m->gone = true, m->fade = 1; set_flag(F_DUMMY, 1); } @@ -59,7 +59,7 @@ static const char *flavor_whimsun(Battle *b, Monster *m) { return m->state ? "* static int attack_whimsun(Battle *b, Monster *m) { return rnd_n(2) ? ATK_WHIM_RING : ATK_WHIM_COLS; } static void act_moldsmal(Battle *b, Monster *m, int act, char *t, int cap) { - if (act == 0) snprintf(t, (size_t)cap, "* You lie immobile with\n Moldsmal.\n* You feel like you understand\n the world a little better."); + if (act == 0) snprintf(t, (size_t)cap, "* You lie still beside\n Moldsmal.\n* It feels peaceful."); else snprintf(t, (size_t)cap, "* You wiggle your hips.\n* Moldsmal wiggles back.\n* What a meaningful conversation!"); m->spare_gold = 1; (void)b; @@ -175,7 +175,7 @@ static void act_napsta(Battle *b, Monster *m, int act, char *t, int cap) { } static const char *talk_napsta(Battle *b, Monster *m) { if (b->state[2] == 3) - return "umm... you do\nknow you cant\nkill ghosts,\nright?|we're sorta\nincorporeal\nand all|i was just\nlowering my\nhp because i\ndidnt want to\nbe rude|sorry... i\njust made\nthis more\nawkward...|pretend you\nbeat me...|oooooooooo"; + return "oh... i'm a\nghost, you\nknow|i just\nlowered my hp\nto be polite|sorry... that\nwas awkward|let's say you\nwon..."; if (b->state[2] == 1) return "oh gee..."; if (b->state[2] == 2) return "oh no..."; if (b->state[3]) { b->state[3] = 0; return "i knew it..."; } diff --git a/games/undertale/src/ruins1.c b/games/undertale/src/ruins1.c index c32bc2e9..63bc826c 100644 --- a/games/undertale/src/ruins1.c +++ b/games/undertale/src/ruins1.c @@ -158,7 +158,7 @@ static int ev_ruins2_toriel(Ev *c) { if (c->self) c->self->kind = OBJ_NONE; if (!t) return 1; t->dir = DIR_DOWN; - SAY(FACE_TORIEL, "`0* Welcome to your new\n home, innocent one.|* Allow me to educate you in\n the operation of the RUINS."); + SAY(FACE_TORIEL, "`0* Welcome to your new\n home, little one.|* Let me show you how things\n work in the RUINS."); /* over the switches, not the middle road */ WALK(t, 534, 4952, 2); WALK(t, 534, 4898, 2); @@ -184,7 +184,7 @@ static int ev_ruins2_toriel(Ev *c) { } WAIT(15); t->dir = DIR_DOWN; - SAY(FACE_TORIEL, "`0* The RUINS are full of\n puzzles.|* Ancient fusions between\n diversions and doorkeys.|* One must solve them to move\n from room to room.|* Please adjust yourself to\n the sight of them."); + SAY(FACE_TORIEL, "`0* The RUINS are full of\n puzzles that open the way.|* Solve each one to reach\n the next room."); set_flag(F_RUINS2_DONE, 1); WALK(t, 484, 4900, 2); WALK(t, 484, 4840, 2); @@ -197,7 +197,7 @@ static int ev_ruins3_toriel(Ev *c) { EV_BEGIN; if (c->self) c->self->kind = OBJ_NONE; if (!t) return 1; - SAY(FACE_TORIEL, "`0* To make progress here, you\n will need to trigger several\n switches.|* Do not worry, I have\n labelled the ones that you\n need to flip."); + SAY(FACE_TORIEL, "`0* Here you must flip some\n switches.|* I marked the right ones\n for you."); WALK(t, 560, 4716, 3); WALK(t, 990, 4716, 3); t->dir = DIR_LEFT; @@ -212,7 +212,7 @@ static int ev_ruins3_switch(Ev *c) { return 1; } if (k == 2 && !flag(F_RUINS3_DONE) && obj_find(ACTOR_TORIEL)) { - SAY(FACE_TORIEL, "`3* Oh? That switch is not\n one of the ones I labelled.|`0* Please, my child,\n flip only the switches\n I marked for you."); + SAY(FACE_TORIEL, "`3* Oh? Not that switch.|`0* Only the ones I marked,\n my child."); return 1; } set_flag(F_RUINS3_SW1 + k, 1); @@ -238,7 +238,7 @@ static int ev_ruins3_switch(Ev *c) { static int ev_ruins4_toriel(Ev *c) { EV_BEGIN; if (c->self) c->self->kind = OBJ_NONE; - SAY(FACE_TORIEL, "`0* As a human living in the\n UNDERGROUND, monsters may\n attack you.|* You will need to be prepared\n for this situation.|`2* However, worry not!\n* The process is simple.|`0* When you encounter a\n monster, you will enter a\n FIGHT.|* While you are in a FIGHT,\n strike up a friendly\n conversation.|* Stall for time.\n* I will come to resolve the\n conflict.|* Practice talking to the\n dummy."); + SAY(FACE_TORIEL, "`0* Monsters down here may\n try to fight you.|`2* Do not fear!\n* It is simple.|`0* In a FIGHT, talk kindly\n and wait.|* I will come and sort\n things out.|* Try talking to the\n dummy."); EV_END; } @@ -251,14 +251,14 @@ static int ev_ruins4_dummy(Ev *c) { BATTLE(FORM_DUMMY); if (battle_result() == BR_FLED) { set_flag(F_DUMMY, 3); - SAY(FACE_TORIEL, "`3* ...ah, you ran away...|`0* Truthfully, that was not a\n poor choice.|* It is better to avoid\n conflict whenever possible.|* That, however, is only a\n dummy.|* It cannot harm you.|* It is made of cotton.|* It has no desire for\n revenge...|* Nevertheless, there is no\n harm in practicing.|* Come now."); + SAY(FACE_TORIEL, "`3* ...you ran from it.|`0* Not a bad choice, really.\n* Avoiding a fight is often\n wise.|* Still, it is just a\n cotton dummy.|* Come along."); } else if (bt.mon[0].killed) { set_flag(F_DUMMY, 2); if (c->self) c->self->kind = OBJ_NONE; - SAY(FACE_TORIEL, "`3* Ah, the dummies are not for\n fighting!\n* They are for talking!|`1* We do not want to hurt\n anybody, do we...?|`0* Come now."); + SAY(FACE_TORIEL, "`3* Oh! Dummies are for\n talking, not hitting!|`1* We do not want to hurt\n anyone.|`0* Come along."); } else if (bt.turn >= 5 && !flag(F_DUMMY)) { set_flag(F_DUMMY, 4); - SAY(FACE_TORIEL, "`3* ...you stared so intently\n at that dummy that it got\n bored of you.|`0* I am sure there is a lesson\n in that somewhere...|* Come now, let us continue."); + SAY(FACE_TORIEL, "`3* ...the dummy grew tired\n of being looked at.|`0* Well. Let us move on."); } else { set_flag(F_DUMMY, 1); SAY(FACE_TORIEL, "`2* Ah, very good!\n* You are very good."); @@ -317,7 +317,7 @@ static int ev_ruins6_toriel(Ev *c) { if (c->self) c->self->kind = OBJ_NONE; if (!t) return 1; t->dir = DIR_LEFT; - SAY(FACE_TORIEL, "`0* You have done excellently\n thus far, my child.|`1* However...^2 I have a\n difficult request to ask of\n you.|* ...|`0* I would like you to walk to\n the end of the room by\n yourself.|`1* Forgive me for this."); + SAY(FACE_TORIEL, "`0* You are doing very well,\n my child.|`1* Now, a hard request...|`0* Walk to the end of this\n room on your own.|`1* I am sorry."); /* she hurries off, and hides behind the pillar */ FREE(true); WALK(obj_get(ACTOR_TORIEL), 4560, 4466, 6); @@ -346,7 +346,7 @@ static int ev_ruins6_reveal(Ev *c) { if (c->self) c->self->kind = OBJ_NONE; WALK(t, 4570, 4440, 2); t->dir = DIR_LEFT; - SAY(FACE_TORIEL, "`0* Greetings, my child.|* Do not worry, I did not\n leave you.|* I was merely behind this\n pillar the whole time.|`2* Thank you for trusting me.|`0* However, there was an\n important reason for this\n exercise.|* ...^2 to test your\n independence.|`1* I must attend to some\n business, and you must stay\n alone for a while.|`0* Please remain here.|* It's dangerous to explore\n by yourself.|`2* I have an idea.|* I will give you a CELL\n PHONE.|`0* If you have a need for\n anything, just call.|* Be good, alright?"); + SAY(FACE_TORIEL, "`0* There you are!|* I was just behind the\n pillar.|`2* Thank you for trusting\n me.|`0* That was a test of your\n independence.|`1* I have errands to run.\n* Please wait here for me.|`2* Take this CELL PHONE.|`0* Call me if you need\n anything. Be good!"); set_flag(F_PHONE, 1); WALK(obj_get(ACTOR_TORIEL), 4700, 4470, 3); WALK(obj_get(ACTOR_TORIEL), 4860, 4470, 3); @@ -363,13 +363,13 @@ static int ev_ruins7_call(Ev *c) { WAIT_UNTIL(!world_fading()); set_flag(F_LEAFPILE_CALL, 1); NARRATE("* Ring..."); - SAY(FACE_TORIEL, "`0* Hello?\n* This is TORIEL.|* You have not left the room,\n have you?|* There are a few puzzles\n ahead that I have yet to\n explain.|* It would be dangerous to\n try to solve them yourself.|* Be good, alright?"); + SAY(FACE_TORIEL, "`0* Hello? It is TORIEL.|* You are still in that\n room, yes?|* The puzzles ahead are\n tricky. Wait for me.|* Be good!"); EV_END; } static int ev_ruins7_froggit(Ev *c) { EV_BEGIN; - NARRATE("* Ribbit, ribbit.|* (Excuse me, human.)|* (You look like you're going to\n be fighting a lot of\n monsters.)|* (Let me give you some\n advice.)|* (If you ACT a certain way or\n FIGHT until you almost defeat\n them...)|* (They might not want to\n battle you anymore.)|* (If a monster does not want\n to fight you, please...)|* (Use some MERCY, human.)\n* Ribbit."); + NARRATE("* Ribbit, ribbit.|* (Some advice, human.)|* (ACT the right way, or weaken\n a monster...)|* (...and it may stop wanting\n to fight.)|* (Then show it MERCY.)\n* Ribbit."); EV_END; } diff --git a/games/undertale/src/ruins2.c b/games/undertale/src/ruins2.c index 38ad625b..f60d0ee4 100644 --- a/games/undertale/src/ruins2.c +++ b/games/undertale/src/ruins2.c @@ -340,22 +340,22 @@ static int ev_call(Ev *c) { switch (c->v[0]) { case CALL_FLAVOR: set_flag(F_FLAVOR_CALL, 1); - SAY(FACE_TORIEL, "* Ring...|`0* Hello?\n* This is TORIEL.|* For no reason in\n particular...|* Which do you prefer?|* Cinnamon or butterscotch?@Cinnamon@Bscotch"); + SAY(FACE_TORIEL, "* Ring...|`0* Hello? TORIEL here.|* A small question...|* Cinnamon or butterscotch?@Cinnamon@Bscotch"); set_flag(F_FLAVOR, CHOICE() ? 2 : 1); SAY(FACE_TORIEL, "`0* Oh, I see.\n* Thank you very much!"); break; case CALL_FLAVOR2: set_flag(F_FLAVOR_CALL, 2); - SAYF(FACE_TORIEL, "%s* You do not DISLIKE\n %s, do you?|* I know what your preference\n is, but...|* Would you turn up your nose\n if you found it on your\n plate?|* Right, right, I understand.|* Thank you for being\n patient, by the way.", + SAYF(FACE_TORIEL, "%s* You would still eat\n %s, though?|* Just checking!|* Thank you for waiting.", call_hello, flag(F_FLAVOR) == 2 ? "cinnamon" : "butterscotch"); break; case CALL_ALLERGY: set_flag(F_FLAVOR_CALL, 3), set_flag(F_ALLERGY_CALL, 1); - SAY(FACE_TORIEL, "* Ring...|`0* Hello?|* You do not have any\n allergies, do you?|`1* Huh? Why am I asking?|`0* No reason...\n* No reason at all."); + SAY(FACE_TORIEL, "* Ring...|`0* Hello?|* Any allergies, by the way?|`1* Why do I ask? Oh...|`0* No reason at all."); break; case CALL_ITEMS: set_flag(F_ITEM_CALL, 1); - SAY(FACE_TORIEL, "* Ring...|`0* Hello?|* I just realized that it has\n been a while since I have\n cleaned up.|* I was not expecting to have\n company so soon.|* There are probably a lot of\n things lying about here and\n there.|* You can pick them up, but do\n not carry more than you\n need.|* Someday you might see\n something you really like.|* You will want to leave room\n in your pockets for that."); + SAY(FACE_TORIEL, "* Ring...|`0* Hello?|* Things are a bit messy\n around here, I am afraid.|* Pick up what you like,\n but leave room in your\n pockets.|* You never know what you\n will want later."); break; } EV_END; @@ -367,7 +367,7 @@ static int ev_rock_talk(Ev *c) { if (!r) return 1; switch (flag(F_RUINS11_ROCK)) { case 0: - SAY(FACE_NONE, "* WHOA there, pardner!\n* Who said you could push me\n around?|* ...|* Huh? You want me to move?\n* Well, why didn't ya just\n say so?"); + SAY(FACE_NONE, "* Hey now! Who's shoving?|* ...|* Oh, you want me to move?\n* You could have just asked."); set_flag(F_RUINS11_ROCK, 1); WALK(obj_get(ACTOR_ROCK3), 6740, 4875, 1); NARRATE("* (The rock moved a little,\n and stopped.)"); @@ -392,7 +392,7 @@ static int ev_rock_talk(Ev *c) { break; case 4: NARRATE("* (You ask the rock to stay\n on the switch.)"); - SAY(FACE_NONE, "* Huh? You want me to stay\n put?|* Well, alright.\n* It's easier when you just\n ask, you know."); + SAY(FACE_NONE, "* Stay here? Sure thing.|* Asking works, you know."); set_flag(F_RUINS11_ROCK, 5); WALK(obj_get(ACTOR_ROCK3), 6780, 4875, 1); obj_spikes_set(obj_find(ACTOR_SPIKES), false); @@ -415,7 +415,7 @@ static int ev_rock_off(Ev *c) { static int ev_napsta_sleep(Ev *c) { EV_BEGIN; if (flag(F_NAPSTA)) return 1; - NARRATE("* (This ghost keeps saying 'z'\n out loud repeatedly,\n pretending to sleep.)|* Move it with force?@Yes@No"); + NARRATE("* (A ghost says 'z' over and\n over, faking sleep.)|* Push through it?@Yes@No"); if (CHOICE() != 0) { /* he steps back out of its way */ PL_WALK(pl.x - 12, pl.y, 2); @@ -473,16 +473,16 @@ static int ev_froggit(Ev *c) { c->v[0] = c->self ? c->self->arg : 0; switch (c->v[0]) { case 0: - NARRATE("* Ribbit, ribbit.|* (Excuse me, human.)|* (Did you know you can press\n [BACK] to read text faster?)|* (Some say it's rude, but\n the words won't mind.)"); + NARRATE("* Ribbit, ribbit.|* (Tip: [BACK] shows the\n whole text at once.)"); break; case 1: NARRATE("* Ribbit, ribbit.|* (Hey, human.)|* (Have you seen the key with\n a 4 on your calculator?)|* (I'm told 4 means \"four\n frogs.\")|* (But I only see three frogs\n in this room...)"); break; case 2: if (!flag(F_FROGGIT_YELLOW)) - NARRATE("* Ribbit, ribbit.|* (When a monster's name is\n #YYELLOW#X, you can SPARE it.)|* (Some think that makes\n things too easy.)|* (Shall I tell everyone to\n stop using yellow names?)@Yes@No"); + NARRATE("* Ribbit, ribbit.|* (A #YYELLOW#X name means you\n can SPARE that monster.)|* (Too easy, some say.\n Should we drop yellow?)@Yes@No"); else if (flag(F_FROGGIT_YELLOW) == 1) - NARRATE("* Ribbit, ribbit.|* (Since I told everyone not\n to use yellow names, everyone\n threw theirs out.)|* (Shall I ask them to use\n #PPINK#X names instead?)@Yes@No"); + NARRATE("* Ribbit, ribbit.|* (Everyone dropped yellow.)|* (Try #PPINK#X names\n instead?)@Yes@No"); else NARRATE("* Ribbit, ribbit.|* (Pink names...^2 Or should\n everyone go back to\n #YYELLOW#X?)@Yellow@Pink"); if (flag(F_FROGGIT_YELLOW) == 2) set_flag(F_FROGGIT_YELLOW, CHOICE() == 0 ? 0 : 2); @@ -490,7 +490,7 @@ static int ev_froggit(Ev *c) { NARRATE("* Ribbit."); break; case 3: - NARRATE("* Ribbit, ribbit.|* (I saw #BTORIEL#X come out of\n here just a little while\n ago.)|* (She was carrying some\n groceries.)|* (I didn't ask what they were\n for...)|* (We're all too intimidated\n to talk to her.)"); + NARRATE("* Ribbit, ribbit.|* (#BTORIEL#X went by with\n groceries a while ago.)|* (Nobody dared ask what\n for.)"); break; } EV_END; @@ -546,7 +546,7 @@ static int ev_toriel_tree(Ev *c) { else if (sv.hp > 2) SAY(FACE_TORIEL, "`0* There, there, I will heal\n you."); else SAY(FACE_TORIEL, "`5* Who did this to you?\n* You will get an apology."); sv.hp = sv.maxhp; - SAY(FACE_TORIEL, "`1* I should not have left you\n alone for so long.|* It was irresponsible to try\n to surprise you like this.|* Err...|`0* Well, I suppose I cannot\n hide it any longer.|`2* Come, small one!"); + SAY(FACE_TORIEL, "`1* I left you alone too long.\n* I am sorry.|`0* Oh, the surprise is\n spoiled now...|`2* Come along, little one!"); set_flag(F_TORIEL_HOME, 1); WALK(obj_get(ACTOR_TORIEL), 9006, 3070, 3); obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; diff --git a/games/undertale/src/ruins3.c b/games/undertale/src/ruins3.c index 4a6562d8..84e004de 100644 --- a/games/undertale/src/ruins3.c +++ b/games/undertale/src/ruins3.c @@ -107,7 +107,7 @@ void ruins3_setup(int room, int from) { static int ev_home_tour(Ev *c) { EV_BEGIN; WAIT_UNTIL(!world_fading()); - SAY(FACE_TORIEL, "`0* Do you smell that?|`2* Surprise!|* It is a butterscotch-\n cinnamon pie.|`0* I thought we might\n celebrate your arrival.|* I want you to have a nice\n time living here.|* So I will hold off on snail\n pie for tonight.|`2* Here, I have another\n surprise for you."); + SAY(FACE_TORIEL, "`0* Smell that?|`2* Surprise! A butterscotch-\n cinnamon pie, for you!|`0* No snail pie tonight.|`2* And one more surprise..."); WALK(obj_get(ACTOR_TORIEL), 8996, 2840, 3); WALK(obj_get(ACTOR_TORIEL), 9200, 2840, 3); obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; @@ -137,8 +137,8 @@ static int ev_toriel_chair(Ev *c) { CHOOSE(chair_opts, 2); if (CHOSEN() < 0) return 1; if (CHOSEN() == 0) { - SAY(FACE_TORIEL, "`3* What?|`1* This...^2 this IS your home\n now.|`0* Um...^2 would you like to hear\n about this book I am reading?|* It is called \"72 Uses for\n Snails.\"|* How about it?@Yes@No"); - if (CHOICE() == 0) SAY(FACE_TORIEL, "`2* Here is an exciting snail\n fact.|`0* Did you know that snails\n have a chainsaw-like tongue\n called a radula?"); + SAY(FACE_TORIEL, "`3* What?|`1* This is your home now.|`0* Would you like to hear about\n my book on snails instead?@Yes@No"); + if (CHOICE() == 0) SAY(FACE_TORIEL, "`2* A snail fact!|`0* Snails have a tongue like a\n tiny saw."); else SAY(FACE_TORIEL, "`0* Oh...^2 Alright."); return 1; } @@ -168,7 +168,7 @@ static int ev_stairs(Ev *c) { return 1; } if (!flag(F_HOME_TOUR)) return 1; - SAY(FACE_TORIEL, "`1* Oh, my child...|`0* There is nothing down there\n for you.|* Come, let us go upstairs."); + SAY(FACE_TORIEL, "`1* My child...|`0* There is nothing for you\n down there.|* Let us go back upstairs."); PL_WALK(pl.x + 14, pl.y + 14, 2); EV_END; } @@ -189,10 +189,10 @@ static int ev_basement_talk(Ev *c) { obj_get(ACTOR_TORIEL)->dir = DIR_LEFT; switch (flag(F_BASEMENT_TALK)) { case 0: - SAY(FACE_TORIEL, "`0* You wish to know how to\n return \"home,\" do you not?|* Ahead of us lies the end of\n the RUINS.|* A one-way exit to the rest\n of the underground.|`6* I am going to destroy it.|* No one will ever be able to\n leave again.|`0* Now be a good child and go\n upstairs."); + SAY(FACE_TORIEL, "`0* You want to go \"home\".|* The exit from the RUINS is\n just ahead.|`6* I will seal it, so no one\n can leave.|`0* Go upstairs, please."); break; case 1: - SAY(FACE_TORIEL, "`6* Every human that falls down\n here meets the same fate.|* I have seen it again and\n again.|* They come.|* They leave.|* They die.|* You naive child...|* If you leave the RUINS...|* They...^2 #RASGORE#X...^2 will kill\n you.|* I am only protecting you,\n do you understand?|* ...^2 Go to your room."); + SAY(FACE_TORIEL, "`6* Every human who falls here\n leaves... and is never\n seen again.|* Out there, #RASGORE#X will\n take your life.|* I am keeping you safe.|* ...Go to your room."); break; default: obj_get(ACTOR_TORIEL)->dir = DIR_DOWN; @@ -223,14 +223,14 @@ static int ev_basement_talk(Ev *c) { static int ev_toriel_door(Ev *c) { EV_BEGIN; if (c->self) c->self->kind = OBJ_NONE; - SAY(FACE_TORIEL, "`6* You want to leave so\n badly?|* Hmph.|* You are just like the\n others.|* There is only one solution\n to this.|* Prove yourself...|* Prove to me you are strong\n enough to survive."); + SAY(FACE_TORIEL, "`6* So you insist on leaving.|* Like all the others.|* Then show me you are\n strong enough to survive."); BATTLE(FORM_TORIEL); if (flag(F_TORIEL_FIGHT) != 1) { obj_get(ACTOR_TORIEL)->kind = OBJ_NONE; if (!flag(F_TORIEL_FIGHT)) set_flag(F_TORIEL_FIGHT, battle_result() == BR_FLED ? 1 : 2); return 1; } - SAY(FACE_TORIEL, "`1* ...|* I understand.|* You would just be unhappy\n trapped down here.|* The RUINS are very small\n once you get used to them.|* It would not be right for\n you to grow up in a place\n like this.|* My expectations...|* My loneliness...|* My fear...|`0* For you, my child...|* I will put them aside."); + SAY(FACE_TORIEL, "`1* ...|* I see.|* You would not be happy\n here.|* This small place is no\n home for you to grow up in.|`0* My worries can wait.\n* For you, my child."); /* she holds Frisk */ PL_WALK(10010, 2040, 2); pl.hidden = true; @@ -239,7 +239,7 @@ static int ev_toriel_door(Ev *c) { WAIT(70); pl.hidden = false; obj_get(ACTOR_TORIEL)->spr[0] = SPR_TORIEL_D, obj_get(ACTOR_TORIEL)->y = 1984; - SAY(FACE_TORIEL, "`1* If you truly wish to leave\n the RUINS...|* I will not stop you.|* However, when you leave...|* Please do not come back.|`0* I hope you understand."); + SAY(FACE_TORIEL, "`1* If you must leave...|* I will not stop you.|* But please do not come\n back.|`0* I hope you understand."); WAIT(20); SAY(FACE_TORIEL, "`0* Goodbye, my child."); obj_get(ACTOR_TORIEL)->flags &= (uint16_t)~OF_SOLID; @@ -250,23 +250,21 @@ static int ev_toriel_door(Ev *c) { } static const char flowey_spared[] = - "`1* Clever.^2 Verrrryy clever.|* You think you're really\n smart, don't you?|" - "`0* In this world, it's KILL\n or BE killed.|* So you were able to play by\n your own rules.|" - "* You spared the life of a\n single person.|`2* Hee hee hee...|* I bet you feel really\n great.|" - "`1* You didn't kill anybody\n this time.|* But what will you do if you\n meet a relentless killer?|" - "`3* You'll die and you'll die\n and you'll die.|* Until you tire of trying.|* What will you do then?|" - "* Will you kill out of\n frustration?|* Or will you give up\n entirely, and let ME take\n your place?|"; + "`1* Well, well. Aren't you\n clever.|" + "`0* Down here it's kill or be\n killed... and you spared\n her anyway.|`2* Proud of yourself? Hee hee.|" + "`1* But what happens when you\n meet someone who won't stop?|" + "`3* Over and over, until you're\n sick of it.|* Then what? Will you fight\n back... or let ME take over?|"; static const char flowey_killed[] = - "`1* Clever.^2 Verrrryy clever.|* You think you're really\n smart, don't you?|" - "`0* In this world, it's KILL\n or BE killed.|`2* So you did kill her.|* Hee hee hee...|" - "`3* You really are a quick\n learner.|"; + "`1* Well, well. Aren't you\n clever.|" + "`0* Kill or be killed, right?\n`2* And you chose. Hee hee.|" + "`3* You learn fast.|"; static const char flowey_others[] = - "`1* Clever.^2 Verrrryy clever.|* You think you're really\n smart, don't you?|" - "`0* In this world, it's KILL\n or BE killed.|* You spared her...|" - "`2* ...but you killed everyone\n else on the way.|* Hee hee hee...|"; + "`1* Well, well. Aren't you\n clever.|" + "`0* You spared her...|" + "`2* ...after everyone you hurt\n on the way here. Hee hee.|"; static const char flowey_last[] = - "`8* I am the prince of this\n world's future.|`1* Don't worry, my little\n monkey...|" - "* I won't interfere with your\n little quest.|`2* Have fun?^4 Have fun...|`8* Ha ha ha..."; + "`8* This world's future is\n mine to decide.|`1* Go on, then.|" + "* I won't get in your way.|`2* Have fun...|`8* Ha ha ha..."; static int ev_flowey_end(Ev *c) { EV_BEGIN; diff --git a/games/undertale/src/snowdin1.c b/games/undertale/src/snowdin1.c index b2e16c29..f9a1515d 100644 --- a/games/undertale/src/snowdin1.c +++ b/games/undertale/src/snowdin1.c @@ -127,7 +127,7 @@ void snow1_setup(int room, int from) { } case ROOM_BOXROAD: obj_save(3240, 376, "* (The convenience of that lamp still fills you with determination.)"); - obj_sign(3420, 334, 20, 22, "* (This is a box.)|* (You can put an item inside or take an item out.)|* (The same box will appear later, so don't worry about coming back.)|* (Sincerely, a box lover.)"); + obj_sign(3420, 334, 20, 22, "* (A box. Put an item in, take one out.)|* (Boxes further on hold the same things.)"); { Obj *b = obj_trigger(3444, 334, 26, 24, EV_BOX, ACTOR_ITEM); if (b) b->flags = OF_TALK | OF_SOLID; @@ -139,7 +139,7 @@ void snow1_setup(int room, int from) { break; } case ROOM_PAPSENTRY: - obj_sign(3966, 296, 52, 64, "* YOU OBSERVE THE WELL-CRAFTED SENTRY STATION.|* WHO COULD HAVE BUILT THIS, YOU PONDER...|* I BET IT WAS THAT VERY FAMOUS ROYAL GUARDSMAN!|* (NOTE: NOT YET A VERY FAMOUS ROYAL GUARDSMAN.)"); + obj_sign(3966, 296, 52, 64, "* (A sentry station, built with great care.)|* (A note brags it was made by a future Royal Guard.)"); if (!flag(F_PAP_SENTRY)) { obj_sans(3616, 414, DIR_RIGHT); obj_papyrus(3660, 414, DIR_LEFT); @@ -193,7 +193,7 @@ void snow1_setup(int room, int from) { break; } case ROOM_DOGI: - obj_sign(6426, 310, 24, 24, "* SMELL DANGER RATING|* Snow Smell - Snowman\n WHITE Rating\n Can become #YYELLOW#X Rating|* Unsuspicious Smell - Puppy\n #BBLUE#X Rating\n Smell of rolling around.|* Weird Smell - Humans\n #GGREEN#X Rating\n Destroy at all costs!"); + obj_sign(6426, 310, 24, 24, "* (A chart of smells and how dangerous they are.)|* (Snowmen: harmless. Puppies: fine.)\n* (Humans: #GDANGER!#X)"); break; case ROOM_WORDSEARCH: obj_sign(6434, 648, 18, 18, "* (It's a word search.)\n* (The top row says GIASFCLFUBREHBER.)"); diff --git a/games/undertale/src/snowdin2.c b/games/undertale/src/snowdin2.c index 1248b37f..145a6bfd 100644 --- a/games/undertale/src/snowdin2.c +++ b/games/undertale/src/snowdin2.c @@ -126,7 +126,7 @@ void snow2_setup(int room, int from) { switch (room) { case ROOM_SPAGHETTI: obj_save(6745, 695, "* (Knowing the mouse might one day find a way to heat up the spaghetti...)\n* (It fills you with determination.)"); - obj_sign(6690, 658, 16, 20, "* HUMAN!! PLEASE ENJOY THIS SPAGHETTI.|* (LITTLE DO YOU KNOW, THIS SPAGHETTI IS A TRAP...)\n* (DESIGNED TO ENTICE YOU!!!)|* (YOU'LL BE SO BUSY EATING IT...)\n* (THAT YOU WON'T REALIZE THAT YOU AREN'T PROGRESSING!!)|* (THOROUGHLY JAPED AGAIN BY THE GREAT PAPYRUS!!!)\n* NYEH HEH HEH, PAPYRUS"); + obj_sign(6690, 658, 16, 20, "* (A note by the spaghetti.)|* ENJOY, HUMAN! (IT'S A TRAP: YOU'LL BE TOO BUSY EATING TO MOVE ON!)\n* - PAPYRUS"); obj_sign(6734, 646, 38, 34, "* (It's a plate of frozen spaghetti.)\n* (It's so cold, it's stuck to the table.)"); obj_sign(6788, 644, 38, 36, "* (It's a microwave.)\n* (Its only setting is \"spaghetti.\")\n* (It's unplugged.)"); obj_sign(6742, 585, 18, 14, "* (Squeak!)"); diff --git a/games/undertale/src/snowtown.c b/games/undertale/src/snowtown.c index c2fcdb02..ee327ff1 100644 --- a/games/undertale/src/snowtown.c +++ b/games/undertale/src/snowtown.c @@ -55,7 +55,7 @@ void town_setup(int room, int from) { if (s) s->event = EV_GRILLBYS, s->flags |= OF_TALK; } } - folk(1099, 1093, "* Yo! You're a kid too, right?\n* I can tell 'cause you're wearing a striped shirt.|* I'm going to see Undyne fight someday.\n* She's the coolest!"); + folk(1099, 1093, "* Hey, another kid!|* Someday I'll watch Undyne\n fight. She's the best!"); break; case ROOM_TOWNNORTH: folk(1463, 851, "* The kids are playing \"monsters and humans.\"\n* Ah, to be young again..."); @@ -91,12 +91,12 @@ void town_setup(int room, int from) { } break; case ROOM_LIBRARY: - obj_sign(1830, 506, 30, 40, "* Monster funerals, technically speaking, are cool as heck.|* When monsters get old and kick the bucket, they turn into dust.\n* At funerals, we take that dust and spread it on that person's favorite thing.|* Then their essence will live on in that thing...\n* Uhhh, am I at the page minimum yet? I'm kinda sick of writing this."); - obj_sign(1874, 506, 30, 40, "* While monsters are mostly made of magic, human beings are mostly made of water.|* Humans, with their physical forms, are far stronger than us.\n* But they will never know the joy of expressing themselves through magic.|* They will never get a bullet-pattern birthday card..."); + obj_sign(1830, 506, 30, 40, "* (A book about monster funerals.)|* (When a monster passes, its dust is spread on what it loved most.)\n* (The writer seems eager to reach the page count.)"); + obj_sign(1874, 506, 30, 40, "* (A book comparing humans and monsters.)|* (Humans are sturdier... but they can't send a birthday card made of bullets.)"); obj_sign(1918, 506, 30, 40, "* (Here I am... Writing this book.)\n* (A person comes in and picks up the book...)\n* (They start reading it...!)"); - obj_sign(1962, 506, 30, 40, "* Because they are made of magic, monsters' bodies are attuned to their SOUL.|* If a monster doesn't want to fight, its defenses will weaken.\n* And the crueller the intentions of our enemies, the more their attacks will hurt us.|* Therefore, if a being with a powerful SOUL struck with the desire to kill...\n* Um, let's end the chapter here..."); - obj_sign(2006, 506, 30, 40, "* Fearing the humans no longer, we moved out of our old city, HOME.|* We braved harsh cold, damp swampland, and searing heat...\n* Until we reached what we now call our capital.|* \"NEW HOME.\"\n* Again, our King is really bad at names...?"); - obj_sign(2050, 506, 30, 40, "* Love, hope, compassion...\n* This is what people say monster SOULs are made of.|* But the absolute nature of the \"SOUL\" is unknown.\n* After all, humans have proven their SOULs don't need these things to exist."); + obj_sign(1962, 506, 30, 40, "* (A book about magic and the SOUL.)|* (A monster who won't fight grows weaker... and cruel intent hurts them most.)\n* (The chapter stops there.)"); + obj_sign(2006, 506, 30, 40, "* (A history book. Monsters left their first city and crossed cold, swamp and heat.)|* (They named the new capital \"New Home.\" The book sighs about the King's naming.)"); + obj_sign(2050, 506, 30, 40, "* (A book on what a SOUL is made of.)|* (Nobody knows for sure.)"); folk(1896, 640, "* Yes, the sign outside says \"Librarby.\"\n* We made a typo when we were making it."); folk(2031, 655, flag(F_WORDSEARCH) == 2 ? "* I can see it in your eyes...\n* You think Junior Jumble is harder." : "* I can see it in your eyes...\n* You think crosswords are harder."); folk(2002, 589, "* There's no news around here, so the newspaper is mostly comics and puzzles."); @@ -118,9 +118,9 @@ void town_setup(int room, int from) { obj_sign(2560, 600, 40, 40, "* (It's dark... A trash tornado swirls in the corner.)"); break; case ROOM_SHED: - obj_sign(2650, 770, 30, 20, flag(F_PAP_CAPTURED) <= 1 ? "* SORRY, I HAVE TO LOCK YOU IN THE GUEST ROOM UNTIL UNDYNE ARRIVES.\n* FEEL FREE TO MAKE YOURSELF AT HOME!!!|* REFRESHMENTS AND ACCOMODATIONS HAVE BEEN PROVIDED.\n* - NYEHFULLY YOURS, PAPYRUS" - : flag(F_PAP_CAPTURED) == 2 ? "* PLEASE ASK BEFORE YOU ESCAPE!!!\n* WHEN YOU WENT MISSING, I GOT WORRIED SICK!!!\n* - SLIGHTLY BONETROUSLED, PAPYRUS" - : "* IF YOU'RE JUST LOOKING FOR A PLACE TO STAY...\n* JUST ASK!!! YOU DON'T NEED TO FIGHT ME!!!\n* - YOUR HOST, PAPYRUS"); + obj_sign(2650, 770, 30, 20, flag(F_PAP_CAPTURED) <= 1 ? "* (A note.)\n* SORRY ABOUT THE LOCK! UNDYNE IS ON HER WAY. MAKE YOURSELF COMFY!!!\n* - PAPYRUS" + : flag(F_PAP_CAPTURED) == 2 ? "* (A note.)\n* NEXT TIME, ASK BEFORE ESCAPING! I WAS WORRIED!!!\n* - PAPYRUS" + : "* (A note.)\n* YOU CAN JUST STAY OVER, YOU KNOW! NO FIGHTING NEEDED!!!\n* - PAPYRUS"); obj_sign(2680, 820, 40, 30, "* (A dog bed. It's warm.)"); break; case ROOM_FOGROOM: diff --git a/games/undertale/src/toriel.c b/games/undertale/src/toriel.c index 79ca143f..3653db65 100644 --- a/games/undertale/src/toriel.c +++ b/games/undertale/src/toriel.c @@ -9,12 +9,12 @@ /* b->state[0]: spares; [1]: talks; [2]: 1 she stopped fighting, 2 she gives up, 3 defeated, 4 betrayed */ static const char *const spare_lines[] = { - ".....", "..... .....", "..... ..... .....", "...?", "What are\nyou doing?", "Attack or\nrun away!", - "What are you\nproving this\nway?", "Fight me or\nleave!", "Stop it.", "Stop looking\nat me that\nway.", "Go away!", "...", - "... ...", "I know you\nwant to go\nhome, but...", "But please...\ngo upstairs\nnow.", "I promise I\nwill take\ngood care of\nyou here.", - "I know we do\nnot have\nmuch, but...", "We can have\na good life\nhere.", "Why are you\nmaking this\nso difficult?", - "Please, go\nupstairs.", ".....", "Ha ha...", "Pathetic, is\nit not? I\ncannot save\neven a single\nchild.", "...", - "No, I\nunderstand.|You would\njust be\nunhappy\ntrapped down\nhere.|The RUINS\nare very small\nonce you get\nused to them.|It would not\nbe right for\nyou to grow up\nin a place\nlike this.|My\nexpectations...\nMy\nloneliness...\nMy fear...|For you, my\nchild... I\nwill put them\naside."}; + ".....", "..... .....", "..... ..... .....", "...?", "What is\nthis?", "Fight, or\ngo!", + "What do you\nhope to\nshow?", "Fight or\nflee!", "Enough.", "Do not look\nat me so.", "Leave!", "...", "... ...", + "I know you\nmiss home...", "Please, go\nupstairs.", "I will look\nafter you.", "It is not\nmuch here,\nbut...", + "We could be\nhappy here.", "Why must\nyou make\nthis hard?", "Go upstairs.\nPlease.", ".....", "Ha...", + "I cannot\nprotect\neven one\nchild...", "...", + "No... I\nsee.|You would\nnot be happy\nhere.|This small\nplace is no\nhome for\nyou.|My worries\ncan wait.|For you, my\nchild."}; #define NSPARES (int)(sizeof spare_lines / sizeof spare_lines[0]) static void act_toriel(Battle *b, Monster *m, int act, char *t, int cap) { @@ -27,9 +27,9 @@ static void act_toriel(Battle *b, Monster *m, int act, char *t, int cap) { static const char *talk_toriel(Battle *b, Monster *m) { if (b->state[2] == 3) - return "Urgh...|You are\nstronger than\nI thought...|Listen to me,\nsmall one...|If you go\nbeyond this\ndoor,|Keep walking\nas far as you\ncan.|Eventually\nyou will reach\nan exit.|... ....|#RASGORE#X...\nDo not let\n#RASGORE#X\ntake your\nsoul.|His plan\ncannot be\nallowed to\nsucceed.|......|Be good,\nwon't you?|M y c h i l d ."; + return "Urgh...|You are\nstrong...|Go on, then.\nKeep going\nuntil you\nreach the\nexit.|And do not\nlet #RASGORE#X\ntake your\nSOUL.|Be good,\nmy child."; if (b->state[2] == 4) - return "You...|... at my\nmost\nvulnerable\nmoment...|To think I\nwas worried\nyou wouldn't\nfit in out\nthere...|Eheheheh!!!\nYou really are\nno different\nthan them!|Ha... ha..."; + return "You...|...when I\nwas\nunguarded...|You are just\nlike the\nothers...|Ha... ha..."; if (b->last_action == 3) { int k = b->state[0] - 1; if (k >= 0 && k < NSPARES) return spare_lines[k]; From 2022ff11d41d70c0eae99290f9d02f4cb76d2a21 Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 02:13:25 +0000 Subject: [PATCH 07/19] Undertale: the pictures packed with LZMA, unpacked as they are needed Sprite frames and map tiles now live in LZMA blocks (a sprite's frames together, a room's tiles in 8 x 8 squares of 2 KB blocks) that blk.c unpacks into a 60 KB cache in RAM, the least recently used thrown out first. The app goes from 1.51 MB to 690 KB, which leaves room for Waterfall, Hotland and New Home. Playing all of Snowdin unpacks 451 blocks, at most 17 in one frame (entering a room). --- games/undertale/src/blk.c | 107 ++++++++++++++++++++++++++++++++++ games/undertale/src/blk.h | 16 +++++ games/undertale/src/data.bin | Bin 1361708 -> 539244 bytes games/undertale/src/data.h | 1 + games/undertale/src/gfx.c | 2 + games/undertale/src/res.c | 17 ++++-- games/undertale/src/res.h | 4 +- games/undertale/tests/play.c | 2 + games/undertale/tools/pack.py | 85 +++++++++++++++++++++++---- 9 files changed, 217 insertions(+), 17 deletions(-) create mode 100644 games/undertale/src/blk.c create mode 100644 games/undertale/src/blk.h diff --git a/games/undertale/src/blk.c b/games/undertale/src/blk.c new file mode 100644 index 00000000..23b74619 --- /dev/null +++ b/games/undertale/src/blk.c @@ -0,0 +1,107 @@ +/* data.bin's LZMA blocks and the RAM they're unpacked into (blk.h). */ +#include +#include "blk.h" +#include "lzma/LzmaDec.h" +#include "res.h" + +#define ARENA (60 * 1024) /* the cache: a screen of tiles is 20 KB, rarely 55; a battle's monsters 40 */ +#define MAX_IN 128 /* blocks in it at once */ +#define MAX_BLOCKS 4096 /* (tools/pack.py's) */ +#define NONE 0xFF + +static uint8_t arena[ARENA] __attribute__((aligned(4))); +typedef struct { + uint16_t id, used; /* the block, the frame it was last used in */ + uint32_t off, size; /* where it is in the arena */ +} In; +static In in[MAX_IN]; /* by where they are */ +static int nin; +static uint8_t where[MAX_BLOCKS]; /* each block's place in `in`, or NONE */ +static uint16_t frame_no = 1; +static bool ready; +uint32_t blk_unpacked, blk_most_in_frame; +static uint32_t unpacked_now; + +/* the decoder's tables, in one piece (LzmaDecode asks once a block) */ +static uint16_t probs[2800]; +static void *probs_alloc(ISzAllocPtr p, size_t size) { + (void)p; + return size <= sizeof probs ? probs : NULL; +} +static void probs_free(ISzAllocPtr p, void *a) { (void)p, (void)a; } +static const ISzAlloc alloc = {probs_alloc, probs_free}; + +static void init(void) { + memset(where, NONE, sizeof where); + nin = 0, ready = true; +} + +static void drop(int k) { + where[in[k].id] = NONE; + memmove(&in[k], &in[k + 1], (size_t)(nin - k - 1) * sizeof in[0]); + nin--; + for (int i = k; i < nin; i++) where[in[i].id] = (uint8_t)i; +} + +/* room for n bytes: its place in `in` (the new entry, made), or -1 */ +static int make_room(uint32_t n) { + for (;;) { + if (nin < MAX_IN) { + uint32_t at = 0; + for (int i = 0; i <= nin; i++) { + uint32_t end = i < nin ? in[i].off : ARENA; + if (end - at >= n) { + memmove(&in[i + 1], &in[i], (size_t)(nin - i) * sizeof in[0]); + nin++; + for (int j = i + 1; j < nin; j++) where[in[j].id] = (uint8_t)j; + in[i].off = at, in[i].size = n; + return i; + } + if (i < nin) at = in[i].off + in[i].size; + } + } + if (!nin) return -1; + /* throw out the least recently used (those of this frame last) */ + int old = 0; + for (int i = 1; i < nin; i++) + if ((uint16_t)(frame_no - in[i].used) > (uint16_t)(frame_no - in[old].used)) old = i; + drop(old); + } +} + +const uint8_t *blk_get(int id) { + if (!ready) init(); + const uint8_t *s = section(SEC_BLOCKS); + if (id < 0 || id >= (int)rd32(s)) return NULL; + if (where[id] != NONE) { + In *b = &in[where[id]]; + b->used = frame_no; + return arena + b->off; + } + const uint8_t *e = s + 12 + 8 * id; + uint32_t off = rd32(e), size = rd32(e + 4); + uint32_t next = id + 1 < (int)rd32(s) ? rd32(e + 8) : 0; + int k = make_room(size); + if (k < 0) return NULL; + In *b = &in[k]; + b->id = (uint16_t)id, b->used = frame_no; + where[id] = (uint8_t)k; + SizeT out = size, src = next ? next - off : 1u << 30; + ELzmaStatus st; + LzmaDecode(arena + b->off, &out, s + off, &src, s + 4, LZMA_PROPS_SIZE, LZMA_FINISH_ANY, &st, &alloc); + blk_unpacked++, unpacked_now++; + return arena + b->off; +} + +void blk_frame(void) { + if (!ready) init(); + /* the blocks packed together, so the free room is in one piece */ + uint32_t at = 0; + for (int i = 0; i < nin; i++) { + if (in[i].off != at) memmove(arena + at, arena + in[i].off, in[i].size), in[i].off = at; + at += in[i].size; + } + if (unpacked_now > blk_most_in_frame) blk_most_in_frame = unpacked_now; + unpacked_now = 0; + frame_no++; +} diff --git a/games/undertale/src/blk.h b/games/undertale/src/blk.h new file mode 100644 index 00000000..65b495d5 --- /dev/null +++ b/games/undertale/src/blk.h @@ -0,0 +1,16 @@ +/* Undertale: data.bin's BLOCKS, unpacked when needed (tools/pack.py packs them with LZMA). + * + * The frames and tiles live in blocks; blk_get unpacks a block into a RAM cache + * and gives its bytes. A pointer it gives holds until the next blk_get (which can + * throw a block out to make room), so callers use it right away, and nothing keeps + * one from a frame to the next: blk_frame, at the frame's start, packs the cache's + * blocks together. The blocks the frame used are thrown out last. */ +#ifndef UT_BLK_H +#define UT_BLK_H +#include + +const uint8_t *blk_get(int id); +void blk_frame(void); +/* (for the tests: blocks unpacked so far, the most in a frame) */ +extern uint32_t blk_unpacked, blk_most_in_frame; +#endif diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index a1f2887800c4ae1ae2518c2ed477f94b5642b05b..2833d11aa1b70669a957ebc59f0900a6df4fe0bf 100644 GIT binary patch literal 539244 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 clz{o$Ln8z)$h`{TJ5HM-AcZ7C8}_| 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⁣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%0D>#|1;G#kp%)}! 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 htz(+;jUvbET>bOlQmrVaD*(zpeB1y4 literal 1361708 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 Lgpz}`;# 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 z +#include "blk.h" #include "gfx.h" #include "res.h" #include "world.h" @@ -46,6 +47,7 @@ int gfx_dropped; static int dropped_now; void gfx_begin(void) { + blk_frame(); nitems = 0, npool = 0, dropped_now = 0; gfx_clip_all(); } diff --git a/games/undertale/src/res.c b/games/undertale/src/res.c index e81f146b..d9a4d015 100644 --- a/games/undertale/src/res.c +++ b/games/undertale/src/res.c @@ -1,5 +1,6 @@ /* data.bin: sections, sprites, tiles, rooms and strings (see res.h). */ #include +#include "blk.h" #include "res.h" const uint8_t *ut_bin; @@ -10,6 +11,13 @@ int spr_frames(uint16_t spr) { return rd16(s + 4 + 4 * spr + 2); } +/* a frame's or tile's bytes: in its block, unpacked (blk.h) */ +static const uint8_t *in_block(int sec, int k) { + const uint8_t *t = section(sec) + 4 + 4 * k; + const uint8_t *b = blk_get(rd16(t)); + return b ? b + rd16(t + 2) : NULL; +} + bool frame_get(uint16_t spr, int i, Frame *f) { const uint8_t *s = section(SEC_SPRITES); if (spr >= rd32(s)) return false; @@ -17,8 +25,8 @@ bool frame_get(uint16_t spr, int i, Frame *f) { if (n <= 0) return false; i %= n; if (i < 0) i += n; - const uint8_t *fs = section(SEC_FRAMES); - const uint8_t *p = fs + rd32(fs + 4 + 4 * (first + i)); + const uint8_t *p = in_block(SEC_FRAMES, first + i); + if (!p) return false; f->w = rd16(p), f->h = rd16(p + 2); f->ox = rds16(p + 4), f->oy = rds16(p + 6); f->bpp = p[8], f->ncol = p[9]; @@ -39,8 +47,9 @@ int spr_h(uint16_t spr) { } void tile_get(uint16_t id, Tile *t) { - const uint8_t *s = section(SEC_TILES); - const uint8_t *p = s + rd32(s + 4 + 4 * id); + static const uint8_t black[4] = {0, 1, 0, 0}; + const uint8_t *p = in_block(SEC_TILES, id); + if (!p) p = black; t->bpp = p[0], t->ncol = p[1]; t->pal = p + 2; t->bits = p + 2 + 2 * t->ncol; diff --git a/games/undertale/src/res.h b/games/undertale/src/res.h index 558cae8d..20217dce 100644 --- a/games/undertale/src/res.h +++ b/games/undertale/src/res.h @@ -1,7 +1,9 @@ /* Undertale: data.bin (tools/pack.py), read where it lies in flash. * * Its sections (SEC_* in data.h): sprites and their frames, the areas' tiles, - * rooms (a tile grid and a collision map each), fonts and strings. */ + * rooms (a tile grid and a collision map each), fonts and strings. Frames and + * tiles are packed in LZMA blocks (blk.h): their pointers hold until the next + * frame_get or tile_get. */ #ifndef UT_RES_H #define UT_RES_H #include diff --git a/games/undertale/tests/play.c b/games/undertale/tests/play.c index 6277afa7..80026538 100644 --- a/games/undertale/tests/play.c +++ b/games/undertale/tests/play.c @@ -15,6 +15,7 @@ #include #include #include "../src/battle.h" +#include "../src/blk.h" #include "../src/game.h" #include "../src/gfx.h" #include "../src/menu.h" @@ -433,6 +434,7 @@ int main(int argc, char **argv) { } } if (gfx_dropped) printf("dropped %d draw commands\n", gfx_dropped); + if (getenv("BLK_STATS")) fprintf(stderr, "blocks unpacked %u, at most %u in a frame\n", blk_unpacked, blk_most_in_frame); printf("END mode %d room %d at %d,%d hp %d lv %d gold %d kills %d path %s\nFLAGS", g_mode, g_room, pl.x, pl.y, sv.hp, sv.lv, sv.gold, sv.kills, path_at && *path_at ? "left" : "done"); for (int i = 0; i < FLAG_COUNT; i++) diff --git a/games/undertale/tools/pack.py b/games/undertale/tools/pack.py index 5a96062d..631376fb 100644 --- a/games/undertale/tools/pack.py +++ b/games/undertale/tools/pack.py @@ -16,7 +16,13 @@ bitmap offset u16) and the bitmaps (rows of whole bytes, highest bit first) - STRINGS: the room names and other texts the data refers to - DOORS: for each room its first door and how many (u16, u16), then the doors: 16 bytes each (x, y, w, h on - the map, the room it leads to, where Frisk's top-left lands, the way he faces)""" + the map, the room it leads to, where Frisk's top-left lands, the way he faces) +- BLOCKS: the frames and tiles themselves, in LZMA streams the game unpacks when it needs them (blk.c): the + count, the 5 LZMA properties bytes (3 of padding), then for each block its stream's offset (u32) and its size + unpacked (u32), then the streams. FRAMES and TILES only say where each frame or tile is: its block and its + offset in it (u16, u16). A sprite's frames share blocks (of 16 KB at most); a room's tiles go in 8 x 8 squares, + so the tiles a screen shows sit in few blocks (of 2 KB).""" +import lzma import os import struct import sys @@ -32,7 +38,55 @@ OUT_BIN = os.path.join(HERE, "..", "src", "data.bin") OUT_H = os.path.join(HERE, "..", "src", "data.h") -SECTIONS = ["SPRITES", "FRAMES", "TILES", "ROOMS", "GRID", "COLL", "FONTS", "STRINGS", "DOORS"] +SECTIONS = ["SPRITES", "FRAMES", "TILES", "ROOMS", "GRID", "COLL", "FONTS", "STRINGS", "DOORS", "BLOCKS"] +BLOCK_TILES, BLOCK_FRAMES = 2048, 16384 # the most bytes a block holds, unpacked (a frame bigger: alone) +MAX_BLOCKS = 4096 # (blk.c's table) +LZMA_FILTERS = [{"id": lzma.FILTER_LZMA1, "dict_size": 1 << 16, "lc": 0, "lp": 0, "pb": 0}] + + +class Blocks: + """the BLOCKS section, and the tables that point into it""" + def __init__(self): + self.raw = [] + + def place(self, entries, groups): + """entries (bytes) put in blocks, one per group of their indices -> u32 count, (block, offset) each""" + where = [None] * len(entries) + for g in groups: + data = bytearray() + for i in g: + where[i] = (len(self.raw), len(data)) + data += entries[i] + assert len(data) < 65536 + self.raw.append(bytes(data)) + return struct.pack(" limit or i in starts): + out.append(cur) + cur, n = [], 0 + cur.append(i) + n += sz + if cur: + out.append(cur) + return out def rgb565(r, g, b): @@ -517,11 +571,16 @@ def pack_room(area, r, tiles, strings): cols, rows = (gx1 - gx) // 20, (gy1 - gy) // 20 big = np.zeros((rows * 20, cols * 20), np.int32) big[y - gy:y - gy + h, x - gx:x - gx + w] = px - grid = bytearray() - for ty in range(rows): - for tx in range(cols): - block = big[ty * 20:ty * 20 + 20, tx * 20:tx * 20 + 20] - grid += struct.pack(" Date: Fri, 16 Oct 2026 04:57:38 +0000 Subject: [PATCH 08/19] Undertale: Waterfall, from Snowdin to the bridge Undyne cuts Waterfall's west half, cut from the wiki's map: Monster Kid, Sans's booth and the trip to Grillby's, the echo flowers, the stream's rocks and the tutu, Papyrus reporting to Undyne from the tall grass, the bridge seeds (pushed into the water they bloom into flowers to walk on; the bell calls them back; a secret bridge leads to the quiche), the wishing room and the history boardwalk, Undyne's spears to the hiding place in the grass, Sans's telescope, the Nice Cream cart and the punch card, the marsh and its ballet shoes, the bird over the gap, Onionsan, the piano's song and the artifact, the statue and the umbrellas, Monster Kid walking along under the umbrella to the view of the castle, and the bridge, where the game now ends. Its monsters, each spared its own way: Aaron (out-flexed), Woshua (ask to be cleaned, catch its green drop), Moldbygg (hug it, then let go) and Shyren (hum along). What everyone says is in short words of our own. The engine: objects that are floor (the bloomed seeds), pushed rocks that may go into water, and the entry nudge now sees the room's own floor. The packer: black ground counted only near its grass tufts (the marsh). The tests: a Waterfall walkthrough, its battles fled, fought and spared; Snowdin now leads on into Waterfall. --- README.md | 4 +- docs/play.md | 2 +- games/undertale/README.md | 31 +- games/undertale/docs/castle.png | Bin 0 -> 5208 bytes games/undertale/docs/echo.png | Bin 0 -> 5691 bytes games/undertale/docs/onionsan.png | Bin 0 -> 1548 bytes games/undertale/docs/seeds.png | Bin 0 -> 5967 bytes games/undertale/docs/shyren.png | Bin 0 -> 2225 bytes games/undertale/docs/spears.png | Bin 0 -> 3379 bytes games/undertale/docs/statue.png | Bin 0 -> 6649 bytes games/undertale/docs/woshua.png | Bin 0 -> 1781 bytes games/undertale/src/battle.h | 1 + games/undertale/src/bullets.c | 1 + games/undertale/src/data.bin | Bin 539244 -> 721797 bytes games/undertale/src/data.h | 133 +++-- games/undertale/src/events.c | 4 + games/undertale/src/events.h | 9 +- games/undertale/src/flags.h | 16 + games/undertale/src/items.c | 12 + games/undertale/src/items.h | 6 + games/undertale/src/menu.c | 2 +- games/undertale/src/menu.h | 2 +- games/undertale/src/monsters.h | 19 +- games/undertale/src/rooms.c | 10 +- games/undertale/src/snowmon.c | 14 +- games/undertale/src/snowtown.c | 25 +- games/undertale/src/text.c | 1 + games/undertale/src/text.h | 5 +- games/undertale/src/waterfall.h | 11 + games/undertale/src/wf1.c | 772 +++++++++++++++++++++++++++ games/undertale/src/wfmon.c | 284 ++++++++++ games/undertale/src/world.c | 28 +- games/undertale/src/world.h | 7 +- games/undertale/tests/check.py | 42 +- games/undertale/tests/play.c | 17 +- games/undertale/tests/waterfall.path | 235 ++++++++ games/undertale/tools/fetch.py | 6 + games/undertale/tools/pack.py | 22 + games/undertale/tools/rooms.py | 84 ++- games/undertale/tools/sprites.py | 77 ++- tools/release.py | 6 +- 41 files changed, 1789 insertions(+), 99 deletions(-) create mode 100644 games/undertale/docs/castle.png create mode 100644 games/undertale/docs/echo.png create mode 100644 games/undertale/docs/onionsan.png create mode 100644 games/undertale/docs/seeds.png create mode 100644 games/undertale/docs/shyren.png create mode 100644 games/undertale/docs/spears.png create mode 100644 games/undertale/docs/statue.png create mode 100644 games/undertale/docs/woshua.png create mode 100644 games/undertale/src/waterfall.h create mode 100644 games/undertale/src/wf1.c create mode 100644 games/undertale/src/wfmon.c create mode 100644 games/undertale/tests/waterfall.path diff --git a/README.md b/README.md index 437d185a..32cf907f 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins and Snowdin, from the golden flowers to the edge of Waterfall
Download + Undertale
Undertale

The Ruins, Snowdin and half of Waterfall, from the golden flowers to the bridge Undyne cuts
Download More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins and Snowdin are out, Waterfall, Hotland and New Home are next +- [ ] Undertale: the Ruins, Snowdin and half of Waterfall are out, the rest of Waterfall, Hotland and New Home are next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index ef4dfbcb..1774ce4e 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins and Snowdin. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. For now the game ends on the way out of Snowdin, at the edge of Waterfall. +Name the fallen human, then walk and talk your way through the Ruins, Snowdin and Waterfall. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. For now the game ends halfway through Waterfall, where Undyne cuts the bridge.
diff --git a/games/undertale/README.md b/games/undertale/README.md index e690080b..0160f77e 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins and Snowdin, from the bed of golden flowers to the edge of Waterfall. The rest of the Underground is on the way. + The Ruins, Snowdin and the first half of Waterfall, from the bed of golden flowers to the bridge Undyne cuts. The rest of the Underground is on the way.

@@ -24,8 +24,9 @@ * **The whole Ruins:** every room, from the golden flowers through Toriel's puzzles, the falling leaves, the spikes, the rocks, the cracked floors and the switches, to Toriel's home and the long corridor under it. * **Its people, with all they have to say:** Flowey, Toriel and her phone calls, Napstablook, the talking rock, the Froggits who give advice, the spider bake sale, the snail facts, and every sign, bookshelf and mirror. -* **Snowdin:** Sans and Papyrus, and every one of Papyrus's puzzles: the invisible electricity maze, the X and O tiles, the one on ice, the multicolor tiles and the Gauntlet. Then Snowdin Town, with its shop, inn, Grillby's, library and Papyrus's house. -* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin. +* **Snowdin:** Sans and Papyrus, and every one of Papyrus's puzzles: the invisible electricity maze, the X and O tiles, the one on ice, the multicolor tiles and the Gauntlet. Then Snowdin Town, with its shop, inn, library and Papyrus's house. +* **Waterfall's first half:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the bird over the gap, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg and Shyren in Waterfall. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -62,6 +63,22 @@ Papyrus's blue attack
Papyrus's blue attack Papyrus's room
Hanging out with Papyrus + + Monster Kid by an echo flower
Monster Kid, by the first echo flower + The bridge seeds
Bridge seeds bloom in the water + + + Undyne's spears
Undyne's spears on the boardwalk + Onionsan
Onionsan says hi + + + The statue in the rain
The statue in the rain + The castle far away
Monster Kid and the castle, far away + + + Woshua's green drop
Woshua's green drop heals + Shyren's notes
Shyren sings when you hum along + ## How to play @@ -72,6 +89,8 @@ Monsters jump out as you walk. In a battle, choose FIGHT to attack (press OK whe Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bottom of the box, and Up jumps over his bones. On ice you slide until something stops you. Snowdin Town's shop sells food and gear, and its inn gives you a night's rest. +In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. + Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. ## Controls @@ -87,15 +106,15 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **The Ruins and Snowdin, for now:** the way out of Snowdin ends the game, on a screen that says the rest of the Underground is still to come. Waterfall, Hotland and New Home come next, one at a time. +* **The Ruins, Snowdin and half of Waterfall, for now:** the bridge Undyne cuts ends the game, on a screen that says the rest of the Underground is still to come. The rest of Waterfall, Hotland and New Home come next, one at a time. * **No music or sound:** the calculator has no speaker. -* **The same Underground:** the rooms, pictures and words are the game's, and the puzzles and battles follow how the game plays them, at its 30 frames a second. +* **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. ## Credits Inspired by Undertale by Toby Fox, not affiliated with him. -* The maps, pictures and texts come from the [Undertale Wiki](https://undertale.fandom.com) and the game's free demo. +* The maps and pictures come from the [Undertale Wiki](https://undertale.fandom.com) and the game's free demo, and what's said follows them. * The **Pixel Operator** fonts are by Jayvee Enaguas, released into the public domain (CC0). * The LZMA decoder in `src/lzma` is by Igor Pavlov, in the public domain. diff --git a/games/undertale/docs/castle.png b/games/undertale/docs/castle.png new file mode 100644 index 0000000000000000000000000000000000000000..7585aea4b225b4da5ad0656356b68f5bff20d684 GIT binary patch literal 5208 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 jv=h<)P1ydQyUzvZ$*6> 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/shyren.png b/games/undertale/docs/shyren.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ba6cee56a18d5f173ff4c3225fca62dae166b0 GIT binary patch literal 2225 zcmZvcdpHy98^>p6%qh#Eg{wqJ$a0K`yw1n!$Are_kjPm!?`saD46!1IltaBEZ%BpA z95N}#oT}NfGFr~3g_neRC%wNve%J5$0D;X=iBy1)=uaa71K{~2Uz7@egw!iM)Hfadt@U(R$epLO4`i-{te}~5Mo-lmK<)7X6dV@yLN|NA`2OoG>GK8}h6G3k z2*KhOrF#8n=g4%>FDFrL9{sTuRH_Wmo*2M4CHQg?V~UOvFwc+YRSi}pVXpo|3h;{k zuHh>1{{Bk#VfE9aPFPlU`GN$@5ImlkS3G$ZRXU`n?Eyy25xkQFfb7z`-`|aMl$L;T ze7?MD;!Ba{sqLVSkK+4EGjTP+IAR}fQ*b7|`%_60qOyQpaFK3T+g`8|qbGio%IGQd zXexbC9AS-eVVpG+7MnE(b!>HE>}C2!Wr_IivcvH>gx&^+yKK~Oq9S1tJEJ$Sr1f-x zKs#X1#>FSZc|OAw1E)Sck#7u3hRbb8P4^<);!evj)P2WfYo@Or{83Io7!cv29_soK}rX^kei&i*5wc=EKqy)u7bv66?iq{ zKq8fa9&DNjsz_{ER6Yt97tQ@#nK9ggUL9vO7JNAlx^q#Wys1gByG^nlga)!D+Bzt! zjYo~c@q)2sgQo(IHpdM%+1~;{VdW#teXrOjc@yc-IlxbFh2pb(zh@R)kcow4$dju1 zH1X#>`!nvrMUZIjTQ4YVW45su9=$wl&W{4J88%J%E!N&21c0hGXUHK&`P;WBl%3`v zLvmyFu;f90e#P*>F4zP@aSwxEl<-gy5-sg`KLyE<)kQ!+R*xIpv#DcnJib)C5(MP; zXQ#w}B?h~Lz_E~@G-cS26{Vpad>+CHM}Yjhp#7Bim$qHdq`$aFfvm)2dHEz4)YoAw!uhq}x1UxX{dFdD!r~}VyRRY#<>`)MPe~o`CbzWevf);)q zHm2aH@(Ph*v+XF8rTk;%+`-dM8XS&ZJnN z+AY_TsPbT;!q@0r08lA{PExHXu5|XH$yCun5s*|Sr+(rcYzrWT0 zz2jd$TH@-Z)q;z~LSnqEUn{3)oBN%WP%$%NtZ7=o9Ut$JbGumQJAPxl)pf35ygM&F z@FgY8Elk4t*`zt~`+=m~<=JQH3k&xiY#LMGG;jn4BrXDnktO>xu2ac@(ndSZSm{&W!#|zKyxM@Q@t}M*NPVrg`Ws~P3DbKe$Z>Q4 z(Qhj}>DL>OY*T1%4bGg@+V;gZ`?01+LN{ux8GdbtFTb+aQCrKC!W&o>cdvyyGGpW& zxM|4xOIHxAXs_+Q{xWl0{nT0kFJ1DGH`hO5C?22mapQ8z zCfPYzG`?`ZE-T@UmV9t6G9YrIU2xx3of59sn<^Q~<0`w67cN_F>}By`2QS7VN^Zv> zysAT^#P}IKcYUTX8KxW=nLOGW*Tazr!m2TSH%pli!4~^gPhp&NZ5s_qhbSWtgmrqJ zq9n4j!syu?4OQM=g=tTRQI{Ai|Pl89+&-FejbMx!XD(ih#N-3)$)1aM%1a&EV4ORJJ@ZlkTr|Y z5gA-lYg*U%eb{-9bIF!JD=Pm>@Taa7!%l31mM<~w8~A;F+*ZUTLVIVQ21t9wCD3N; zy1ie7;w^kUu(ff1fC7;)gsUsAXt_+rdtqP4JnVU!fJC>q?PN$b-v7ZOqbDC3+zjm} zMBfbvrLbR47(N{$N+G18qNA1?cAR7Nx}}|f0r7U628+gF#dQ*ksPits?pq!G&=QR@ ziK_~Bj_L4!tH0*;kYH4Om#umD!=|a~w-6jCU;A3KxoNbBlaJ%tnJij1)73yu4jULj zys|olBhF|VhU7w(o_w`;mbcKi^QRMX+~n8!>2%>m!4u@tP*sp{3e~Kw>JL+ne?JUK iurHD$nee6}+?^{}6Q9$EfCy~t4vDR$lSQ>TD(N3PRR0_R literal 0 HcmV?d00001 diff --git a/games/undertale/docs/spears.png b/games/undertale/docs/spears.png new file mode 100644 index 0000000000000000000000000000000000000000..3c45dddc77d66a441ae1369d878498870356e936 GIT binary patch literal 3379 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/woshua.png b/games/undertale/docs/woshua.png new file mode 100644 index 0000000000000000000000000000000000000000..965bdcca7cb396f96d66e775bafea8b720cecc5f GIT binary patch literal 1781 zcmbtTdsNbA82(9$H_BXMUefHoQW9rr-bza)%b|sr)D#I=R42)p7(v;=lh=b%kxL0*6Nw* z0RXVp=cwmN0MKv;@dq6Uc&hyNxB>w5k&mZG09hy-4oBAWjaRlvo@5|<<33DMbfg}`&yx(BHEkV`o*<2yr$q)71qd$ z^SvUJRLAu+8s5Y3I`O*Q%@`Z{uEE%05JkR$)|};S#Cckz~atW>|*uqSgmw+hRb$5 zeRWNe?bHG=Pf+O7F>X}}tMjiy`_n#YEgM-nZfZP+A7H)s0WavRey~ZE8P?O7`DG?E zFDBAIomh53YjJjkSB0w5sN+(B4OpctJOfw*>FK`$weg^)TeRs{U<|#r{%O(Q)|ram zg{Xy9JZsu&12!}HFaH9`%D^lw(9@RRH?N0BTKTAU4%ihS_aLpnsx=T81f~N*E3SJ6 z^bnA+uyl*0QZ1#;*yXJR_nZB{QRtM_S{)6YB!U9{96b!TB-221ABYW!R`4-HJF?THuMH}RFHqDDI4f~ zth7QM^D+tezss733Ayg<0rKKXX720ggSw=NijRO0aRma;5fA2)P2Kc=ItC%m6SK3z-F(c3UCEvw2Hl~X7N-q;q#~0r_OTvEQY=eK6dStYM z<1vtMW7>W^zP@(GcsZRPX5g{HCXGj!M@{LuT2cq14=lTK@LB6pdx}^wHGR2DQS;Ee zdyrt!Zx+1i?S-kNQJvV;`%~)(oKx}TY`4>h8y0O(9lM`n-rnCrD2^lczRr2%6ec)( z5^2;zc2MWJw@;)-TmCq_gBLWo6n}RjIZNTNEb%2ve2-Bu-*Fv-D*4>ZTdZ^S3&A!I zCOpq68V)UKk~YK`zhoLUYkvq2N;F)K)??0V41i_dTlPuXiylEIXG~R9Zgy?ch-UFJ;;~|9KPvVTa|uC4QF#80a-rxB zy3ua4HOr68jxB7NpG?RJZMrdxXiA)KmtJGZ4H?hw;Ma-k_-{Y2A7T1MvYyP>(ap6< z7l;EUbH`n~<`6{Tk)Xn~BL@{lnOqO2SK=f6F~#Ea5=XsCZ8YnS<*uwOUF3GcK)V5> k*Tq}eE#cTTYXelmia~phM94n709S8`j~Cjr@o;3upP%g>u>b%7 literal 0 HcmV?d00001 diff --git a/games/undertale/src/battle.h b/games/undertale/src/battle.h index 05a57dcc..75e8ff34 100644 --- a/games/undertale/src/battle.h +++ b/games/undertale/src/battle.h @@ -109,6 +109,7 @@ typedef struct Battle { int phase, t; Monster mon[MAX_MON]; int nmon; + int greens; /* green (healing) bullets the SOUL caught this battle */ int button, target, act, item, mercy, page; Writer w; /* the box's text */ char text[600]; diff --git a/games/undertale/src/bullets.c b/games/undertale/src/bullets.c index a34f7f5f..489b926a 100644 --- a/games/undertale/src/bullets.c +++ b/games/undertale/src/bullets.c @@ -177,6 +177,7 @@ bool soul_hit_test(void) { if (b->color == BC_GREEN) { sv.hp = (int16_t)min_i(sv.maxhp, sv.hp + (b->dmg ? b->dmg : 1)); b->kind = BK_NONE; + bt.greens++; continue; } if (bt.inv) continue; diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index 2833d11aa1b70669a957ebc59f0900a6df4fe0bf..0d14c6e7453772c6211b598332b207aa9ba7525e 100644 GIT binary patch delta 150313 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

88BFS$X{ydQOj^Pi-m)`UE?wn8l9Sq~P9~%Df zIJeMHXxNi*!#z-+XTP!!U5AM_2zVk5Scc47HkmG2eOoa1iT-vU-=}$y22AcjHexSPP7bLir={LcrVW!^~66;cJ z;5%z0ynbItn*Iu@ZX?s5u(mbv=z^Ph_fy>#rr*g{B$|G2H}3Nou5D}jXZTrrQ|(58 zg`G^lH;?aX`km=`chesgNj*)ql>1-yGW{yA-N)p2)Y$p-^#-iyXZoY2)zhZmbcdfY z{Ti)&*7WO0je*ZX6 zfXoS|KkQzZZ2EmEZ;I)QZ`Em<={Mb9sh(i9sCcvae$Fh@=aj_%+onJFJ9AC{>eXqU zC;6B(Px3+Yz3Z(DOn-_l{K#Wa`xDb2Mpr*I{XVlO-Sm5R6a>TQF*l}+{4nN3M?u-AT(3N1`lBNGoatYN-_P@A+Vi4!KjpF~SfeYZ-+BKj@MgNG(3@G8BJcZGiak@@ zzTr9HZ#PZ9Q!l#ZIqCe{Ci=%)AG+fWu%*J2tbe7a$_~o%t2ExQ_?bykt!?@1fd*`6 ze09ONs+7R=KUCfFuabjmTK?#GsFvk-uAQ|le;#=*-14uo6Y5$1iYPt8;%D#JRW-C+ z|BNR^S^gA!tC7WT81ha~6HE1`4T`b+rf_0C2J7N1zc>Hc((-4tf08_gFWu+SzthGW z*l6qZ8`aM8o9g=qEx+kvI#~Wp`$R{}9}T$=xt71sc(t?TFQxwLV)>WJm`5zXcjt7o z{B{419vvcmuvX z(9_flgDro8N_yyd%fD<^ALh-ZVz}iG#|tAYf9)4O%JRp3_GoX$JH~j|D^hq8XTGz2 qrMYGMN^5ABcb-qOfdc|Sl`YRF1@>zY^issa_E$gObnk3n3-x~&R#nCT diff --git a/games/undertale/src/data.h b/games/undertale/src/data.h index 3080f83f..31099127 100644 --- a/games/undertale/src/data.h +++ b/games/undertale/src/data.h @@ -184,49 +184,75 @@ #define SPR_PAPYRUS_B 170 #define SPR_PAPYRUS_HURT 171 #define SPR_PAPYRUS_CONFUSED 172 -#define SPR_INTROIMAGE 173 -#define SPR_INTROLAST 174 -#define SPR_UNDERTALETITLE 175 -#define SPR_GAMEOVERBG 176 -#define SPR_FACE_TORIELTALK 177 -#define SPR_FACE_TORIELTALKSIDE 178 -#define SPR_FACE_TORIELHAPPYTALK 179 -#define SPR_FACE_TORIELWHAT 180 -#define SPR_FACE_TORIELWHATSIDE 181 -#define SPR_FACE_TORIELMAD 182 -#define SPR_FACE_TORIELCOLD 183 -#define SPR_FACE_TORIELSURPRISED 184 -#define SPR_FACE_TORIELEMBARRASSED 185 -#define SPR_FACE_TORIELGLASSES 186 -#define SPR_FACE_TORIELREVENGETALK 187 -#define SPR_FACE_TORIELSCARED 188 -#define SPR_FACE_TORIELBLINK 189 -#define SPR_FACE_TORIELHAPPYBLINK 190 -#define SPR_FACE_TORIELBODY 191 -#define SPR_FACE_SANS 192 -#define SPR_FACE_SANSCHUCKLE 193 -#define SPR_FACE_SANSWINK 194 -#define SPR_FACE_PAPYRUS 195 -#define SPR_FACE_PAPYRUSEVIL 196 -#define SPR_FACE_PAPYRUSLAUGH 197 -#define SPR_FACE_PAPYRUSMAD 198 -#define SPR_FACE_PAPYRUSSIDE 199 -#define SPR_FLOWEYNICE 200 -#define SPR_FLOWEYNICESIDE 201 -#define SPR_FLOWEYSASSY 202 -#define SPR_FLOWEYEVIL 203 -#define SPR_FLOWEYGRIN 204 -#define SPR_FLOWEYPLAIN 205 -#define SPR_FLOWEYPISSED 206 -#define SPR_FLOWEYWINK 207 -#define SPR_FLOWEYLAUGH 208 -#define SPR_FLOWEYHURT 209 -#define SPR_FLOWEYTORIEL 210 -#define SPR_FLOWEYTORIEL2 211 -#define SPR_FLOWEYSIDESHOCK 212 +#define SPR_MK_OW 173 +#define SPR_MK_OW_L 174 +#define SPR_UNDYNE_OW 175 +#define SPR_UNDYNE_THROW 176 +#define SPR_ONIONSAN 177 +#define SPR_ONIONSAN_UP 178 +#define SPR_SHYREN_OW 179 +#define SPR_AARON_OW 180 +#define SPR_WOSHUA_OW 181 +#define SPR_SEED 182 +#define SPR_BLOOM 183 +#define SPR_TUTU 184 +#define SPR_ARTIFACT 185 +#define SPR_SPEAR 186 +#define SPR_NOTE 187 +#define SPR_DROP 188 +#define SPR_ARM 189 +#define SPR_DEBRIS 190 +#define SPR_AARON_B 191 +#define SPR_AARON_HURT 192 +#define SPR_WOSHUA_B 193 +#define SPR_WOSHUA_HURT 194 +#define SPR_MOLDBYGG_B 195 +#define SPR_SHYREN_B 196 +#define SPR_SHYREN_TURNED 197 +#define SPR_INTROIMAGE 198 +#define SPR_INTROLAST 199 +#define SPR_UNDERTALETITLE 200 +#define SPR_GAMEOVERBG 201 +#define SPR_FACE_TORIELTALK 202 +#define SPR_FACE_TORIELTALKSIDE 203 +#define SPR_FACE_TORIELHAPPYTALK 204 +#define SPR_FACE_TORIELWHAT 205 +#define SPR_FACE_TORIELWHATSIDE 206 +#define SPR_FACE_TORIELMAD 207 +#define SPR_FACE_TORIELCOLD 208 +#define SPR_FACE_TORIELSURPRISED 209 +#define SPR_FACE_TORIELEMBARRASSED 210 +#define SPR_FACE_TORIELGLASSES 211 +#define SPR_FACE_TORIELREVENGETALK 212 +#define SPR_FACE_TORIELSCARED 213 +#define SPR_FACE_TORIELBLINK 214 +#define SPR_FACE_TORIELHAPPYBLINK 215 +#define SPR_FACE_TORIELBODY 216 +#define SPR_FACE_SANS 217 +#define SPR_FACE_SANSCHUCKLE 218 +#define SPR_FACE_SANSWINK 219 +#define SPR_FACE_PAPYRUS 220 +#define SPR_FACE_PAPYRUSEVIL 221 +#define SPR_FACE_PAPYRUSLAUGH 222 +#define SPR_FACE_PAPYRUSMAD 223 +#define SPR_FACE_PAPYRUSSIDE 224 +#define SPR_FLOWEYNICE 225 +#define SPR_FLOWEYNICESIDE 226 +#define SPR_FLOWEYSASSY 227 +#define SPR_FLOWEYEVIL 228 +#define SPR_FLOWEYGRIN 229 +#define SPR_FLOWEYPLAIN 230 +#define SPR_FLOWEYPISSED 231 +#define SPR_FLOWEYWINK 232 +#define SPR_FLOWEYLAUGH 233 +#define SPR_FLOWEYHURT 234 +#define SPR_FLOWEYTORIEL 235 +#define SPR_FLOWEYTORIEL2 236 +#define SPR_FLOWEYSIDESHOCK 237 #define AREA_RUINS 0 #define AREA_SNOWDIN 1 #define AREA_SNOWTOWN 2 +#define AREA_WATERFALL 3 #define ROOM_AREA1 0 #define ROOM_AREA1_2 1 #define ROOM_RUINS1 2 @@ -312,10 +338,33 @@ #define ROOM_PAPROOM 82 #define ROOM_SANSROOM 83 #define ROOM_SHED 84 +#define ROOM_WF1 85 +#define ROOM_WF_FALLS 86 +#define ROOM_WF_FALLS_LOW 87 +#define ROOM_WF2 88 +#define ROOM_WF_SEEDS1 89 +#define ROOM_WF_SEEDS2 90 +#define ROOM_WF_QUICHE 91 +#define ROOM_WF_WISH 92 +#define ROOM_WF_HIST 93 +#define ROOM_WF_CHASE1 94 +#define ROOM_WF_GRASS1 95 +#define ROOM_WF_SANS2 96 +#define ROOM_WF_MARSH_TOP 97 +#define ROOM_WF_MARSH_MID 98 +#define ROOM_WF_MARSH 99 +#define ROOM_WF_ONION 100 +#define ROOM_WF_PIANO 101 +#define ROOM_WF_STATUE 102 +#define ROOM_WF_RAIN1 103 +#define ROOM_WF_RAIN2 104 +#define ROOM_WF_CASTLE 105 +#define ROOM_WF_AARON 106 +#define ROOM_WF_BRIDGE 107 #define FONT_MAIN 0 #define FONT_MENU 1 #define FONT_SMALL 2 -#define NUM_SPRITES 213 -#define NUM_ROOMS 85 +#define NUM_SPRITES 238 +#define NUM_ROOMS 108 #define NUM_FONTS 3 #endif diff --git a/games/undertale/src/events.c b/games/undertale/src/events.c index 1cd5d96d..8f00b765 100644 --- a/games/undertale/src/events.c +++ b/games/undertale/src/events.c @@ -8,6 +8,7 @@ #include "menu.h" #include "ruins.h" #include "snowdin.h" +#include "waterfall.h" static int ev_sign(Ev *c) { EV_BEGIN; @@ -87,6 +88,7 @@ static int ev_encounter(Ev *c) { g_exclaim = 0; BATTLE(c->v[0]); snow_battle_done(c->v[0]); + wf_battle_done(c->v[0]); EV_END; } @@ -109,5 +111,7 @@ int event_run(Ev *c) { if (r >= 0) return r; r = town_event(c); if (r >= 0) return r; + r = wf1_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index 5d8c3adc..8bedff15 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -8,7 +8,9 @@ enum { ACTOR_CANDY, ACTOR_TRIGGER, ACTOR_TRIGGER2, ACTOR_ITEM, ACTOR_CHAIR, ACTOR_PIE, ACTOR_ANY, /* Snowdin */ ACTOR_SANS, ACTOR_PAPYRUS, ACTOR_DOGGO, ACTOR_DOGAMY, ACTOR_DOGARESSA, ACTOR_GREATERDOG, ACTOR_BALL, ACTOR_ORB, - ACTOR_TILE, ACTOR_DOG, ACTOR_BLOCK, ACTOR_TRIGGER3 + ACTOR_TILE, ACTOR_DOG, ACTOR_BLOCK, ACTOR_TRIGGER3, + /* Waterfall */ + ACTOR_MK, ACTOR_UNDYNE, ACTOR_SEED, ACTOR_BLOOM, ACTOR_SPEAR, ACTOR_ONION, ACTOR_DEBRIS, ACTOR_SHYREN }; enum { @@ -32,7 +34,10 @@ enum { EV_SNOW_SWITCH, EV_DOGI, EV_XOXO_SWITCH, EV_PAP_XOXO, EV_TILES, EV_XOXO_FALL, EV_TREESLIDE, EV_POFF, EV_GREATERDOG, EV_GAUNTLET, EV_MYSTERY_DOOR, EV_SNOW_SANS_CLIFF, /* snowtown.c */ - EV_SHOP, EV_INN, EV_GRILLBYS, EV_PAP_FIGHT, EV_PAP_HOUSE, EV_PAP_DATE, EV_TOWN_DOOR, EV_SNOW_END, EV_COUCH, + EV_SHOP, EV_INN, EV_GRILLBYS, EV_PAP_FIGHT, EV_PAP_HOUSE, EV_PAP_DATE, EV_TOWN_DOOR, EV_COUCH, + /* wf1.c */ + EV_WF_MK, EV_WF_ITEM, EV_WF_STREAM_FALL, EV_WF_UNDYNE1, EV_BELL, EV_WF_GRASS, EV_WF_TELESCOPE, EV_WF_BIRD, + EV_WF_ONION, EV_PIANO, EV_SHYREN, EV_STATUE, EV_UMBRELLA, EV_MK_RAIN, EV_MK_TALK, EV_WF_BRIDGE_END, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index 32cb3e18..7628330c 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -95,6 +95,22 @@ enum { F_FISH, /* the fishing rod's note read */ F_SHOP_TALK, F_SNOWDRAKE_DEAD, /* (then Chilldrake comes instead) */ + /* Waterfall */ + F_WF_MK, /* Monster Kid met by the first echo flower */ + F_WF_GRILLBYS, /* Sans took Frisk to Grillby's from his station */ + F_WF_TUTU, F_WF_QUICHE, F_WF_BALLET, F_WF_PUNCH, F_WF_ARTIFACT, /* found */ + F_WF_UNDYNE1, /* Undyne seen from the tall grass */ + F_SEEDS1, F_SEEDS2, F_SEEDS3, /* the bridges of bridge seeds, made */ + F_CHASE1, /* Undyne's first chase, over */ + F_WF_TELESCOPE, + F_WF_ONION, /* 1 met, 2 parted */ + F_PIANO, /* its song played: the door is open */ + F_UMBRELLA, /* 1 carried, 2 left with the statue */ + F_MK_RAIN, /* Monster Kid walked with Frisk in the rain */ + F_SHYREN, /* 1 spared, 2 killed */ + F_WF_BRIDGE, /* the bridge cut: Frisk fell */ + F_KILLS_WATERFALL, + F_WF_BIRD, FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/items.c b/games/undertale/src/items.c index ee0241da..4302e410 100644 --- a/games/undertale/src/items.c +++ b/games/undertale/src/items.c @@ -34,6 +34,14 @@ static const ItemInfo items[ITEM_COUNT] = { "* You ate the Unisicle.", 2}, [ITEM_CINNAMON_BUNNY] = {"Cinnamon Bunny", "CinnaBun", IT_FOOD, 22, 0, 0, "A cinnamon roll in the\n shape of a bunny.", "* You eat the Cinnamon Bunny.", 8}, + [ITEM_OLD_TUTU] = {"Old Tutu", "Old Tutu", IT_ARMOR, 0, 0, 10, "A dusty frilly skirt.\n* Still holds up well.", "", 80}, + [ITEM_BALLET_SHOES] = {"Ballet Shoes", "BallShoes", IT_WEAPON, 0, 7, 0, "Worn dancing shoes.\n* Too big for you.", "", 80}, + [ITEM_QUICHE] = {"Abandoned Quiche", "Quiche", IT_FOOD, 34, 0, 0, "A quiche someone left\n under a bench.", + "* You eat the quiche.", 76}, + [ITEM_PUNCH_CARD] = {"Punch Card", "PunchCard", IT_SPECIAL, 0, 0, 0, "A card for a game nobody\n plays anymore.", + "* You look at the punch card.\n* It makes you want to punch\n something.", 15}, + [ITEM_ARTIFACT] = {"Legendary Artifact", "Artifact", IT_SPECIAL, 0, 0, 0, "A mysterious orb.\n* It's a little heavy.", + "* You hold the orb up.\n* Nothing happens.", 0}, }; const ItemInfo *item_info(int id) { return &items[id >= 0 && id < ITEM_COUNT ? id : 0]; } @@ -46,6 +54,7 @@ void item_info_text(int id, char *out, int cap) { if (id == ITEM_BANDAGE) snprintf(out, (size_t)cap, "* \"%s\" - Heals %d HP\n* %s", it->name, it->heal, it->info); else snprintf(out, (size_t)cap, "* \"%s\" - Armor DF %d\n* %s", it->name, it->df, it->info); break; + case IT_SPECIAL: snprintf(out, (size_t)cap, "* \"%s\"\n* %s", it->name, it->info); break; default: if (it->heal >= 998) snprintf(out, (size_t)cap, "* \"%s\" - Heals ALL HP\n* %s", it->name, it->info); else snprintf(out, (size_t)cap, "* \"%s\" - Heals %d HP\n* %s", it->name, it->heal, it->info); @@ -92,6 +101,9 @@ void item_use(int slot, char *out, int cap, int in_battle) { snprintf(out, (size_t)cap, "* You equipped the %s.", it->name); return; } + case IT_SPECIAL: /* looked at, kept */ + snprintf(out, (size_t)cap, "%s", it->use); + return; default: { int n = snprintf(out, (size_t)cap, "%s", it->use); if (id == ITEM_NICE_CREAM) { /* its wrapper's kind words */ diff --git a/games/undertale/src/items.h b/games/undertale/src/items.h index 33abf15a..a2fd470e 100644 --- a/games/undertale/src/items.h +++ b/games/undertale/src/items.h @@ -22,6 +22,12 @@ enum { ITEM_BISICLE, ITEM_UNISICLE, ITEM_CINNAMON_BUNNY, + /* Waterfall */ + ITEM_OLD_TUTU, + ITEM_BALLET_SHOES, + ITEM_QUICHE, + ITEM_PUNCH_CARD, + ITEM_ARTIFACT, ITEM_COUNT }; enum { IT_FOOD, IT_WEAPON, IT_ARMOR, IT_SPECIAL }; diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index 01d2f3f7..97c29a61 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -368,7 +368,7 @@ void menu_gameover_open(void) { void menu_end_open(void) { g_mode = MODE_END; t = 0; - writer_start(&w, "Snowdin is behind you.|The rest of the underground\nis still to come...", 52, 100, FONT_MAIN); + writer_start(&w, "You fall into the dark below\nthe bridge...|The rest of Waterfall,\nand the underground beyond,\nare still to come...", 40, 90, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/menu.h b/games/undertale/src/menu.h index 08c3e1b7..28da811b 100644 --- a/games/undertale/src/menu.h +++ b/games/undertale/src/menu.h @@ -6,7 +6,7 @@ void menu_title_open(void); void menu_open(void); void menu_save_open(void); void menu_gameover_open(void); -void menu_end_open(void); /* the way out of Snowdin: what comes next isn't made yet */ +void menu_end_open(void); /* the fall from Waterfall's bridge: what comes next isn't made yet */ void menu_update(uint32_t keys, uint32_t pressed); void menu_draw(void); void game_new(const char *name); diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h index 7820bf25..755879d1 100644 --- a/games/undertale/src/monsters.h +++ b/games/undertale/src/monsters.h @@ -8,7 +8,9 @@ enum { MON_NAPSTABLOOK, MON_TORIEL, MON_FLOWEY, MON_RUINS_COUNT, /* Snowdin (snowmon.c, papyrus.c) */ MON_SNOWDRAKE = MON_RUINS_COUNT, MON_ICECAP, MON_GYFTROT, MON_DOGGO, MON_LESSERDOG, MON_DOGAMY, MON_DOGARESSA, - MON_GREATERDOG, MON_JERRY, MON_CHILLDRAKE, MON_GLYDE, MON_PAPYRUS, MON_COUNT + MON_GREATERDOG, MON_JERRY, MON_CHILLDRAKE, MON_GLYDE, MON_PAPYRUS, MON_SNOW_COUNT, + /* Waterfall (wfmon.c) */ + MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_COUNT }; /* formations: who is fought */ @@ -19,7 +21,10 @@ enum { /* Snowdin */ FORM_SNOWDRAKE = FORM_RUINS_COUNT, FORM_ICECAP, FORM_LESSERDOG, FORM_CHILLDRAKE, FORM_ICECAP_JERRY, FORM_ICECAP_JERRY_SNOWDRAKE, FORM_ICECAP_JERRY_CHILLDRAKE, FORM_GYFTROT, FORM_GLYDE, FORM_DOGGO, FORM_DOGI, - FORM_GREATERDOG, FORM_PAPYRUS, FORM_COUNT + FORM_GREATERDOG, FORM_PAPYRUS, FORM_SNOW_COUNT, + /* Waterfall */ + FORM_AARON = FORM_SNOW_COUNT, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, + FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_COUNT }; enum { @@ -30,7 +35,10 @@ enum { /* Snowdin */ ATK_DRAKE_ARCS = ATK_RUINS_COUNT, ATK_DRAKE_LINES, ATK_ICECAP_HATS, ATK_ICECAP_WAVES, ATK_GYFT_PRESENTS, ATK_GYFT_SNOW, ATK_DOGGO_SWORD, ATK_LDOG_JUMP, ATK_LDOG_SPEARS, ATK_DOGI_AXES, ATK_DOGI_HEARTS, ATK_GDOG_SPEAR, - ATK_GDOG_BARK, ATK_GLYDE_STARS, ATK_PAP_FIRST, ATK_PAP_LAST = ATK_PAP_FIRST + 24, ATK_COUNT + ATK_GDOG_BARK, ATK_GLYDE_STARS, ATK_PAP_FIRST, ATK_PAP_LAST = ATK_PAP_FIRST + 24, ATK_SNOW_COUNT, + /* Waterfall */ + ATK_AARON_ARMS = ATK_SNOW_COUNT, ATK_AARON_SWEAT, ATK_WOSHUA_DROPS, ATK_WOSHUA_BUBBLES, ATK_MOLDBYGG_HOPS, + ATK_MOLDBYGG_RAIN, ATK_SHYREN_NOTES, ATK_COUNT }; /* a formation: up to three monsters, and what the first turn says */ @@ -46,4 +54,9 @@ void snow_attack_run(struct Battle *b, int atk, int t); void snow_attack_draw(struct Battle *b, int atk, int t); int snow_attack_length(int atk); int snow_encounter(int room); /* a random encounter's formation there, -1 none */ +const Form *wf_form(int form); /* wfmon.c */ +const struct MonDef *wf_mon_def(int id); +void wf_attack_run(struct Battle *b, int atk, int t); +int wf_attack_length(int atk); +int wf_encounter(int room); #endif diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index 2f8cf1f0..46a6c038 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -7,6 +7,7 @@ #include "monsters.h" #include "ruins.h" #include "snowdin.h" +#include "waterfall.h" #include "world.h" void room_setup(int room, int from) { @@ -16,6 +17,7 @@ void room_setup(int room, int from) { snow1_setup(room, from); snow2_setup(room, from); town_setup(room, from); + wf1_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ @@ -23,6 +25,7 @@ void room_update(void) { ruins2_update(); snow1_update(); snow2_update(); + wf1_update(); } /* what a room draws on its floor, under everything (world.c) */ @@ -31,6 +34,10 @@ void room_draw_floor(void) { snow2_draw(); } +/* a pushed rock that may go where Frisk can't (a bridge seed into the water), and what happens once it has */ +bool room_rock_enters(Obj *o, int x, int y) { return wf_seed_enters(o, x, y); } +void room_rock_moved(Obj *o) { wf_seed_moved(o); } + bool room_ice(int x, int y) { const RoomInfo *ri = world_room_info(); if (!ri || !ri->ice) return false; @@ -67,8 +74,9 @@ void encounter_step(void) { const Encounters *e = NULL; for (unsigned i = 0; i < sizeof enc / sizeof enc[0]; i++) if (enc[i].room == g_room) e = &enc[i]; - /* Snowdin's are snowmon.c's (who comes depends on what's happened) */ + /* Snowdin's and Waterfall's are snowmon.c's and wfmon.c's (who comes depends on what's happened) */ int snow = e ? -1 : snow_encounter(g_room); + if (!e && snow < 0) snow = wf_encounter(g_room); if (!e && snow < 0) return; if (--steps_left > 0) return; steps_left = 100 + rnd_n(200); diff --git a/games/undertale/src/snowmon.c b/games/undertale/src/snowmon.c index 1a7bbc40..f6d7e01c 100644 --- a/games/undertale/src/snowmon.c +++ b/games/undertale/src/snowmon.c @@ -510,7 +510,7 @@ static int attack_glyde(Battle *b, Monster *m) { (void)b, (void)m; return ATK_GL /* ---------------------------------------------------------------- the table */ extern const MonDef papyrus_def; /* papyrus.c */ -static const MonDef snow_defs[MON_COUNT - MON_RUINS_COUNT] = { +static const MonDef snow_defs[MON_SNOW_COUNT - MON_RUINS_COUNT] = { [MON_SNOWDRAKE - MON_RUINS_COUNT] = { .name = "Snowdrake", .spare_gold = 12, .hp = 74, .at = 6, .df = 2, .exp = 22, .gold = 18, .spr_idle = SPR_SNOWDRAKE_B, .spr_hurt = SPR_SNOWDRAKE_HURT, .idle_speed = 8, .check = "This teen comedian fights to keep a captive audience.", @@ -595,11 +595,12 @@ static const MonDef snow_defs[MON_COUNT - MON_RUINS_COUNT] = { .act = act_glyde, .talk = talk_glyde, .attack = attack_glyde}, }; const MonDef *snow_mon_def(int id) { + if (id >= MON_SNOW_COUNT) return wf_mon_def(id); if (id == MON_PAPYRUS) return &papyrus_def; return &snow_defs[id - MON_RUINS_COUNT]; } -static const Form snow_forms[FORM_COUNT - FORM_RUINS_COUNT] = { +static const Form snow_forms[FORM_SNOW_COUNT - FORM_RUINS_COUNT] = { [FORM_SNOWDRAKE - FORM_RUINS_COUNT] = {{MON_SNOWDRAKE}, 1, "* Snowdrake flutters forth!"}, [FORM_ICECAP - FORM_RUINS_COUNT] = {{MON_ICECAP}, 1, "* Icecap struts into view."}, [FORM_LESSERDOG - FORM_RUINS_COUNT] = {{MON_LESSERDOG}, 1, "* Lesser Dog appears."}, @@ -616,7 +617,7 @@ static const Form snow_forms[FORM_COUNT - FORM_RUINS_COUNT] = { [FORM_GREATERDOG - FORM_RUINS_COUNT] = {{MON_GREATERDOG}, 1, "* It's the Greater Dog."}, [FORM_PAPYRUS - FORM_RUINS_COUNT] = {{MON_PAPYRUS}, 1, "* Papyrus blocks the way!"}, }; -const Form *snow_form(int form) { return &snow_forms[form - FORM_RUINS_COUNT]; } +const Form *snow_form(int form) { return form >= FORM_SNOW_COUNT ? wf_form(form) : &snow_forms[form - FORM_RUINS_COUNT]; } /* random encounters: the wiki's pools (no more of them once Papyrus is spared with no one killed here) */ int snow_encounter(int room) { @@ -835,7 +836,7 @@ static void atk_glyde_stars(int t) { } } -static const int16_t snow_lengths[ATK_COUNT - ATK_RUINS_COUNT] = { +static const int16_t snow_lengths[ATK_SNOW_COUNT - ATK_RUINS_COUNT] = { [ATK_DRAKE_ARCS - ATK_RUINS_COUNT] = 150, [ATK_DRAKE_LINES - ATK_RUINS_COUNT] = 150, [ATK_ICECAP_HATS - ATK_RUINS_COUNT] = 150, [ATK_ICECAP_WAVES - ATK_RUINS_COUNT] = 180, [ATK_GYFT_PRESENTS - ATK_RUINS_COUNT] = 170, [ATK_GYFT_SNOW - ATK_RUINS_COUNT] = 160, @@ -849,6 +850,7 @@ void papyrus_attack(int atk, int t); void papyrus_attack_draw(int atk, int t); int snow_attack_length(int atk) { + if (atk >= ATK_SNOW_COUNT) return wf_attack_length(atk); if (atk >= ATK_PAP_FIRST && atk <= ATK_PAP_LAST) return papyrus_attack_length(atk); int n = snow_lengths[atk - ATK_RUINS_COUNT] ? snow_lengths[atk - ATK_RUINS_COUNT] : 150; /* Jerry makes attacks 2 seconds longer */ @@ -858,6 +860,10 @@ int snow_attack_length(int atk) { } void snow_attack_run(Battle *b, int atk, int t) { + if (atk >= ATK_SNOW_COUNT) { + wf_attack_run(b, atk, t); + return; + } (void)b; if (t < 0) return; switch (atk) { diff --git a/games/undertale/src/snowtown.c b/games/undertale/src/snowtown.c index ee327ff1..32770352 100644 --- a/games/undertale/src/snowtown.c +++ b/games/undertale/src/snowtown.c @@ -50,10 +50,6 @@ void town_setup(int room, int from) { if (flag(F_PAPYRUS) == 1) { Obj *p = obj_papyrus(2190, 1100, DIR_DOWN); if (p) p->event = EV_PAP_HOUSE, p->flags |= OF_TALK; - if (!flag(F_GRILLBYS)) { - Obj *s = obj_sans(1290, 1104, DIR_DOWN); - if (s) s->event = EV_GRILLBYS, s->flags |= OF_TALK; - } } folk(1099, 1093, "* Hey, another kid!|* Someday I'll watch Undyne\n fight. She's the best!"); break; @@ -125,7 +121,6 @@ void town_setup(int room, int from) { break; case ROOM_FOGROOM: if (!flag(F_PAPYRUS)) obj_trigger(3290, 1030, 30, 150, EV_PAP_FIGHT, ACTOR_TRIGGER); - obj_trigger(3596, 1040, 24, 140, EV_SNOW_END, ACTOR_TRIGGER2); break; } } @@ -261,7 +256,12 @@ static int ev_pap_date(Ev *c) { static int ev_grillbys(Ev *c) { EV_BEGIN; - SAY(FACE_SANS, "* hey.\n* thanks for keeping my brother entertained.|* want to grab some lunch?@Sure@Not now"); + /* (from his station in Waterfall) */ + if (flag(F_GRILLBYS)) { + SAY(FACE_SANS, "* i'm on another break.\n* from my other break."); + return 1; + } + SAY(FACE_SANS, "* hey. i'm on break.\n* want to grab some food at grillby's?@Sure@Not now"); if (CHOICE() == 1) { SAY(FACE_SANS, "* ok. maybe later."); return 1; @@ -271,17 +271,7 @@ static int ev_grillbys(Ev *c) { SAY(FACE_SANS, "* here's a good seat.|* so, what'll it be?\n`2* fries or burger?@Fries@Burger"); SAY(FACE_SANS, "* nice.|* say... papyrus says a #Yflower#X talks to him sometimes.\n* gives him advice. weird, right?|* if you see a talking flower, tell me, ok?|`1* oh, and thanks for paying."); set_flag(F_GRILLBYS, 1); - FADE_TO(ROOM_SNOWTOWN, 1310, 1096, DIR_DOWN); - EV_END; -} - -static int ev_snow_end(Ev *c) { - EV_BEGIN; - /* on to Waterfall: not made yet */ - set_flag(F_SNOW_EXIT, 1); - sv.room = (int16_t)g_room, sv.x = (int16_t)(pl.x - 20), sv.y = pl.y; - save_write_auto(); - menu_end_open(); + FADE_TO(ROOM_WF1, 880, 1458, DIR_DOWN); EV_END; } @@ -306,7 +296,6 @@ int town_event(Ev *c) { case EV_PAP_HOUSE: return ev_pap_house(c); case EV_PAP_DATE: return ev_pap_date(c); case EV_GRILLBYS: return ev_grillbys(c); - case EV_SNOW_END: return ev_snow_end(c); case EV_COUCH: return ev_couch(c); } return -1; diff --git a/games/undertale/src/text.c b/games/undertale/src/text.c index a41ede6e..7d5f91b0 100644 --- a/games/undertale/src/text.c +++ b/games/undertale/src/text.c @@ -287,6 +287,7 @@ void text_open_menu(const char *const *opts, int n) { bool text_active(void) { return box_open; } int text_choice(void) { return last_choice; } +int text_menu_cols(void) { return menu_cols; } int text_menu_sel(void) { return box_open && menu_opts ? menu_sel : box_open && box.choices && box.done ? 100 + box.choice : -1; } void text_update(uint32_t pressed) { diff --git a/games/undertale/src/text.h b/games/undertale/src/text.h index d4c17127..96575db8 100644 --- a/games/undertale/src/text.h +++ b/games/undertale/src/text.h @@ -52,8 +52,9 @@ void text_update(uint32_t pressed); void text_draw(void); int text_choice(void); /* 0 or 1: the last choice made (a list's: its index, -1 Back) */ void text_open_menu(const char *const *opts, int n); /* a list of options in the box */ -void text_set_top(int top); +void text_set_top(int top); /* -1: by where Frisk is (the game's way), 0 bottom, 1 top */ void text_wrap_width(int w); /* where the next writer's lines wrap (pixels from its left) */ -int text_menu_sel(void); /* (the tests) a list's selection, 100 + a page's choice, -1 neither open */ /* -1: by where Frisk is (the game's way), 0 bottom, 1 top */ +int text_menu_sel(void); /* (the tests) a list's selection, 100 + a page's choice, -1 neither open */ +int text_menu_cols(void); /* (the list open: its columns) */ extern char g_name[8]; /* the fallen human's name */ #endif diff --git a/games/undertale/src/waterfall.h b/games/undertale/src/waterfall.h new file mode 100644 index 00000000..6f50ab71 --- /dev/null +++ b/games/undertale/src/waterfall.h @@ -0,0 +1,11 @@ +/* Undertale: Waterfall (wf1.c: from Snowdin to the bridge Undyne cuts), its monsters (wfmon.c). */ +#ifndef UT_WATERFALL_H +#define UT_WATERFALL_H +#include "event.h" +void wf1_setup(int room, int from); +int wf1_event(Ev *c); /* -1: not one of its */ +void wf1_update(void); +bool wf_seed_enters(Obj *o, int x, int y); /* a bridge seed pushed into the water */ +void wf_seed_moved(Obj *o); +void wf_battle_done(int form); +#endif diff --git a/games/undertale/src/wf1.c b/games/undertale/src/wf1.c new file mode 100644 index 00000000..c1565ef6 --- /dev/null +++ b/games/undertale/src/wf1.c @@ -0,0 +1,772 @@ +/* Waterfall, the west: from Snowdin to the bridge Undyne cuts. Monster Kid, the echo flowers, the stream's rocks, + * Papyrus's report to Undyne, the bridge seeds, the wishing room, Undyne's spears, Sans's telescope, Onionsan, the + * piano and its artifact, the statue in the rain, Monster Kid under the umbrella, and the bridge. (As the Undertale + * Wiki describes them; what they say is ours, in short.) */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "save.h" +#include "snowdin.h" +#include "waterfall.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } + +/* who walks about */ +static Obj *obj_mk(int x, int y, int dir) { + static const uint16_t s[4] = {SPR_MK_OW, SPR_MK_OW, SPR_MK_OW_L, SPR_MK_OW}; + return obj_npc(ACTOR_MK, s, x, y, dir, 0); +} +static Obj *obj_undyne(int x, int y) { + static const uint16_t s[4] = {SPR_UNDYNE_OW, SPR_UNDYNE_OW, SPR_UNDYNE_OW, SPR_UNDYNE_OW}; + Obj *o = obj_npc(ACTOR_UNDYNE, s, x, y, DIR_DOWN, 0); + if (o) o->flags &= (uint16_t)~OF_SOLID; + return o; +} +/* a thing to pick up: its item and the flag that says it's taken (and what's drawn of it, at (x, y)) */ +static void pickup(int x, int y, int w, int h, int item, int fl, uint16_t spr) { + if (flag(fl)) return; + Obj *o = obj_trigger(x, y, w, h, EV_WF_ITEM, ACTOR_ITEM); + if (o) o->flags = OF_TALK | OF_BACK, o->arg = (int16_t)item, o->arg2 = (int16_t)fl, o->spr[0] = spr; +} + +/* ---------------------------------------------------------------- the bridge seeds */ +/* each puzzle: where its water is (the seeds bloom on it) and where its seeds start; solved, the blooms that + * stay */ +typedef struct { + int room; + int16_t wx, wy, ww, wh; + int16_t seeds[4][2]; + int16_t blooms[4][2]; + int fl; +} Seeds; +static const Seeds seed_puzzles[] = { + {ROOM_WF_SEEDS1, 2380, 1480, 80, 120, {{2300, 1440}, {2280, 1460}, {2300, 1460}, {2300, 1480}}, + {{2380, 1500}, {2400, 1500}, {2420, 1500}, {2440, 1500}}, F_SEEDS1}, + {ROOM_WF_SEEDS2, 2820, 1236, 84, 264, {{2960, 1340}, {2960, 1380}, {3000, 1340}, {3000, 1380}}, + {{2860, 1260}, {2840, 1260}, {2820, 1260}, {2860, 1280}}, F_SEEDS2}, +}; +static const Seeds *seeds_here(void) { + for (unsigned i = 0; i < sizeof seed_puzzles / sizeof seed_puzzles[0]; i++) + if (seed_puzzles[i].room == g_room) return &seed_puzzles[i]; + return NULL; +} +/* the quiche's secret: the water under the second puzzle's floor */ +#define SECRET_X 3036 +#define SECRET_Y 1536 +#define SECRET_W 84 +#define SECRET_H 24 + +static Obj *bloom(int x, int y) { + Obj *o = obj_deco(SPR_BLOOM, x, y, false); + if (o) o->name = ACTOR_BLOOM, o->flags |= OF_FLOOR | OF_BACK, obj_set_box(o, 0, 0, 20, 20); + return o; +} +static void seeds_setup(const Seeds *s) { + for (int i = 0; i < 4; i++) { + if (flag(s->fl)) { + bloom(s->blooms[i][0], s->blooms[i][1]); + continue; + } + Obj *o = obj_rock(s->seeds[i][0], s->seeds[i][1], ACTOR_SEED, 0); + if (o) { + o->spr[0] = SPR_SEED; + obj_set_box(o, 2, 4, 16, 14); + } + } + if (g_room == ROOM_WF_SEEDS2 && flag(F_SEEDS3)) + for (int i = 0; i < 4; i++) bloom(3040 + 20 * i, 1540); +} +/* water: in the puzzle's (or the secret's) rectangle, where there's no floor */ +static bool in_water(int x, int y, int ignore) { + const Seeds *s = seeds_here(); + if (!s) return false; + bool in = (x >= s->wx && x < s->wx + s->ww && y >= s->wy && y < s->wy + s->wh) || + (g_room == ROOM_WF_SEEDS2 && x >= SECRET_X && x < SECRET_X + SECRET_W && y >= SECRET_Y && y < SECRET_Y + SECRET_H); + return in && !world_walkable(x, y, 1, 1, ignore); +} +bool wf_seed_enters(Obj *o, int x, int y) { + if (o->name != ACTOR_SEED) return false; + /* the seed's box over water or floor (nothing solid in the way, but the seed itself) */ + int me = (int)(o - objs), bx = x + o->bx, by = y + o->by; + for (int yy = by;; yy += 4) { + if (yy > by + o->bh - 1) yy = by + o->bh - 1; + for (int xx = bx;; xx += 4) { + if (xx > bx + o->bw - 1) xx = bx + o->bw - 1; + if (!in_water(xx, yy, me) && !world_walkable(xx, yy, 1, 1, me)) return false; + if (xx == bx + o->bw - 1) break; + } + if (yy == by + o->bh - 1) break; + } + return true; +} +/* pushed along one way, a seed eases onto the 20-pixel grid the other way (a pixel a push, where it's free), so + * it stays in line for the next push */ +static void seed_align(Obj *o) { + bool across = pl.dir == DIR_LEFT || pl.dir == DIR_RIGHT; + int v = across ? o->y : o->x, to = (v + 10) / 20 * 20; + if (v == to) return; + int nx = o->x + (across ? 0 : (to > v ? 1 : -1)), ny = o->y + (across ? (to > v ? 1 : -1) : 0); + if (world_walkable(nx + o->bx, ny + o->by, o->bw, o->bh, (int)(o - objs)) || wf_seed_enters(o, nx, ny)) + o->x = (int16_t)nx, o->y = (int16_t)ny; +} + +void wf_seed_moved(Obj *o) { + if (o->name != ACTOR_SEED) return; + seed_align(o); + /* mostly over the water (its edges are ragged): it blooms where its middle is, on the 20-pixel grid, and can be + * walked on (and pushed over) */ + int me = (int)(o - objs), wet = 0; + for (int j = 0; j < 4; j++) + for (int i = 0; i < 4; i++) wet += in_water(o->x + o->bx + 2 + 4 * i, o->y + o->by + 1 + 4 * j, me); + if (wet < 9) return; + int cx = o->x + o->bx + o->bw / 2, cy = o->y + o->by + o->bh / 2; + gone(o); + bloom(cx / 20 * 20, cy / 20 * 20); +} +/* solved: the first, its four across the path; the second, Frisk on the far side; the secret, at the quiche */ +static void seeds_watch(void) { + if (g_room == ROOM_WF_SEEDS1 && !flag(F_SEEDS1)) { + int across = 0; + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].kind != OBJ_NONE && objs[i].name == ACTOR_BLOOM && objs[i].y >= 1480 && objs[i].y <= 1520) across++; + if (across >= 4) set_flag(F_SEEDS1, 1); + } + if (g_room == ROOM_WF_SEEDS2 && !flag(F_SEEDS2) && pl.x < 2800 && pl.y < 1300) set_flag(F_SEEDS2, 1); +} + +/* ---------------------------------------------------------------- the stream's rocks */ +#define STREAM_X0 1184 +#define STREAM_X1 1336 +#define STREAM_Y0 1446 +#define STREAM_FALL 1622 /* Frisk's feet past it: over the falls */ +static int stream_t; +static void stream_update(void) { + if (g_room != ROOM_WF_FALLS) return; + if (++stream_t % 34 == 0) { + Obj *d = obj_deco(SPR_DEBRIS, STREAM_X0 + 8 + rnd_n(STREAM_X1 - STREAM_X0 - 16), STREAM_Y0, false); + if (d) d->name = ACTOR_DEBRIS, obj_set_box(d, -8, -6, 16, 12); + } + int fx = pl.x + 3, fy = pl.y + 20; + for (int i = 0; i < MAX_OBJS; i++) { + Obj *d = &objs[i]; + if (d->kind == OBJ_NONE || d->name != ACTOR_DEBRIS) continue; + d->y = (int16_t)(d->y + 2); + if (d->y > 1650) { + gone(d); + continue; + } + /* a rock carries Frisk down with it */ + if (!event_running() && fx < d->x + 8 && fx + 14 > d->x - 8 && fy < d->y + 6 && fy + 9 > d->y - 6) pl.y = (int16_t)(pl.y + 2); + } + if (!event_running() && pl.y + 29 > STREAM_FALL && pl.x + 10 > STREAM_X0 && pl.x + 10 < STREAM_X1) + event_start(EV_WF_STREAM_FALL, NULL); +} + +/* ---------------------------------------------------------------- Undyne's spears */ +/* a spear comes up where Frisk is going: a glint, then the spear; it hurts (never below 1 HP) */ +typedef struct { + int room, from_x, to_x; /* where the spears come */ + int fl; +} Chase; +static const Chase chases[] = {{ROOM_WF_CHASE1, 4150, 6460, F_CHASE1}, {ROOM_WF_BRIDGE, 15600, 17380, F_WF_BRIDGE}}; +static int spear_t, hurt_t; +static const Chase *chase_here(void) { + for (unsigned i = 0; i < sizeof chases / sizeof chases[0]; i++) + if (chases[i].room == g_room && !flag(chases[i].fl)) return &chases[i]; + return NULL; +} +static void spears_update(void) { + const Chase *ch = chase_here(); + if (!ch) return; + Obj *u = obj_find(ACTOR_UNDYNE); + if (pl.x < ch->from_x || pl.x > ch->to_x || event_running()) { + if (u && g_room == ROOM_WF_CHASE1 && pl.x >= ch->from_x) u->x = (int16_t)(pl.x - 40); + return; + } + /* she keeps up along the ledge above */ + if (u && g_room == ROOM_WF_CHASE1) { + int want = pl.x - 40; + u->x = (int16_t)(u->x + (want > u->x ? min_i(3, want - u->x) : -min_i(3, u->x - want))); + } + if (hurt_t) hurt_t--; + int every = g_room == ROOM_WF_BRIDGE ? 26 : 40; + if (++spear_t % every == 0) { + int lead = pl.moving ? (pl.dir == DIR_RIGHT ? 30 : pl.dir == DIR_LEFT ? -30 : 0) : 0; + Obj *s = obj_deco(SPR_SPEAR, pl.x + 10 + lead, pl.y + 34, false); + if (s) s->name = ACTOR_SPEAR, s->arg = 0, s->alpha = 90, obj_set_box(s, -3, -36, 6, 34); + } + for (int i = 0; i < MAX_OBJS; i++) { + Obj *s = &objs[i]; + if (s->kind == OBJ_NONE || s->name != ACTOR_SPEAR) continue; + s->arg++; + if (s->arg == 18) s->alpha = 255; /* (the glint, then it's out) */ + if (s->arg > 40) { + gone(s); + continue; + } + if (s->arg >= 18 && !hurt_t && pl.x + 3 < s->x + 3 && pl.x + 17 > s->x - 3 && pl.y + 29 > s->y - 36 && pl.y + 20 < s->y) { + sv.hp = (int16_t)max_i(1, sv.hp - 3); + hurt_t = 40, g_shake = 6; + } + } + if (g_room == ROOM_WF_BRIDGE && pl.x >= ch->to_x - 4) event_start(EV_WF_BRIDGE_END, NULL); +} + +/* ---------------------------------------------------------------- Monster Kid, along under the umbrella */ +#define TRAIL 32 +static int16_t trail[TRAIL][2]; +static int trail_at; +static bool mk_follows; +static void mk_update(void) { + if (!mk_follows) return; + Obj *mk = obj_find(ACTOR_MK); + if (!mk) return; + mk->flags &= (uint16_t)~OF_SOLID; /* (walking along behind, never in the way) */ + if (pl.moving || !trail_at) { + trail[trail_at % TRAIL][0] = pl.x, trail[trail_at % TRAIL][1] = pl.y; + trail_at++; + } + if (trail_at < TRAIL) return; + const int16_t *p = trail[(trail_at - TRAIL + 4) % TRAIL]; + int nx = p[0] + 10, ny = p[1] + 29; + mk->dir = (uint8_t)(nx < mk->x ? DIR_LEFT : nx > mk->x ? DIR_RIGHT : mk->dir); + mk->x = (int16_t)nx, mk->y = (int16_t)ny; +} + +/* ---------------------------------------------------------------- Onionsan, along in the water */ +static void onion_update(void) { + if (g_room != ROOM_WF_ONION || flag(F_WF_ONION) != 1) return; + Obj *o = obj_find(ACTOR_ONION); + if (o && !event_running()) { + int want = pl.x + 60; + if (o->x < want) o->x = (int16_t)(o->x + 1); + } + if (!event_running() && pl.x > 9500) event_start(EV_WF_ONION, NULL); +} + +void wf1_update(void) { + if (world_room_info()->area != AREA_WATERFALL) return; + seeds_watch(); + stream_update(); + spears_update(); + mk_update(); + onion_update(); +} + +/* ---------------------------------------------------------------- the rooms */ +static void echo(int x, int y, const char *says) { + static char buf[8][120]; + static int k; + snprintf(buf[k], sizeof buf[k], "* (The echo flower whispers.)|* %s", says); + obj_sign(x - 10, y - 14, 20, 40, buf[k]); + k = (k + 1) % 8; +} + +void wf1_setup(int room, int from) { + (void)from; + if (room < ROOM_WF1 || room > ROOM_WF_BRIDGE) return; + mk_follows = false, trail_at = 0, spear_t = 0, hurt_t = 0; + switch (room) { + case ROOM_WF1: + set_flag(F_SNOW_EXIT, 1); /* (out of Snowdin) */ + if (!flag(F_WF_MK)) { + obj_mk(731, 1531, DIR_LEFT); + obj_trigger(640, 1450, 20, 100, EV_WF_MK, ACTOR_TRIGGER); + } + obj_sign(718, 1376, 36, 48, "* Echo flowers repeat whatever they heard last.\n* Over and over and over..."); + echo(769, 1423, "\"...is anybody listening?\""); + obj_save(814, 1430, "* (The sound of rushing water fills you with determination.)"); + { + /* (the booth is the map's: talking reaches it from the path below) */ + Obj *s = obj_trigger(856, 1440, 68, 30, EV_GRILLBYS, ACTOR_SANS); + if (s) s->flags = OF_TALK; + } + obj_sign(1084, 1452, 20, 20, "* (Waterfall ahead.\n* Mind the rocks in the stream.)"); + { + Obj *b = obj_trigger(1112, 1452, 22, 22, EV_BOX, ACTOR_ITEM); + if (b) b->flags = OF_TALK | OF_SOLID; + } + break; + case ROOM_WF_FALLS: + stream_t = 0; + pickup(1240, 1240, 22, 24, ITEM_OLD_TUTU, F_WF_TUTU, SPR_TUTU); + break; + case ROOM_WF_FALLS_LOW: + echo(1450, 1700, "\"Is someone down there?\""); + obj_sign(1250, 1652, 20, 18, "* (Something small and shiny is tucked in the planks.\n* A camera?)"); + break; + case ROOM_WF2: + obj_save(2035, 1485, "* (The rumbling of the falls fills you with determination.)"); + if (!flag(F_WF_UNDYNE1)) obj_trigger(1770, 1496, 40, 44, EV_WF_UNDYNE1, ACTOR_TRIGGER); + break; + case ROOM_WF_SEEDS1: + obj_sign(2172, 1452, 20, 20, "* (Bridge seeds bloom when they touch the water.\n* Push them in, one after another.)"); + seeds_setup(&seed_puzzles[0]); + break; + case ROOM_WF_SEEDS2: + obj_sign(2840, 1540, 20, 22, "* (Ring the bell to call the seeds back.)"); + { + Obj *b = obj_trigger(3018, 1188, 24, 26, EV_BELL, ACTOR_ITEM); + if (b) b->flags = OF_TALK | OF_SOLID; + } + seeds_setup(&seed_puzzles[1]); + break; + case ROOM_WF_QUICHE: + /* (reached over the secret bridge: it stays, and leads back) */ + set_flag(F_SEEDS3, 1); + for (int i = 0; i < 4; i++) bloom(3040 + 20 * i, 1540); + pickup(3262, 1474, 30, 34, ITEM_QUICHE, F_WF_QUICHE, 0); + echo(3330, 1463, "\"I'll wait here for a while.\""); + break; + case ROOM_WF_WISH: + obj_sign(2770, 990, 26, 16, "* (Old writing on the wall: people used to come here to wish on the \"stars\" above.)"); + echo(2690, 1050, "\"I wish I could see the real sky...\""); + echo(2838, 1068, "\"Someday we'll all be free.\""); + echo(2928, 1050, "\"I hope my wish comes true.\""); + echo(2968, 1050, "\"Please, let me find a friend.\""); + echo(3288, 1050, "\"...thank you for listening.\""); + obj_sign(3122, 1060, 20, 26, "* (A telescope.\n* The \"stars\" are crystals on the cave's ceiling.)"); + break; + case ROOM_WF_HIST: + obj_sign(3090, 486, 30, 16, "* (Long ago, humans and monsters lived side by side.)"); + obj_sign(3170, 486, 30, 16, "* (Then a war broke out between them.\n* The humans won.)"); + obj_sign(3250, 486, 30, 16, "* (The monsters were sealed under the mountain by a magic barrier.)"); + obj_sign(3330, 486, 30, 16, "* (Only power as great as seven human SOULs could break it.)"); + obj_sign(3410, 486, 30, 16, "* (Still, monsters hope.\n* One day, they will see the sky again.)"); + { + static const uint16_t w[4] = {SPR_WOSHUA_OW, SPR_WOSHUA_OW, SPR_WOSHUA_OW, SPR_WOSHUA_OW}; + Obj *o = obj_npc(ACTOR_ANY, w, 3454, 580, DIR_DOWN, EV_SIGN); + if (o) o->text = "* (Woshua is scrubbing the boardwalk.\n* It doesn't look up.)", o->flags |= OF_ANIM, o->anim_speed = 8; + } + break; + case ROOM_WF_CHASE1: + if (!flag(F_CHASE1)) obj_undyne(4180, 470); + break; + case ROOM_WF_GRASS1: + if (!flag(F_CHASE1)) obj_trigger(6640, 540, 30, 72, EV_WF_GRASS, ACTOR_TRIGGER); + echo(7219, 503, "\"...is it over? Is it gone?\""); + obj_save(7250, 540, "* (The crystals glitter. You're filled with determination.)"); + obj_sign(7172, 500, 26, 24, "* (A mouse hole.\n* Something squeaks inside.)"); + obj_sign(7490, 512, 24, 48, "* (The door is locked.)"); + break; + case ROOM_WF_SANS2: { + /* (the telescope, the Nice Cream cart, the box are the map's: talked to from the floor beside them) */ + Obj *t = obj_trigger(7843, 520, 62, 36, EV_WF_TELESCOPE, ACTOR_SANS); + if (t) t->flags = OF_TALK | OF_SOLID; + Obj *n = obj_trigger(7876, 96, 70, 50, EV_NICECREAM, ACTOR_ITEM); + if (n) n->flags = OF_TALK | OF_SOLID; + Obj *b = obj_trigger(7928, 540, 26, 22, EV_BOX, ACTOR_ITEM); + if (b) b->flags = OF_TALK | OF_SOLID; + pickup(8048, 118, 24, 42, ITEM_PUNCH_CARD, F_WF_PUNCH, 0); + Obj *m = obj_sign(8074, 554, 18, 12, "* (It's gazing up at the glittering ceiling.)\n* (It doesn't notice you.)"); + if (m) m->flags |= OF_SOLID; + break; + } + case ROOM_WF_MARSH_TOP: { + /* the bird at the boardwalk's end, and (unseen) on the far side for the way back */ + Obj *b = obj_trigger(8462, 574, 22, 26, EV_WF_BIRD, ACTOR_ANY); + if (b) b->flags = OF_TALK | OF_SOLID; + Obj *r = obj_trigger(8536, 556, 8, 44, EV_WF_BIRD, ACTOR_ANY); + if (r) r->flags = OF_TALK, r->arg = 1; + break; + } + case ROOM_WF_MARSH: + pickup(7578, 1230, 30, 30, ITEM_BALLET_SHOES, F_WF_BALLET, 0); + { + Obj *h = obj_sign(8826, 812, 50, 26, "* (The humans were afraid of how strong a monster's SOUL might become.)"); + if (h) h->flags |= OF_SOLID; + } + echo(8449, 1098, "\"Splish... splash...\""); + echo(8449, 1228, "\"Is the water getting higher?\""); + echo(8719, 1177, "\"Hello? Hello?\""); + break; + case ROOM_WF_ONION: + if (flag(F_WF_ONION) < 2) { + static const uint16_t o[4] = {SPR_ONIONSAN, SPR_ONIONSAN, SPR_ONIONSAN, SPR_ONIONSAN}; + Obj *on = obj_npc(ACTOR_ONION, o, 8900, 650, DIR_DOWN, 0); + if (on) on->flags = OF_BACK, on->alpha = flag(F_WF_ONION) ? 255 : 0; + if (!flag(F_WF_ONION)) obj_trigger(8780, 560, 20, 100, EV_WF_ONION, ACTOR_TRIGGER); + } + break; + case ROOM_WF_PIANO: { + Obj *p = obj_trigger(10052, 404, 44, 26, EV_PIANO, ACTOR_ITEM); + if (p) p->flags = OF_TALK | OF_SOLID; + obj_sign(10194, 374, 30, 16, "* (A sign: \"Play the song of the rain.\")"); + if (!flag(F_PIANO)) { + Obj *d = obj_trigger(10118, 330, 64, 50, 0, ACTOR_BLOCK); + if (d) d->flags = OF_SOLID; + } + pickup(10156, 150, 12, 30, ITEM_ARTIFACT, F_WF_ARTIFACT, SPR_ARTIFACT); + obj_sign(10194, 572, 30, 16, "* (Monsters fear humans... yet some wish to meet one.)"); + obj_sign(10374, 610, 30, 22, "* (The barrier can't be crossed by anything with a SOUL... except a human.)"); + obj_sign(10484, 610, 30, 22, "* (A human SOUL and a monster SOUL together: that would be enough.)"); + if (!flag(F_SHYREN)) { + static const uint16_t s[4] = {SPR_SHYREN_OW, SPR_SHYREN_OW, SPR_SHYREN_OW, SPR_SHYREN_OW}; + obj_npc(ACTOR_SHYREN, s, 10147, 660, DIR_DOWN, EV_SHYREN); + } + break; + } + case ROOM_WF_STATUE: { + Obj *st = obj_trigger(10744, 618, 52, 42, EV_STATUE, ACTOR_ITEM); + if (st) st->flags = OF_TALK | OF_SOLID; + obj_sign(11050, 636, 22, 26, "* (Umbrellas: take one, leave one.)"); + Obj *u = obj_trigger(11146, 630, 28, 30, EV_UMBRELLA, ACTOR_ITEM); + if (u) u->flags = OF_TALK | OF_SOLID; + break; + } + case ROOM_WF_RAIN1: + if (!flag(F_MK_RAIN)) { + obj_mk(11911, 648, DIR_DOWN); + obj_trigger(11880, 660, 60, 80, EV_MK_RAIN, ACTOR_TRIGGER); + } + break; + case ROOM_WF_RAIN2: case ROOM_WF_CASTLE: + if (flag(F_MK_RAIN) == 1) { + obj_mk(pl.x + 10, pl.y + 29, DIR_DOWN); + mk_follows = true; + if (room == ROOM_WF_RAIN2) obj_trigger(12740, 1300, 60, 20, EV_MK_TALK, ACTOR_TRIGGER2); + else obj_trigger(13600, 1660, 20, 70, EV_MK_TALK, ACTOR_TRIGGER3); + } + break; + case ROOM_WF_AARON: + if (flag(F_MK_RAIN) == 1) { + obj_mk(pl.x + 10, pl.y + 29, DIR_DOWN); + mk_follows = true; + obj_trigger(14700, 1660, 20, 70, EV_MK_TALK, ACTOR_TRIGGER); + } + { + static const uint16_t a[4] = {SPR_AARON_OW, SPR_AARON_OW, SPR_AARON_OW, SPR_AARON_OW}; + Obj *o = obj_npc(ACTOR_ANY, a, 14504, 1682, DIR_DOWN, EV_SIGN); + if (o) o->text = "* Hey there, small fry ;)\n* Want to see me flex? ;)"; + } + obj_save(15140, 1640, "* (The bridge ahead looks long.\n* You're filled with determination.)"); + obj_sign(15070, 1590, 30, 16, "* (A human and a monster may cross the barrier... but none ever has.)"); + obj_sign(15210, 1590, 30, 16, "* (The king vowed to break the barrier, and set us all free.)"); + break; + case ROOM_WF_BRIDGE: + if (!flag(F_WF_BRIDGE)) obj_undyne(15500, 1820); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_wf_mk(Ev *c) { + Obj *mk = obj_get(ACTOR_MK); + EV_BEGIN; + pl.dir = DIR_RIGHT; + NARRATE("* Yo! Are you going to see Undyne too?|* She's the head of the Royal Guard!\n* She's SO cool!|* Come on, let's go!"); + set_flag(F_WF_MK, 1); + WALK(mk, 1180, 1496, 4); + gone(mk); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_wf_item(Ev *c) { + int item = c->self ? c->self->arg : 0, fl = c->self ? c->self->arg2 : 0; + static char buf[120]; + EV_BEGIN; + if (!item_add(item)) { + NARRATE("* (You're carrying too much.)"); + return 1; + } + set_flag(fl, 1); + snprintf(buf, sizeof buf, "* (You got the %s.)", item_info(item)->name); + NARRATE(buf); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_stream_fall(Ev *c) { + EV_BEGIN; + NARRATE("* (The current sweeps you over the edge!)"); + FADE_TO(ROOM_WF_FALLS_LOW, 1252, 1640, DIR_DOWN); + EV_END; +} + +static int ev_wf_undyne1(Ev *c) { + Obj *p = obj_get(ACTOR_PAPYRUS), *u = obj_get(ACTOR_UNDYNE), *mk = obj_get(ACTOR_MK); + EV_BEGIN; + /* hidden in the tall grass, Frisk hears Papyrus report to Undyne on the ledge above */ + PL_WALK(1820, 1500, 2); + p = obj_papyrus(1770, 1396, DIR_RIGHT); + obj_undyne(1822, 1396); + WAIT_UNTIL(cam_pan(1640, 1300, 2)); + WAIT(50); + SAY(FACE_PAPYRUS, "`0* H-HI, UNDYNE!\n* I'M HERE WITH MY REPORT!|* THAT HUMAN I TOLD YOU ABOUT...\n* I FOUGHT THEM...|`4* ...AND I, UM, DIDN'T WIN.|`3* WHAT? YOU'LL CAPTURE THEM YOURSELF?|`4* BUT, UNDYNE...|* ...|`0* ...OKAY. I'LL HELP YOU."); + WALK(p, 1680, 1396, 2); + gone(p); + /* she looks down into the grass, right at Frisk */ + WAIT(40); + g_shake = 4; + NARRATE("* (Undyne stares into the grass...)"); + WAIT(40); + u = obj_get(ACTOR_UNDYNE); + WALK(u, 1900, 1396, 1); + gone(u); + cam_free(); + if (flag(F_WF_MK)) { + obj_mk(1840, 1530, DIR_LEFT); + NARRATE("* Yo! Did you see that?!\n* She was looking right at you!|* That's so awesome!!"); + mk = obj_get(ACTOR_MK); + WALK(mk, 2120, 1520, 4); + gone(mk); + } + set_flag(F_WF_UNDYNE1, 1); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_bell(Ev *c) { + EV_BEGIN; + NARRATE("* (Ding!)\n* (The seeds float back where they came from.)"); + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].kind != OBJ_NONE && (objs[i].name == ACTOR_SEED || objs[i].name == ACTOR_BLOOM)) gone(&objs[i]); + set_flag(F_SEEDS2, 0); + seeds_setup(&seed_puzzles[1]); + EV_END; +} + +static int ev_wf_grass(Ev *c) { + Obj *u = obj_get(ACTOR_UNDYNE), *mk = obj_get(ACTOR_MK); + EV_BEGIN; + /* the end of the first chase: Frisk ducks into the grass; Undyne reaches in... and pulls out Monster Kid */ + PL_WALK(6700, 560, 3); + pl.hidden = true; + u = obj_undyne(6580, 520); + WALK(u, 6690, 540, 2); + WAIT(30); + g_shake = 6; + NARRATE("* (Undyne reaches into the grass...)"); + if (flag(F_WF_MK)) { + obj_mk(6700, 540, DIR_DOWN); + WAIT(30); + NARRATE("* (...and pulls out Monster Kid.)"); + WAIT(20); + NARRATE("* (She drops him, and walks away.)"); + } + u = obj_get(ACTOR_UNDYNE); + WALK(u, 6560, 520, 2); + gone(u); + pl.hidden = false; + if (flag(F_WF_MK)) { + NARRATE("* Yo! She almost got you!\n* ...wait, why WAS she after you?|* Never mind! Let's keep going!"); + mk = obj_get(ACTOR_MK); + WALK(mk, 6900, 580, 4); + gone(mk); + } + set_flag(F_CHASE1, 1); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_wf_telescope(Ev *c) { + EV_BEGIN; + if (!flag(F_WF_TELESCOPE)) { + SAY(FACE_SANS, "* hey. want to look through my telescope?\n* for you, it's free.@Sure@No thanks"); + if (CHOICE() == 1) { + SAY(FACE_SANS, "* suit yourself."); + return 1; + } + NARRATE("* (You look through the telescope.)\n* (It's very dark...)"); + set_flag(F_WF_TELESCOPE, 1); + SAY(FACE_SANS, "`1* heh. you've got a red ring around your eye now."); + } else { + SAY(FACE_SANS, "* how was the view?"); + } + EV_END; +} + +static int ev_wf_bird(Ev *c) { + EV_BEGIN; + c->v[1] = c->self ? c->self->arg : 0; + NARRATE(c->v[1] ? "* (The little bird offers to carry you back.)@Yes@No" + : "* (A little bird offers to carry you over the gap.)@Yes@No"); + if (CHOICE() == 0) { + if (c->v[1]) FADE_TO(ROOM_WF_MARSH_TOP, 8440, 562, DIR_LEFT); + else FADE_TO(ROOM_WF_MARSH_TOP, 8552, 562, DIR_RIGHT); + set_flag(F_WF_BIRD, 1); + } + EV_END; +} + +static int ev_wf_onion(Ev *c) { + Obj *o = obj_get(ACTOR_ONION); + EV_BEGIN; + if (!flag(F_WF_ONION)) { + /* up from the water, a huge friendly face */ + o->x = (int16_t)(pl.x + 60); + for (c->v[0] = 0; c->v[0] < 16; c->v[0]++) { + o->alpha = (uint8_t)(c->v[0] * 16); + WAIT(2); + } + o->alpha = 255; + NARRATE("* Hey there... you're new around here, huh?|* I'm Onionsan!\n* I live in this big, big water.|* Let's walk together a while!"); + set_flag(F_WF_ONION, 1); + if (c->self) gone(c->self); + return 1; + } + NARRATE("* Someday they'll drain all this water...|* Then I'll live somewhere else.\n* Somewhere nice!|* See you!"); + for (c->v[0] = 16; c->v[0] > 0; c->v[0]--) { + o->alpha = (uint8_t)(c->v[0] * 15); + WAIT(2); + } + gone(o); + set_flag(F_WF_ONION, 2); + EV_END; +} + +/* the piano: the rain's song (on the statue's sign: middle, up, right, middle, down, down, right) */ +static const char *const notes[] = {"Up", "Down", "Left", "Right", "Middle", "Stop"}; +static const uint8_t song[7] = {4, 0, 3, 4, 1, 1, 3}; +static uint8_t played[7]; +static int ev_piano(Ev *c) { + EV_BEGIN; + if (flag(F_PIANO)) { + NARRATE("* (The piano rings softly.)"); + return 1; + } + NARRATE("* (Play the piano?)@Yes@No"); + if (CHOICE() == 1) return 1; + memset(played, 0xFF, sizeof played); + for (;;) { + CHOOSE(notes, 6); + if (CHOSEN() < 0 || CHOSEN() == 5) break; + memmove(played, played + 1, 6); + played[6] = (uint8_t)CHOSEN(); + if (!memcmp(played, song, 7)) { + set_flag(F_PIANO, 1); + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].kind != OBJ_NONE && objs[i].name == ACTOR_BLOCK) gone(&objs[i]); + g_shake = 6; + NARRATE("* (Somewhere, a door rumbles open.)"); + break; + } + } + EV_END; +} + +static int ev_shyren(Ev *c) { + EV_BEGIN; + NARRATE("* (She's humming to herself... she hasn't noticed you.)"); + BATTLE(FORM_SHYREN); + set_flag(F_SHYREN, bt.mon[0].killed ? 2 : 1); + gone(obj_get(ACTOR_SHYREN)); + EV_END; +} + +/* the umbrella (F_UMBRELLA): 1 carried, 2 left with the statue, 3 left there and another carried */ +static bool carrying_umbrella(void) { return flag(F_UMBRELLA) == 1 || flag(F_UMBRELLA) == 3; } + +static int ev_statue(Ev *c) { + EV_BEGIN; + if (flag(F_UMBRELLA) >= 2) { + NARRATE("* (The music box plays a gentle song under the umbrella.)"); + } else if (flag(F_UMBRELLA) == 1) { + NARRATE("* (A statue, out in the rain.)\n* (Give it your umbrella?)@Yes@No"); + if (CHOICE() == 0) { + set_flag(F_UMBRELLA, 2); + NARRATE("* (You hold the umbrella over the statue.)|* (A music box inside starts to play.)"); + } + } else { + NARRATE("* (A statue, out in the rain.)\n* (It looks lonely.)"); + } + EV_END; +} + +static int ev_umbrella(Ev *c) { + EV_BEGIN; + if (carrying_umbrella()) { + NARRATE("* (Umbrellas.)"); + } else { + set_flag(F_UMBRELLA, flag(F_UMBRELLA) ? 3 : 1); + NARRATE("* (You took an umbrella.)"); + } + EV_END; +} + +static int ev_mk_rain(Ev *c) { + EV_BEGIN; + if (!carrying_umbrella()) { + NARRATE("* Yo... it's really pouring.|* If only I had an umbrella..."); + PL_WALK(pl.x - 20, pl.y, 2); + return 1; + } + NARRATE("* Yo! An umbrella!|* Can I walk under it with you? I don't have arms to hold one.|* Thanks, dude!"); + set_flag(F_MK_RAIN, 1); + mk_follows = true, trail_at = 0; + if (c->self) gone(c->self); + EV_END; +} + +/* what Monster Kid says on the way: down the slope, the castle, the parting */ +static int ev_mk_talk(Ev *c) { + int k = c->self ? c->self->name : 0; + EV_BEGIN; + if (k == ACTOR_TRIGGER2) { + NARRATE("* Undyne's so strong... she beats up the bad guys and never loses!|* Someday I'll be just like her."); + } else if (k == ACTOR_TRIGGER3) { + NARRATE("* Whoa, look!\n* That's the king's castle, way out there!"); + } else { + NARRATE("* Yo, this is where I live.\n* I gotta go home.|* See you later, dude!"); + set_flag(F_MK_RAIN, 2); + mk_follows = false; + { + Obj *mk = obj_get(ACTOR_MK); + WALK_TO(mk, 14300, 1700, 4); + } + WAIT(40); + gone(obj_get(ACTOR_MK)); + } + if (c->self) gone(c->self); + EV_END; +} + +static int ev_bridge_end(Ev *c) { + EV_BEGIN; + obj_undyne(pl.x - 60, pl.y + 30); + NARRATE("* (Undyne raises her spear...)"); + g_shake = 12; + WAIT(30); + NARRATE("* (...and cuts the bridge from under you!)"); + set_flag(F_WF_BRIDGE, 1); + sv.room = (int16_t)g_room, sv.x = (int16_t)(pl.x - 40), sv.y = pl.y; + save_write_auto(); + menu_end_open(); + EV_END; +} + +int wf1_event(Ev *c) { + switch (c->id) { + case EV_WF_MK: return ev_wf_mk(c); + case EV_WF_ITEM: return ev_wf_item(c); + case EV_WF_STREAM_FALL: return ev_stream_fall(c); + case EV_WF_UNDYNE1: return ev_wf_undyne1(c); + case EV_BELL: return ev_bell(c); + case EV_WF_GRASS: return ev_wf_grass(c); + case EV_WF_TELESCOPE: return ev_wf_telescope(c); + case EV_WF_BIRD: return ev_wf_bird(c); + case EV_WF_ONION: return ev_wf_onion(c); + case EV_PIANO: return ev_piano(c); + case EV_SHYREN: return ev_shyren(c); + case EV_STATUE: return ev_statue(c); + case EV_UMBRELLA: return ev_umbrella(c); + case EV_MK_RAIN: return ev_mk_rain(c); + case EV_MK_TALK: return ev_mk_talk(c); + case EV_WF_BRIDGE_END: return ev_bridge_end(c); + } + return -1; +} + +void wf_battle_done(int form) { + (void)form; + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].killed) set_flag(F_KILLS_WATERFALL, flag(F_KILLS_WATERFALL) + 1); +} diff --git a/games/undertale/src/wfmon.c b/games/undertale/src/wfmon.c new file mode 100644 index 00000000..86b3b28d --- /dev/null +++ b/games/undertale/src/wfmon.c @@ -0,0 +1,284 @@ +/* Waterfall's monsters: stats and ACTs (from the Undertale Wiki's records of the game), their formations, where + * they come out and their attacks. Their words are short ones of our own. */ +#include +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "monsters.h" +#include "res.h" +#include "world.h" + +/* ---------------------------------------------------------------- Aaron: flex three times and he flexes away */ +static void act_aaron(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { /* Flex */ + m->state++; + m->at = (int16_t)(m->at + 1); + if (m->state == 1) snprintf(t, (size_t)cap, "* You flex at Aaron.\n* He takes it as a challenge and flexes back!"); + else if (m->state == 2) snprintf(t, (size_t)cap, "* You flex harder.\n* Aaron flexes harder still!"); + else { + snprintf(t, (size_t)cap, "* You flex with everything you've got.\n* Aaron flexes so hard he flexes himself out of the room."); + m->gone = true, m->fade = 1, m->spare = true; + } + } else { /* Shoo */ + snprintf(t, (size_t)cap, "* You tell Aaron to go away.\n* He just flexes at you."); + } +} +static const char *talk_aaron(Battle *b, Monster *m) { + (void)b; + static const char *const lines[] = {"Check out\nthese fins\n;)", "Feeling the\nburn?\n;)", "Don't be\nshy ;)", + "Want a\ncloser look?\n;)"}; + if (m->state == 1) return "Oh, a\ncontest?\n;)"; + if (m->state == 2) return "You're\ngood...\n;)"; + return lines[rnd_n(4)]; +} +static int attack_aaron(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_AARON_ARMS : ATK_AARON_SWEAT; } + +/* ---------------------------------------------------------------- Woshua: ask to be cleaned, catch its green */ +static void act_woshua(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { /* Clean */ + snprintf(t, (size_t)cap, "* You ask Woshua to clean you.\n* It gets very excited."); + if (!m->state) m->state = 1; + } else if (act == 1) { /* Touch */ + if (m->spare) snprintf(t, (size_t)cap, "* You give Woshua a friendly pat.\n* It wobbles happily."); + else snprintf(t, (size_t)cap, "* Woshua won't let you touch it.\n* You're not clean enough!"); + } else { /* Joke */ + snprintf(t, (size_t)cap, "* You tell a dirty joke.\n* Woshua is horrified."); + } +} +static const char *talk_woshua(Battle *b, Monster *m) { + (void)b; + static const char *const lines[] = {"Scrub\nscrub!", "Germs,\nbegone!", "Wash! Rinse!\nRepeat!", "Too\ndirty!"}; + if (m->state == 1) return "Hold\nstill!\nWashing!"; + if (m->state == 2) return "Squeaky\nclean!"; + return lines[rnd_n(4)]; +} +static const char *flavor_woshua(Battle *b, Monster *m) { + (void)b; + if (m->state == 1) return "* Woshua's water looks clean and green."; + if (m->state == 2) return "* Woshua is proud of how clean you are."; + return NULL; +} +static int attack_woshua(Battle *b, Monster *m) { + (void)b; + if (m->state == 1) m->state2 = (int16_t)b->greens; /* (what it had healed before this one) */ + return m->state == 1 || rnd_n(2) ? ATK_WOSHUA_DROPS : ATK_WOSHUA_BUBBLES; +} + +/* ---------------------------------------------------------------- Moldbygg: let go of it */ +static void act_moldbygg(Battle *b, Monster *m, int act, char *t, int cap) { + if (act == 0) { /* Hug */ + snprintf(t, (size_t)cap, "* You hug Moldbygg.\n* You're covered in slime...\n* You feel slower."); + if (b->speed > FX) b->speed -= FX / 2; + m->state = 1; + } else if (act == 1) { /* Lie Down */ + snprintf(t, (size_t)cap, "* You lie down next to Moldbygg.\n* It's surprisingly comfy."); + } else { /* Unhug */ + snprintf(t, (size_t)cap, m->state == 1 ? "* You let go of Moldbygg.\n* It seems relieved." : "* You give Moldbygg some room.\n* It seems relieved."); + m->spare = true, m->state = 2; + } +} +static const char *talk_moldbygg(Battle *b, Monster *m) { + (void)b, (void)m; + static const char *const lines[] = {"Burble...", "*squish*", "Blub\nblub.", "(wiggle)"}; + return lines[rnd_n(4)]; +} +static int attack_moldbygg(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_MOLDBYGG_HOPS : ATK_MOLDBYGG_RAIN; } + +/* ---------------------------------------------------------------- Shyren: hum, and she sings */ +static void act_shyren(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 1) { /* Hum */ + m->state++; + m->spare = true; + if (m->state >= 5) { + snprintf(t, (size_t)cap, "* You hum along.\n* Shyren's song fills the whole cave.\n* She swims off, happy."); + m->gone = true, m->fade = 1; + } else if (m->state == 1) snprintf(t, (size_t)cap, "* You hum a little tune.\n* Shyren hums along, very quietly."); + else snprintf(t, (size_t)cap, "* You hum again.\n* Shyren sings a little louder!"); + } else if (act == 0) { /* Smile */ + snprintf(t, (size_t)cap, "* You smile at Shyren.\n* She gets even shyer."); + } else { /* Conduct */ + snprintf(t, (size_t)cap, m->state ? "* You conduct.\n* Shyren follows your hands!" : "* You wave your arms about.\n* Shyren doesn't know the tune yet."); + } +} +static const char *talk_shyren(Battle *b, Monster *m) { + (void)b; + if (m->state >= 3) return "La la\nLAAA!"; + if (m->state) return "La...?"; + static const char *const lines[] = {"...hm...", "(blub)", "..."}; + return lines[rnd_n(3)]; +} +static int attack_shyren(Battle *b, Monster *m) { (void)b, (void)m; return ATK_SHYREN_NOTES; } + +static const MonDef wf_defs[MON_COUNT - MON_SNOW_COUNT] = { + [MON_AARON - MON_SNOW_COUNT] = { + .name = "Aaron", .spare_gold = 30, .hp = 98, .at = 7, .df = 2, .exp = 52, .gold = 30, .spr_idle = SPR_AARON_B, + .spr_hurt = SPR_AARON_HURT, .check = "All muscle, and he knows it.", .acts = {"Flex", "Shoo"}, .nacts = 2, + .neutral = {"* Aaron is flexing.", "* Aaron winks at nobody in particular.", "* Smells like protein powder."}, + .low_hp = "* Aaron's muscles are tired.", .act = act_aaron, .talk = talk_aaron, .attack = attack_aaron}, + [MON_WOSHUA - MON_SNOW_COUNT] = { + .name = "Woshua", .spare_gold = 25, .hp = 70, .at = 7, .df = 1, .exp = 52, .gold = 25, .spr_idle = SPR_WOSHUA_B, + .spr_hurt = SPR_WOSHUA_HURT, .idle_speed = 8, .check = "Can't stand a single speck of dirt.", + .acts = {"Clean", "Touch", "Joke"}, .nacts = 3, + .neutral = {"* Woshua is scrubbing the air.", "* Woshua hums a washing song.", "* Smells like soap."}, + .low_hp = "* Woshua's water is running low.", .act = act_woshua, .talk = talk_woshua, .attack = attack_woshua, + .flavor = flavor_woshua}, + [MON_MOLDBYGG - MON_SNOW_COUNT] = { + .name = "Moldbygg", .spare_gold = 20, .hp = 70, .at = 7, .df = 4, .exp = 46, .gold = 20, .spr_idle = SPR_MOLDBYGG_B, + .spr_hurt = SPR_MOLDBYGG_B, .idle_speed = 8, .check = "Like Moldsmal, only a lot bigger.", + .acts = {"Hug", "Lie Down", "Unhug"}, .nacts = 3, + .neutral = {"* Moldbygg burbles.", "* Moldbygg wobbles.", "* Smells like a damp basement."}, + .act = act_moldbygg, .talk = talk_moldbygg, .attack = attack_moldbygg}, + [MON_SHYREN - MON_SNOW_COUNT] = { + .name = "Shyren", .spare_gold = 20, .hp = 66, .at = 7, .df = 2, .exp = 52, .gold = 20, .spr_idle = SPR_SHYREN_B, + .spr_hurt = SPR_SHYREN_TURNED, .check = "She'd love to sing, if nobody were watching.", + .acts = {"Smile", "Hum", "Conduct"}, .nacts = 3, .neutral = {"* Shyren hides her face.", "* Shyren is humming to herself.", "* Shyren peeks at you."}, + .act = act_shyren, .talk = talk_shyren, .attack = attack_shyren}, +}; +const MonDef *wf_mon_def(int id) { return &wf_defs[id - MON_SNOW_COUNT]; } + +/* Woshua's clean green caught: then it can be spared (battle.c asks each turn, through its flavour) */ +static void woshua_check(Battle *b) { + for (int i = 0; i < b->nmon; i++) { + Monster *m = &b->mon[i]; + if (m->def == &wf_defs[MON_WOSHUA - MON_SNOW_COUNT] && m->state == 1 && b->greens > m->state2) m->state = 2, m->spare = true; + } +} + +static const Form wf_forms[FORM_COUNT - FORM_SNOW_COUNT] = { + [FORM_AARON - FORM_SNOW_COUNT] = {{MON_AARON}, 1, "* Aaron flexes in."}, + [FORM_WOSHUA - FORM_SNOW_COUNT] = {{MON_WOSHUA}, 1, "* Woshua sloshes up."}, + [FORM_WOSHUA_AARON - FORM_SNOW_COUNT] = {{MON_WOSHUA, MON_AARON}, 2, "* Woshua and Aaron show up."}, + [FORM_MOLDBYGG - FORM_SNOW_COUNT] = {{MON_MOLDBYGG}, 1, "* Moldbygg blocks the way."}, + [FORM_MOLDBYGG_MOLDSMAL - FORM_SNOW_COUNT] = {{MON_MOLDSMAL, MON_MOLDBYGG}, 2, "* Moldbygg and Moldsmal block the way."}, + [FORM_MOLDBYGG_WOSHUA - FORM_SNOW_COUNT] = {{MON_MOLDBYGG, MON_WOSHUA}, 2, "* Moldbygg and Woshua appear."}, + [FORM_SHYREN - FORM_SNOW_COUNT] = {{MON_SHYREN}, 1, "* Shyren hums, then hides."}, +}; +const Form *wf_form(int form) { return &wf_forms[form - FORM_SNOW_COUNT]; } + +/* random encounters: the wiki's pools, room by room */ +int wf_encounter(int room) { + switch (room) { + case ROOM_WF_SEEDS2: case ROOM_WF_WISH: + return rnd_n(3) == 0 ? FORM_WOSHUA_AARON : rnd_n(2) ? FORM_AARON : FORM_WOSHUA; + case ROOM_WF_MARSH: case ROOM_WF_MARSH_MID: { + static const uint8_t pool[] = {FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, FORM_AARON}; + return pool[rnd_n(5)]; + } + } + return -1; +} + +/* ---------------------------------------------------------------- the attacks */ +static int bx0(void) { return bt.x0 + 3; } +static int bx1(void) { return bt.x1 - 3; } +static int by0(void) { return bt.y0 + 3; } +static int by1(void) { return bt.y1 - 3; } +#define P(v) ((v) * FX) +static Bullet *shot(uint16_t spr, int x, int y, int vx, int vy) { return bullet_new(spr, P(x), P(y), vx, vy); } + +/* Aaron: flexing arms rise up both sides, faster and faster; sweat drips down */ +static void atk_aaron_arms(int t) { + if (t < 140 && t % 16 == 0) { + int k = t / 16; + bool left = k % 2; + int x = left ? bx0() + 10 + rnd_n(30) : bx1() - 10 - rnd_n(30); + Bullet *b = shot(SPR_ARM, x, by1() + 8, 0, -(P(1) + P(k) / 6)); + if (b) b->r = 6, b->ay = -1; + } +} +static void atk_aaron_sweat(int t) { + if (t < 140 && t % 7 == 0) { + Bullet *b = shot(SPR_DROP, bx0() + 4 + rnd_n(bx1() - bx0() - 8), by0() - 6, 0, P(1)); + if (b) b->kind = BK_GRAVITY, b->ay = 2, b->r = 3; + } +} +/* Woshua: drops fall in columns, some green (they heal) once it's cleaning you; bubbles rise and sway */ +static void atk_woshua_drops(int t) { + bool clean = false; + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].def == wf_mon_def(MON_WOSHUA) && bt.mon[i].state == 1 && bt.mon[i].alive && !bt.mon[i].gone) clean = true; + if (t < 140 && t % 10 == 0) { + /* (the green ones fall right over the SOUL: to be caught) */ + bool green = clean && (t / 10) % 4 == 1; + int x = green ? clamp_i(soul_x(), bx0() + 6, bx1() - 6) : bx0() + 6 + rnd_n(bx1() - bx0() - 12); + Bullet *b = shot(SPR_DROP, x, by0() - 6, 0, P(2)); + if (b) { + b->r = 3; + if (green) b->color = BC_GREEN, b->dmg = 1; + } + } + if (t == 150) woshua_check(&bt); +} +static void atk_woshua_bubbles(int t) { + if (t < 130 && t % 12 == 0) { + Bullet *b = shot(SPR_ORB, bx0() + 8 + rnd_n(bx1() - bx0() - 16), by1() + 6, 0, -P(1)); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)(b->x / FX), b->r = 4; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_ORB) continue; + b->y -= P(1); + b->x = P(b->a) + gfx_sin(b->t * 6) * 12 * FX / 1024; + if (b->y < P(by0() - 10)) b->kind = BK_NONE; + } +} +/* Moldbygg: molds hop across the floor; spores fall */ +static void atk_moldbygg_hops(int t) { + if (t < 120 && t % 30 == 0) { + bool left = (t / 30) % 2; + Bullet *b = shot(SPR_ORB, left ? bx0() : bx1(), by1() - 6, (left ? 1 : -1) * P(2), -P(4)); + if (b) b->kind = BK_GRAVITY, b->ay = 6, b->r = 5, b->a = 3; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_GRAVITY || b->spr != SPR_ORB || b->a <= 0) continue; + if (b->y > P(by1() - 5) && b->vy > 0) b->vy = -P(4), b->a--; /* (it bounces a few times) */ + } +} +static void atk_moldbygg_rain(int t) { + if (t < 140 && t % 5 == 0) { + Bullet *b = shot(SPR_ORB, bx0() + 4 + rnd_n(bx1() - bx0() - 8), by0() - 6, rnd_n(P(1)) - P(1) / 2, P(1)); + if (b) b->r = 3; + } +} +/* Shyren: notes swim in from the right on waves, more of them for each hum */ +static void atk_shyren_notes(int t) { + int hums = 0; + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].def == wf_mon_def(MON_SHYREN)) hums = bt.mon[i].state; + int every = 16 - hums * 2; + if (t < 140 && t % every == 0) { + Bullet *b = shot(SPR_NOTE, bx1() + 6, by0() + 8 + rnd_n(by1() - by0() - 16), -(P(2) + P(hums) / 2), 0); + if (b) b->kind = BK_SCRIPT, b->b = (int16_t)(b->y / FX), b->r = 4; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_NOTE) continue; + b->x += b->vx; + b->y = P(b->b) + gfx_sin(b->t * 8) * 10 * FX / 1024; + if (b->x < P(bx0() - 10)) b->kind = BK_NONE; + } +} + +int wf_attack_length(int atk) { (void)atk; return 160; } + +void wf_attack_run(Battle *b, int atk, int t) { + (void)b; + if (t < 0) { + board_set(atk == ATK_SHYREN_NOTES ? 160 : 130, 110); + return; + } + switch (atk) { + case ATK_AARON_ARMS: atk_aaron_arms(t); break; + case ATK_AARON_SWEAT: atk_aaron_sweat(t); break; + case ATK_WOSHUA_DROPS: atk_woshua_drops(t); break; + case ATK_WOSHUA_BUBBLES: atk_woshua_bubbles(t); break; + case ATK_MOLDBYGG_HOPS: atk_moldbygg_hops(t); break; + case ATK_MOLDBYGG_RAIN: atk_moldbygg_rain(t); break; + case ATK_SHYREN_NOTES: atk_shyren_notes(t); break; + } +} diff --git a/games/undertale/src/world.c b/games/undertale/src/world.c index 50073d31..327288f2 100644 --- a/games/undertale/src/world.c +++ b/games/undertale/src/world.c @@ -60,17 +60,29 @@ static bool boxes_meet(int ax, int ay, int aw, int ah, int bx, int by, int bw, i return ax < bx + bw && bx < ax + aw && ay < by + bh && by < ay + ah; } +/* a floor object (a bloomed bridge seed) under the point */ +static bool on_floor_obj(int x, int y) { + for (int i = 0; i < MAX_OBJS; i++) { + const Obj *o = &objs[i]; + if (o->kind != OBJ_NONE && (o->flags & OF_FLOOR) && x >= o->x + o->bx && x < o->x + o->bx + o->bw && + y >= o->y + o->by && y < o->y + o->by + o->bh) + return true; + } + return false; +} + bool world_walkable(int x, int y, int w, int h, int ignore) { /* every cell the box covers (its corners and every 4 pixels between) */ for (int yy = y;; yy += 4) { if (yy > y + h - 1) yy = y + h - 1; for (int xx = x;; xx += 4) { if (xx > x + w - 1) xx = x + w - 1; - if (!cell_walkable(xx, yy)) return false; + if (!cell_walkable(xx, yy) && !on_floor_obj(xx, yy)) return false; if (xx == x + w - 1) break; } if (yy == y + h - 1) break; } + if (ignore == WALK_FLOOR_ONLY) return true; for (int i = 0; i < MAX_OBJS; i++) { const Obj *o = &objs[i]; if (i == ignore || o->kind == OBJ_NONE || !(o->flags & OF_SOLID)) continue; @@ -126,18 +138,19 @@ void world_enter(int r, int x, int y, int dir) { obj_clear_all(); ndoors = room_doors(r, doors, 16); cam_locked = false; - /* a door's spot a little off the floor: the nearest that isn't */ - if (!player_free(pl.x, pl.y)) + room_setup(r, from); + /* a door's spot a little off the floor: the nearest that isn't (the floor the room's things make counts: a + * bridge of flowers; what stands about doesn't) */ + if (!world_walkable(pl.x + PBX, pl.y + PBY, PBW, PBH, WALK_FLOOR_ONLY)) for (int d = 1; d <= 24; d++) { static const int8_t dx[4] = {0, 0, -1, 1}, dy[4] = {1, -1, 0, 0}; int k; - for (k = 0; k < 4 && !player_free(pl.x + dx[k] * d, pl.y + dy[k] * d); k++) {} + for (k = 0; k < 4 && !world_walkable(pl.x + dx[k] * d + PBX, pl.y + dy[k] * d + PBY, PBW, PBH, WALK_FLOOR_ONLY); k++) {} if (k < 4) { pl.x = (int16_t)(pl.x + dx[k] * d), pl.y = (int16_t)(pl.y + dy[k] * d); break; } } - room_setup(r, from); world_camera(); } @@ -216,9 +229,12 @@ static bool push_rock(int sx, int sy) { return false; } if (pushed_at == g_frame || o->walking) return false; - if (!world_walkable(o->x + o->bx + sx, o->y + o->by + sy, o->bw, o->bh, i)) return false; + if (!world_walkable(o->x + o->bx + sx, o->y + o->by + sy, o->bw, o->bh, i) && + !room_rock_enters(o, o->x + sx, o->y + sy)) + return false; pushed_at = g_frame; o->x = (int16_t)(o->x + sx), o->y = (int16_t)(o->y + sy); + room_rock_moved(o); return player_free(pl.x + sx, pl.y + sy); } return false; diff --git a/games/undertale/src/world.h b/games/undertale/src/world.h index 3df2f043..a217bfd3 100644 --- a/games/undertale/src/world.h +++ b/games/undertale/src/world.h @@ -26,7 +26,8 @@ enum { OF_FRONT = 64, /* drawn over everything else */ OF_BACK = 128, /* drawn under everything else */ OF_DARK = 256, /* a silhouette */ - OF_FLIP = 512 /* drawn mirrored */ + OF_FLIP = 512, /* drawn mirrored */ + OF_FLOOR = 1024 /* its box is floor to walk on (a bloomed bridge seed over water) */ }; #define MAX_OBJS 48 typedef struct { @@ -65,6 +66,7 @@ const RoomInfo *world_room_info(void); void world_enter(int room, int x, int y, int dir); /* (x, y) Frisk's top-left; no fade */ void world_update(uint32_t keys, uint32_t pressed); void world_draw(void); +#define WALK_FLOOR_ONLY (-2) /* (world_walkable's ignore: the floor alone, nothing solid standing on it) */ bool world_walkable(int x, int y, int w, int h, int ignore); /* a box on the map, objects too (not `ignore`) */ void world_camera(void); /* follows Frisk, inside the room */ Obj *obj_new(int kind, int x, int y); @@ -84,6 +86,9 @@ Obj *obj_rock(int x, int y, int name, int event); /* pushed by walking into it void obj_set_box(Obj *o, int bx, int by, int bw, int bh); bool near_frisk(const Obj *o, int d); /* within d pixels (their feet) */ bool room_ice(int x, int y); /* rooms.c: ice there (Frisk slides) */ +/* rooms.c: a pushed rock that the floor stops (it may go into water, a bridge seed), then where it went */ +bool room_rock_enters(Obj *o, int x, int y); +void room_rock_moved(Obj *o); bool pl_sliding(void); /* the room fades out, then in: room changes in the middle */ void world_fade_to(int room, int x, int y, int dir); diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index ee13235c..4c7fd151 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -1,11 +1,11 @@ #!/usr/bin/env python3 """Checks of Undertale on a computer (make test): the host build, with AddressSanitizer and UBSan, through the menus, every battle, the saves, the -whole Ruins and the whole of Snowdin. +whole Ruins, the whole of Snowdin and Waterfall's west half. python3 tests/check.py build/play [--quick] ---quick skips playing the whole Ruins and Snowdin (the longest parts).""" +--quick skips playing the whole Ruins, Snowdin and Waterfall (the longest parts).""" import os import re import shutil @@ -31,6 +31,9 @@ ROOMS = {m.group(1): int(m.group(2)) for m in re.finditer(r"#define ROOM_(\w+) (\d+)", open(os.path.join(HERE, "..", "src", "data.h")).read())} FORM_SNOWDRAKE, FORM_PAPYRUS = 19, 31 +FORM_AARON, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, FORM_MOLDBYGG_WOSHUA, FORM_SHYREN = \ + range(32, 39) +ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT = range(17, 22) def run(args, frames, saves=None, what=""): @@ -98,6 +101,21 @@ def check(cond, msg): s = run(["--battle", str(FORM_PAPYRUS), "--path", "spare"], 6000, what="Papyrus, captured") check(s and s["mode"] == MODE_WORLD and s["hp"] == 1, f"Papyrus did not capture Frisk: {s}") +# Waterfall's battles: fled from, fought, and each spared its own way (Aaron out-flexed, Woshua's green caught after +# asking to be cleaned, Moldbygg hugged then let go, Shyren hummed along with) +for form in range(FORM_AARON, FORM_SHYREN + 1): + s = run(["--god", "--battle", str(form), "--path", "flee"], 1500, what=f"battle {form}, fleeing") + check(s and s["mode"] == MODE_WORLD, f"battle {form}: fleeing did not end it: {s}") +for form in (FORM_AARON, FORM_WOSHUA, FORM_MOLDBYGG, FORM_SHYREN): + s = run(["--god", "--battle", str(form), "--path", "fight"], 4000, what=f"battle {form}, fighting") + check(s and s["mode"] == MODE_WORLD and s["kills"] >= 1, f"battle {form}: FIGHT did not win it: {s}") +for form, seq, gold in ((FORM_AARON, "1,1,1", 30), (FORM_WOSHUA, "1,1,1", 25), (FORM_WOSHUA_AARON, "1,1@2,1@2,1@2", 55), + (FORM_MOLDBYGG, "1,3", 20), (FORM_MOLDBYGG_WOSHUA, "1,3,1@2,1@2,1@2", 45), + (FORM_SHYREN, "2,2,2,2,2", 20)): + s = run(["--god", "--battle", str(form), "--path", "seq:" + seq], 9000, what=f"battle {form}, sparing") + check(s and s["mode"] == MODE_WORLD and s["kills"] == 0 and s["gold"] == gold, + f"battle {form}: the friendly way did not spare it: {s}") + # the shop in Snowdin: a Cinnamon Bunny for 25G; Papyrus's date: his phone number s = run(["--name", "Frisk", "--noenc", "--room", str(ROOMS["SNOWTOWN"]), "--at", "446,1092", "--gold", "100", "--keys", "2-24:up,60:z,90:down,100:down,110:down,120:z,140:z,170:x,190:down,200:down,210:down,220:z"], 400, what="the shop") @@ -140,7 +158,7 @@ def check(cond, msg): if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["SNOWDIN1"]), "--at", "34,392", "--path-file", os.path.join(HERE, "snowdin.path")], 30000, what="Snowdin") - check(s and s["mode"] == MODE_END, f"Snowdin did not end on the way to Waterfall: {s}") + check(s and s["mode"] == MODE_WORLD and s["room"] == ROOMS["WF1"], f"Snowdin did not lead on to Waterfall: {s}") if s: for name, v in (("BRANCH", 1), ("SANS_MET", 1), ("PAP_SENTRY", 1), ("DOGGO", 1), ("ELECMAZE", 2), ("WORDSEARCH", 1), ("SNOWPUZZLE", 1), ("DOGI", 1), ("XOXO1", 1), ("XOXO2", 1), ("XOXO3", 1), @@ -149,6 +167,24 @@ def check(cond, msg): check(flag(s, name) == v, f"Snowdin: F_{name} is {flag(s, name)}, not {v}") check(s["kills"] == 0, f"Snowdin: {s['kills']} killed on the friendly way") +# Waterfall's west half, the friendly way: Monster Kid, Grillby's with Sans, the tutu, Papyrus's report, the bridge +# seeds (and the secret one to the quiche), the wishing room, Undyne's spears, the telescope, the punch card, the marsh +# (the ballet shoes), the bird, +# Onionsan, the piano and the artifact, Shyren, the umbrellas, Monster Kid in the rain, the bridge cut +if not QUICK: + s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["WF1"]), "--at", "30,1480", "--path-file", + os.path.join(HERE, "waterfall.path")], 45000, what="Waterfall") + check(s and s["mode"] == MODE_END and s["room"] == ROOMS["WF_BRIDGE"], f"Waterfall did not end at the bridge: {s}") + if s: + for name, v in (("WF_MK", 1), ("GRILLBYS", 1), ("WF_TUTU", 1), ("WF_UNDYNE1", 1), ("SEEDS1", 1), ("SEEDS2", 1), + ("SEEDS3", 1), ("WF_QUICHE", 1), ("CHASE1", 1), ("WF_TELESCOPE", 1), ("WF_PUNCH", 1), ("WF_BALLET", 1), + ("WF_BIRD", 1), ("WF_ONION", 2), ("PIANO", 1), ("WF_ARTIFACT", 1), ("SHYREN", 1), + ("UMBRELLA", 3), ("MK_RAIN", 2), ("WF_BRIDGE", 1)): + check(flag(s, name) == v, f"Waterfall: F_{name} is {flag(s, name)}, not {v}") + check(s["kills"] == 0, f"Waterfall: {s['kills']} killed on the friendly way") + for item in (ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT): + check(item in s["items"], f"Waterfall: item {item} not picked up: {s['items']}") + if failures: print("\n".join("FAIL " + f for f in failures)) sys.exit(1) diff --git a/games/undertale/tests/play.c b/games/undertale/tests/play.c index 80026538..6a7cbe45 100644 --- a/games/undertale/tests/play.c +++ b/games/undertale/tests/play.c @@ -125,6 +125,10 @@ static uint32_t path_keys(int f) { path_at = e ? e + 1 : path_at + strlen(path_at); return K_Z; } + if (text_menu_sel() < 100 && text_menu_cols() == 2) { /* (two columns: the row, then the column) */ + if (sel / 2 != n / 2) return sel / 2 < n / 2 ? K_DOWN : K_UP; + return sel < n ? K_RIGHT : K_LEFT; + } return sel < n ? (text_menu_sel() >= 100 ? K_RIGHT : K_DOWN) : (text_menu_sel() >= 100 ? K_LEFT : K_UP); } /* a text in the way: read on (Z every other frame) */ @@ -167,7 +171,13 @@ static uint32_t path_keys(int f) { switch (battle_ui()) { case BUI_MENU: return bt.button < want ? K_RIGHT : bt.button > want ? K_LEFT : K_Z; case BUI_TARGET: - if (seq && bt.button == 1) return bt.target < seq_target ? K_DOWN : bt.target > seq_target ? K_UP : K_Z; + if (seq && bt.button == 1) { + /* (the list holds those still there: "the second" is the last when one has gone) */ + int here = 0; + for (int i = 0; i < bt.nmon; i++) here += bt.mon[i].alive && !bt.mon[i].gone; + int want_t = seq_target < here ? seq_target : here - 1; + return bt.target < want_t ? K_DOWN : bt.target > want_t ? K_UP : K_Z; + } return K_Z; case BUI_ACTS: { int n = seq ? seq_act : atoi(path_at + 4); @@ -435,6 +445,11 @@ int main(int argc, char **argv) { } if (gfx_dropped) printf("dropped %d draw commands\n", gfx_dropped); if (getenv("BLK_STATS")) fprintf(stderr, "blocks unpacked %u, at most %u in a frame\n", blk_unpacked, blk_most_in_frame); + if (getenv("OBJS")) /* (the room's objects at the end: kind, name, where, its box) */ + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].kind != OBJ_NONE) + fprintf(stderr, "obj %d kind %d name %d at %d,%d box %d,%d %dx%d spr %d\n", i, objs[i].kind, objs[i].name, objs[i].x, + objs[i].y, objs[i].bx, objs[i].by, objs[i].bw, objs[i].bh, objs[i].spr[0]); printf("END mode %d room %d at %d,%d hp %d lv %d gold %d kills %d path %s\nFLAGS", g_mode, g_room, pl.x, pl.y, sv.hp, sv.lv, sv.gold, sv.kills, path_at && *path_at ? "left" : "done"); for (int i = 0; i < FLAG_COUNT; i++) diff --git a/games/undertale/tests/waterfall.path b/games/undertale/tests/waterfall.path new file mode 100644 index 00000000..7f133bb1 --- /dev/null +++ b/games/undertale/tests/waterfall.path @@ -0,0 +1,235 @@ +# Waterfall's west half from Snowdin's fog (play it with --room 85 --at 30,1480 --name Frisk --noenc --god), the +# friendly way, as in snowdin.path. Monster Kid, Sans's booth (Grillby's), the echo flowers +go:600,1480 +talk +go:880,1458 +u +z +talk +w30 +talk +# the falls: the tutu up north, the stream's rocks, Papyrus's report to Undyne from the tall grass +go:1100,1480 +go:1250,1460 +go:1250,1300 +go:1240,1256 +u +z +talk +go:1250,1400 +go:1250,1470 +go:1370,1505 +go:1600,1505 +go:1780,1500 +talk +w60 +talk +# the first bridge seeds: four pushed down to the path and on into the water +go:2240,1485 +go:2280,1425 +2305,1425 +go:2320,1405 +2320,1475 +go:2280,1425 +2280,1475 +go:2280,1465 +2305,1465 +go:2300,1485 +2365,1485 +go:2260,1485 +2385,1485 +go:2300,1425 +2300,1475 +go:2280,1485 +2405,1485 +go:2320,1445 +2320,1475 +go:2300,1485 +2425,1485 +go:2500,1485 +# the second: first the secret bridge to the quiche (all four seeds), then the bell, then three across the channel +go:2900,1490 +go:3000,1345 +3000,1455 +go:2980,1465 +3025,1465 +go:3040,1445 +3040,1520 +go:3000,1305 +3000,1455 +go:2980,1465 +3045,1465 +go:3060,1445 +3060,1520 +go:2940,1365 +3045,1365 +go:3060,1345 +3060,1517 +go:3040,1515 +3040,1525 +3062,1525 +go:2940,1325 +3045,1325 +go:3060,1305 +3060,1517 +go:3040,1515 +3040,1525 +3082,1525 +3140,1525 +go:3200,1525 +go:3270,1500 +u +z +talk +3190,1500 +3190,1525 +3100,1525 +go:3040,1525 +go:3020,1210 +u +z +talk +go:2960,1345 +2960,1258 +go:2980,1245 +2870,1245 +go:3000,1345 +3000,1258 +go:3020,1245 +2850,1245 +go:2960,1385 +2960,1258 +go:2980,1245 +2830,1245 +go:2780,1245 +go:2729,1240 +2729,1200 +w30 +# the wishing room, the history boardwalk, Undyne's spears to the tall grass +go:2800,1060 +go:3120,830 +go:3125,700 +go:3460,600 +go:4010,560 +go:4600,560 +go:5200,560 +go:5760,560 +go:6400,560 +go:6700,560 +talk +w30 +talk +# the crystals' SAVE, Sans's telescope, the Nice Cream cart and the punch card upstairs, the bird +go:7248,562 +u +z +talk +go:7880,540 +u +z +talk +go:7975,560 +go:7900,130 +u +z +talk +go:8050,130 +u +z +talk +# down the ladder into the marsh: the ballet shoes in the tall grass, an echo flower, the history sign +go:8140,560 +go:8140,700 +go:7590,1250 +u +z +talk +go:8445,1132 +u +z +talk +go:8850,840 +u +z +talk +go:8140,700 +go:8140,560 +go:8000,560 +go:8300,560 +go:8440,560 +r +z +talk +w60 +# Onionsan, the piano's song (the artifact), Shyren (hummed along with) +go:8700,600 +go:8900,600 +talk +go:9300,600 +go:9600,600 +talk +go:9850,620 +go:10070,640 +go:10066,412 +u +z +pick:0 +pick:4 +pick:0 +pick:3 +pick:4 +pick:1 +pick:1 +pick:3 +talk +go:10150,330 +go:10150,240 +go:10150,162 +u +z +talk +go:10137,612 +d +z +talk +seq:2,2,2,2,2 +talk +# the umbrella for the statue, another for Monster Kid, the rain down to the castle's view +go:10400,640 +go:11150,640 +u +z +talk +go:10760,640 +u +z +pick:0 +talk +go:11150,640 +u +z +talk +go:11400,662 +go:11900,662 +talk +go:12500,662 +go:12760,900 +talk +go:12760,1500 +go:12900,1700 +talk +go:13700,1700 +talk +go:14300,1700 +go:14720,1700 +talk +# the last SAVE before the bridge, Undyne's spears from below, the bridge cut +go:15138,1665 +u +z +talk +go:15400,1700 +go:16000,1700 +go:16800,1700 +go:17400,1700 +talk diff --git a/games/undertale/tools/fetch.py b/games/undertale/tools/fetch.py index 657aea85..de4c4741 100644 --- a/games/undertale/tools/fetch.py +++ b/games/undertale/tools/fetch.py @@ -46,6 +46,12 @@ "Rabbit_Lady_and_Cinnamon", "Red_Bird", "Red_Demon", "Scarf_Lady", "Slime_family", "Ugly_Fish", "Library_Lizard", "Library_Loox", "Knock_lover", "Lady_Garf", "Wrap_Mouse", "Innkeeper's_child", "Snoring_guests", "Mad_Mew_Mew", "Snowdrake's_mother", "Snowdrake's_father", "Bonetrousle", + # Waterfall + "Waterfall", "Waterfall/Puzzles", "Aaron", "Woshua", "Moldbygg", "Shyren", "Temmie", "Temmie_Village", + "Mad_Dummy", "Undyne", "Undyne/In_battle", "Onionsan", "Gerson", "Echo_Flower", "Bridge_seed", + "Undyne's_House", "Napstablook's_house", "Garbage_Dump", "Shyren/In_battle", "Riverman", "Piano_puzzle", + "Legendary_Artifact", "Astronaut_Food", "Glamburger", "Hot_Dog...?", "Cloudy_Glasses", "Torn_Notebook", + "Stained_Apron", "Burnt_Pan", "Toy_Knife", "Temmie_Flakes", "Tem_Shop", "Small_bird", "Lemon_Bread", "Tough_Glove", "Manly_Bandanna", "Old_Tutu", "Ballet_Shoes", "Cinnamon_Bunny", "Bisicle", "Unisicle", "Nice_Cream_(item)", "Snowman_Piece", "Snowman_Piece", "Punch_Card", "Dog_Residue", "Abandoned_Quiche", "Astronaut_Food", "Hot_Dog...?", "Hot_Cat", "Spaghetti", "Glamburger", "Sea_Tea", "Temmie_Flakes", diff --git a/games/undertale/tools/pack.py b/games/undertale/tools/pack.py index 631376fb..60cbd01c 100644 --- a/games/undertale/tools/pack.py +++ b/games/undertale/tools/pack.py @@ -484,6 +484,21 @@ def collision(area, r): big = np.zeros((Y1 - Y0, X1 - X0), bool) xs0, ys0, xs1, ys1 = max(X0, 0), max(Y0, 0), min(X1, W), min(Y1, H) big[ys0 - Y0:ys1 - Y0, xs0 - X0:xs1 - X0] = np.isin(area.idx[ys0:ys1, xs0:xs1], list(walk_idx)) + if r.get("tufts"): + # black ground with grass tufts on it, black nothing without: black is floor only within `tufts` pixels of a + # tuft (a little blot of another colour with black all around it) + win = np.zeros(big.shape, area.idx.dtype) + win[ys0 - Y0:ys1 - Y0, xs0 - X0:xs1 - X0] = area.idx[ys0:ys1, xs0:xs1] + black = np.isin(win, [i for i, k in enumerate(area.rgb) if k == (0, 0, 0) and i != area.transparent]) + lab, n = ndimage.label(~black, np.ones((3, 3))) + tuft = np.zeros_like(black) + for i, sl in enumerate(ndimage.find_objects(lab)): + hh, ww = sl[0].stop - sl[0].start, sl[1].stop - sl[1].start + if hh <= 12 and ww <= 12: + ring = ndimage.binary_dilation(lab[sl] == i + 1, iterations=1) & (lab[sl] != i + 1) + if black[sl][ring].all(): + tuft[sl] |= lab[sl] == i + 1 + big &= ~black | (ndimage.distance_transform_edt(~tuft) <= r["tufts"]) sub = big[margin:margin + ch * 4, margin:margin + cw * 4] if r.get("open"): # floors of many colours (a carpet, planks): its floor_rects alone say sub = np.ones_like(sub) @@ -516,6 +531,13 @@ def collision(area, r): cells &= ~near.reshape(ch, 4, cw, 4).any(axis=(1, 3)) piles = pile_big[margin:margin + ch * 4, margin:margin + cw * 4] cells |= piles.reshape(ch, 4, cw, 4).mean(axis=(1, 3)) >= 0.5 + if r.get("close", area.spec.get("close")): + # a floor's own lines one cell thin (the seams between planks) aren't walls: a cell with floor either side + up, down = np.zeros_like(cells), np.zeros_like(cells) + up[1:], down[:-1] = cells[:-1], cells[1:] + left, right = np.zeros_like(cells), np.zeros_like(cells) + left[:, 1:], right[:, :-1] = cells[:, :-1], cells[:, 1:] + cells = cells | (up & down) | (left & right) if r.get("floor_rects"): keep = np.zeros_like(cells) for fx, fy, fw, fh in r["floor_rects"]: diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index 31a80b56..1ffe9c1b 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -103,6 +103,30 @@ ("erase", 3376, 1036, 30, 66, "ring"), ("erase", 2212, 854, 32, 50, "ring"), ("erase", 2262, 580, 36, 52, "ring"), ])) +# Waterfall: dark blue floors whose colours its walls share too, so a room's floor is its rectangles +WF_FLOOR = [(54, 47, 121), (20, 26, 73)] +WF_WATER = [(27, 33, 90), (27, 21, 72)] +WF_CYAN = [(123, 251, 254), (47, 234, 255)] +AREAS.append(dict(name="waterfall", map="Waterfall_map.png", floor=WF_FLOOR, margin=0, close=True, patches=[ + # the people the game moves about (they're the game's objects here): Monster Kid, the fish by the first + # echo flower, Undyne (her black ledges kept black), Woshua, the Goner Kid, Onionsan, Shyren, the grey + # figure by the piano, Aaron + ("erase", 716, 1498, 28, 36, "ring"), ("erase", 716, 1404, 34, 50, "ring"), + ("erase", 1800, 1336, 46, 62, "ring", []), ("copy", 3398, 554, 40, 38, 3438, 554), + ("copy", 4042, 541, 24, 32, 4002, 541), ("erase", 4354, 370, 42, 60, "ring", []), + ("copy", 9130, 528, 72, 84, 9232, 528), ("copy", 10100, 630, 34, 40, 10134, 630), + ("copy", 10130, 682, 32, 58, 10168, 682), ("erase", 11897, 614, 28, 36, "ring"), + ("copy", 14530, 1636, 42, 70, 14476, 1636), ("copy", 15806, 1714, 40, 66, 15846, 1714), + # the bridge seeds (the game's objects too) and the bridges they make, drawn solved + *[("erase", x, y, 20, 20, WF_FLOOR) for x, y in [(2300, 1420), (2280, 1440), (2320, 1440), (2300, 1460), + (2960, 1340), (3000, 1340), (2960, 1380), (3000, 1380)]], + # the tutu and the artifact (objects, gone once taken) + ("erase", 1240, 1240, 22, 10, [(23, 13, 43), (27, 21, 72), (27, 33, 90)]), + ("erase", 10156, 150, 12, 7, [(27, 21, 72), (27, 33, 90), (54, 47, 121)]), + ("fill", 10156, 157, 12, 1, (0, 0, 0)), ("fill", 10156, 158, 12, 3, (99, 102, 135)), + ("erase", 2380, 1500, 80, 20, "ring"), ("erase", 2850, 1240, 30, 80, "ring"), ("erase", 3040, 1540, 80, 20, "ring"), +])) + ROOMS = [ # the landing: the bed of golden flowers, a hallway, the Delta Rune arch dict(name="area1", area="ruins", rect=(0, 5900, 680, 260), title="Ruins", margin=0, @@ -278,7 +302,8 @@ dict(name="townnorth", area="snowtown", rect=(1400, 700, 640, 260), title="Snowdin Town"), dict(name="towndock", area="snowtown", rect=(1400, 480, 410, 220), title="Snowdin Town"), dict(name="fogroom", area="snowtown", rect=(3260, 960, 360, 240), title="Snowdin Town", - fix=[("walk", 3440, 1084, 180, 48)]), # the way on: Waterfall's blue ground + fix=[("walk", 3440, 1084, 180, 48)], # the way on: Waterfall's blue ground + doors=[((3612, 1080, 8, 56), "wf1", (4, 1480), "right")]), # the interiors: their floors are many colours, so their floor and furniture are rectangles dict(name="inn1", area="snowtown", rect=(500, 740, 260, 220), title="Snowed Inn", open=True, margin=0, floor_rects=[(520, 800, 222, 100), (600, 900, 80, 60), (536, 756, 44, 48)], @@ -310,11 +335,68 @@ dict(name="shed", area="snowtown", rect=(2550, 710, 290, 245), title="Snowdin Town", open=True, margin=0, floor_rects=[(2580, 770, 180, 120), (2560, 886, 80, 64)], fix=[("wall", 2580, 730, 56, 100)], doors=[((2560, 945, 80, 8), "snowtown", (2400, 1096), "down")]), + # Waterfall, the west: from Snowdin to the bridge Undyne cuts + dict(name="wf1", area="waterfall", rect=(0, 1330, 1170, 310), title="Waterfall", + fix=[("walk", 1040, 1505, 20, 135), ("walk", 1150, 1452, 20, 56)], + doors=[((0, 1450, 4, 96), "fogroom", (3580, 1088), "left")]), + dict(name="wf_falls", area="waterfall", rect=(1170, 1140, 180, 500), title="Waterfall", floor_colors=WF_WATER, + floor_rects=[(1170, 1446, 180, 194), (1236, 1326, 48, 124), (1180, 1236, 160, 96)], + fix=[("walk", 1170, 1452, 14, 56), ("walk", 1336, 1500, 14, 36), ("walk", 1236, 1396, 48, 56)]), + dict(name="wf_falls_low", area="waterfall", rect=(1030, 1640, 450, 180), title="Waterfall", floor_colors=WF_WATER, + fix=[("walk", 1040, 1640, 20, 14), ("walk", 1160, 1676, 20, 80), ("walk", 1360, 1676, 20, 80), + ("wall", 1180, 1640, 160, 14)]), + dict(name="wf2", area="waterfall", rect=(1350, 1140, 750, 500), title="Waterfall", + fix=[("walk", 1350, 1500, 16, 36), ("walk", 1756, 1500, 172, 36)]), # (the tall grass) + dict(name="wf_seeds1", area="waterfall", rect=(2100, 1300, 520, 340), title="Waterfall"), + dict(name="wf_seeds2", area="waterfall", rect=(2620, 1120, 500, 520), title="Waterfall", + fix=[("walk", 2716, 1228, 46, 34), ("walk", 2810, 1494, 100, 28)], # (the doorway, the planks) + doors=[((2716, 1232, 46, 24), "wf_wish", (2727, 1080), "up")]), + # (reached by the secret bridge of seeds, then the planks) + dict(name="wf_quiche", area="waterfall", rect=(3120, 1340, 260, 300), title="Waterfall", floor_colors=WF_WATER, + floor_rects=[(3180, 1440, 180, 100)], fix=[("walk", 3120, 1540, 100, 20)]), + dict(name="wf_wish", area="waterfall", rect=(2640, 780, 740, 340), title="Waterfall", floor_colors=WF_WATER, + floor_rects=[(2660, 1040, 700, 62), (3098, 816, 64, 226), (2712, 1100, 50, 22)], + fix=[("walk", 3112, 812, 36, 50)], doors=[((2712, 1118, 50, 4), "wf_seeds2", (2729, 1250), "down")]), + dict(name="wf_hist", area="waterfall", rect=(2980, 400, 530, 380), title="Waterfall"), + dict(name="wf_chase1", area="waterfall", rect=(4000, 300, 2520, 400), title="Waterfall"), + dict(name="wf_grass1", area="waterfall", rect=(6520, 400, 1320, 300), title="Waterfall", floor_colors=WF_WATER, + floor_rects=[(6520, 540, 360, 72), (6880, 560, 960, 44)], fix=[("walk", 6520, 544, 360, 64)]), + dict(name="wf_sans2", area="waterfall", rect=(7840, 0, 360, 600), title="Waterfall", floor_colors=WF_WATER, + floor_rects=[(7860, 92, 300, 118), (7956, 206, 38, 360), (7840, 556, 360, 50)], + fix=[("walk", 7956, 420, 38, 140)]), + # the marsh: its shallow glowing water and its grassy black ground are walked on (plain black is nothing, the + # planks cross it); the boardwalk ends at a gap the bird carries Frisk over, a ladder goes down into the marsh + dict(name="wf_marsh_top", area="waterfall", rect=(8200, 400, 450, 200), title="Waterfall", + floor_colors=WF_WATER + [(23, 13, 43), (0, 0, 0)], tufts=44, floor_rects=[(8200, 556, 284, 64), (8536, 556, 114, 64)]), + dict(name="wf_marsh_mid", area="waterfall", rect=(7400, 600, 1250, 200), title="Waterfall", + floor_colors=[(0, 0, 0)] + WF_CYAN, tufts=44, + fix=[("walk", 8140, 600, 20, 84)]), + dict(name="wf_marsh", area="waterfall", rect=(7400, 800, 1650, 660), title="Waterfall", + floor_colors=[(0, 0, 0)] + WF_CYAN, tufts=44, + fix=[("walk", x, y - 2, w, h + 4) for x, y, w, h in [(7821, 825, 58, 55), (7921, 945, 58, 55), (8301, 1005, 58, 55), + (8741, 1005, 58, 55), (8561, 1145, 58, 55), (7941, 1220, 59, 60), (8501, 1360, 59, 57), (8741, 1440, 56, 17)]]), + dict(name="wf_onion", area="waterfall", rect=(8650, 500, 1250, 300), title="Waterfall", floor_colors=WF_WATER, + fix=[("walk", 8648, 560, 16, 40), ("walk", 9800, 600, 20, 58), ("walk", 9860, 640, 40, 58)]), + dict(name="wf_piano", area="waterfall", rect=(9900, 20, 600, 780), title="Waterfall", floor_colors=WF_WATER, + floor_rects=[(10060, 140, 200, 64), (10136, 200, 48, 104), (10118, 300, 64, 100), (10040, 398, 220, 64), + (10118, 460, 64, 140), (10040, 598, 220, 124), (9900, 638, 142, 46), (10258, 638, 242, 46)]), + dict(name="wf_statue", area="waterfall", rect=(10500, 520, 1000, 260), title="Waterfall", floor_colors=WF_WATER, + fix=[("walk", 10500, 640, 1000, 60)]), + # (the rain's puddles are black) + dict(name="wf_rain1", area="waterfall", rect=(11500, 520, 1360, 300), title="Waterfall", + floor_colors=WF_WATER + [(0, 0, 0)], floor_rects=[(11500, 636, 1360, 68), (12740, 700, 80, 120)]), + dict(name="wf_rain2", area="waterfall", rect=(12700, 820, 220, 980), title="Waterfall", floor_colors=WF_WATER), + dict(name="wf_castle", area="waterfall", rect=(12920, 1560, 1480, 260), title="Waterfall", floor_colors=WF_WATER, + fix=[("walk", 12920, 1676, 1480, 48)]), + dict(name="wf_aaron", area="waterfall", rect=(14400, 1560, 960, 260), title="Waterfall", floor_colors=WF_WATER), + dict(name="wf_bridge", area="waterfall", rect=(15360, 1540, 2300, 460), title="Waterfall"), ] # rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side # by side with a gap, a door each way along the rows y .. y + h LINKS = [ + ("h", "wf_hist", "wf_chase1", 540, 60), + ("v", "wf_wish", "wf_hist", 3112, 36, 818), ("h", "snowdin1", "snowdin2", 404, 52), ("h", "snowdin2", "snowdin3", 404, 52), ("h", "snowdin3", "snowdin4", 404, 52), diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index 79597cdc..d93bf791 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -106,9 +106,54 @@ def gen_heartbullet(): return [im] +def gen_spear(): + # Undyne's spear: a shaft, a head on top + im = _img(7, 40) + d = ImageDraw.Draw(im) + d.polygon([(3, 0), (6, 8), (4, 8), (4, 39), (2, 39), (2, 8), (0, 8)], fill=(255, 255, 255, 255)) + return [im] + + +def gen_note(): + im = _img(9, 11) + d = ImageDraw.Draw(im) + d.ellipse([0, 6, 5, 10], fill=(255, 255, 255, 255)) + d.rectangle([4, 0, 5, 8], fill=(255, 255, 255, 255)) + d.line([(5, 0), (8, 3)], fill=(255, 255, 255, 255)) + return [im] + + +def gen_drop(): + im = _img(7, 10) + d = ImageDraw.Draw(im) + d.polygon([(3, 0), (6, 6), (5, 9), (1, 9), (0, 6)], fill=(255, 255, 255, 255)) + return [im] + + +def gen_arm(): + # a flexing arm: the upper arm along, the forearm up, a fist + im = _img(16, 14) + d = ImageDraw.Draw(im) + d.rectangle([0, 9, 9, 13], fill=(255, 255, 255, 255)) + d.ellipse([3, 6, 9, 12], fill=(255, 255, 255, 255)) + d.rectangle([9, 3, 13, 13], fill=(255, 255, 255, 255)) + d.ellipse([9, 0, 15, 5], fill=(255, 255, 255, 255)) + return [im] + + +def gen_debris(): + # a rock riding the stream + im = _img(16, 12) + d = ImageDraw.Draw(im) + d.ellipse([0, 1, 15, 11], fill=(90, 84, 128, 255), outline=(20, 16, 40, 255)) + d.line([(4, 4), (8, 3)], fill=(150, 140, 190, 255)) + return [im] + + GEN = {"otile": gen_otile, "snowball": gen_snowball, "bone": gen_bone, "orb": gen_orb, "snowflake": gen_snowflake, "iceshard": gen_iceshard, "present": gen_present, "knife": gen_knife, "dogpaw": gen_dogpaw, - "heartbullet": gen_heartbullet} + "heartbullet": gen_heartbullet, "spear": gen_spear, "note": gen_note, "drop": gen_drop, "arm": gen_arm, + "debris": gen_debris} SNOW_CLEAR = [(133, 163, 216), (114, 129, 177), (139, 163, 186), (180, 192, 201), (195, 207, 216)] PAP_GIF = "move:Papyrus_screenshot_back_and_forth.gif:0,280,640,450:" @@ -240,6 +285,36 @@ def gen_heartbullet(): ("papyrus_b", "wiki:Papyrus_battle.png", {"feet": True, "clear_bg": True}), ("papyrus_hurt", "wiki:Papyrus_battle_hurt.png", {"feet": True, "clear_bg": True}), ("papyrus_confused", "wiki:Papyrus_battle_confused.gif", {"feet": True, "clear_bg": True, "dedupe": True}), + # Waterfall: who walks about, the bridge seeds, the bullets + ("mk_ow", "wiki:Monster_Kid_overworld.png", {"feet": True}), + ("mk_ow_l", "wiki:Monster_Kid_overworld.png", {"feet": True, "mirror": True}), + ("undyne_ow", "wiki:Undyne_overworld_armor.png", {"feet": True}), + ("undyne_throw", "wiki:Undyne_overworld_spear.gif", {"feet": True, "dedupe": True}), + ("onionsan", "wiki:Onionsan_overworld.png", {"feet": True}), + ("onionsan_up", "wiki:Onionsan_overworld_surface.png", {"feet": True}), + ("shyren_ow", "wiki:Shyren_overworld.png", {"feet": True}), + ("aaron_ow", "wiki:Aaron_overworld.png", {"feet": True}), + ("woshua_ow", "wiki:Woshua_overworld.gif", {"feet": True}), + ("seed", "wiki:Bridge_Seed_overworld.png", {"keep": True}), + ("bloom", "wiki:Bridge_Seed_overworld_flower.png", {"keep": True}), + # what lies about Waterfall to be picked up (cut from the map, its floor made see-through): the tutu, the + # artifact on its pedestal + ("tutu", "map:Waterfall_map.png:1240,1240,22,10", {"keep": True, "clear": [(23, 13, 43), (27, 21, 72), (27, 33, 90)]}), + ("artifact", "map:Waterfall_map.png:10156,150,12,11", + {"keep": True, "clear": [(27, 21, 72), (27, 33, 90), (54, 47, 121), (99, 102, 135)]}), + ("spear", "gen:spear", {"center": True}), + ("note", "gen:note", {"center": True}), + ("drop", "gen:drop", {"center": True}), + ("arm", "gen:arm", {"center": True}), + ("debris", "gen:debris", {"center": True}), + # Waterfall's monsters + ("aaron_b", "wiki:Aaron_battle_static.png", {"feet": True, "clear_bg": True}), + ("aaron_hurt", "wiki:Aaron_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("woshua_b", "wiki:Woshua_battle_idle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 30}), + ("woshua_hurt", "wiki:Woshua_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("moldbygg_b", "wiki:Moldbygg_battle_idle.gif", {"feet": True, "clear_bg": True, "every": 6}), + ("shyren_b", "wiki:Shyren_battle.png", {"feet": True, "clear_bg": True}), + ("shyren_turned", "wiki:Shyren_battle_turned.png", {"feet": True, "clear_bg": True}), ] + [ # the intro's pictures, the title, GAME OVER ("introimage", "demo:spr_introimage", {"keep": True, "clear_black": True}), diff --git a/tools/release.py b/tools/release.py index b8b05e0b..6faf9e72 100644 --- a/tools/release.py +++ b/tools/release.py @@ -27,9 +27,9 @@ "on its own"), "hollowknight": ("Hollow Knight", "from King's Pass to Hornet in Greenpath. Too big to share the calculator with " "NumPlay: install it on its own"), - "undertale": ("Undertale", "the Ruins and Snowdin, from the bed of golden flowers to the edge of Waterfall: Flowey, " - "Toriel, Sans, Papyrus and every puzzle, the rest of the Underground to come. Too big to share the " - "calculator with NumPlay: install it on its own"), + "undertale": ("Undertale", "the Ruins, Snowdin and half of Waterfall, from the bed of golden flowers to the bridge " + "Undyne cuts: Flowey, Toriel, Sans, Papyrus, Monster Kid, Undyne's spears and every puzzle, the rest " + "of the Underground to come. Too big to share the calculator with NumPlay: install it on its own"), "championisland": ("Champion Island", "the Doodle Champion Island Games. Too big to share the calculator with " "NumPlay: install it on its own"), "numpowder": ("NumPowder", "The Powder Toy on the calculator: sand, water, fire, acid, electricity and nearly 200 " From 21340aa949cd0e9c2987370ddedb8d9bf2db035a Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 05:17:37 +0000 Subject: [PATCH 09/19] Undertale: Waterfall's marsh the way the game has it The marsh south of the telescope room is now the way on, as on the wiki: its land is black and its bright blue water is crossed by planks, down the ladder past Loren, through the ballet shoes' tall grass and up onto the narrow black path by Onionsan's water. The small bird waits across the gap of bright water, out of reach from this side. The test path walks the marsh. --- games/undertale/README.md | 2 +- games/undertale/docs/onionsan.png | Bin 1548 -> 2002 bytes games/undertale/src/data.bin | Bin 721797 -> 721854 bytes games/undertale/src/data.h | 111 ++++++++++++++------------- games/undertale/src/wf1.c | 16 ++-- games/undertale/tests/check.py | 5 +- games/undertale/tests/waterfall.path | 26 +++---- games/undertale/tools/pack.py | 15 ---- games/undertale/tools/rooms.py | 21 +++-- games/undertale/tools/sprites.py | 5 +- 10 files changed, 90 insertions(+), 111 deletions(-) diff --git a/games/undertale/README.md b/games/undertale/README.md index 0160f77e..a822b6d5 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -25,7 +25,7 @@ * **The whole Ruins:** every room, from the golden flowers through Toriel's puzzles, the falling leaves, the spikes, the rocks, the cracked floors and the switches, to Toriel's home and the long corridor under it. * **Its people, with all they have to say:** Flowey, Toriel and her phone calls, Napstablook, the talking rock, the Froggits who give advice, the spider bake sale, the snail facts, and every sign, bookshelf and mirror. * **Snowdin:** Sans and Papyrus, and every one of Papyrus's puzzles: the invisible electricity maze, the X and O tiles, the one on ice, the multicolor tiles and the Gauntlet. Then Snowdin Town, with its shop, inn, library and Papyrus's house. -* **Waterfall's first half:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the bird over the gap, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. +* **Waterfall's first half:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the marsh where the land is black and the water glows, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. * **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg and Shyren in Waterfall. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. diff --git a/games/undertale/docs/onionsan.png b/games/undertale/docs/onionsan.png index 231095d657a2dfde4afdad1547a271b1db96d147..147c2e0134198ded824a771ced9389735d284ba9 100644 GIT binary patch delta 1918 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 delta 1391 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 delta 38580 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 = OF_TALK | OF_SOLID; - Obj *r = obj_trigger(8536, 556, 8, 44, EV_WF_BIRD, ACTOR_ANY); - if (r) r->flags = OF_TALK, r->arg = 1; break; } case ROOM_WF_MARSH: @@ -392,7 +391,7 @@ void wf1_setup(int room, int from) { static const uint16_t o[4] = {SPR_ONIONSAN, SPR_ONIONSAN, SPR_ONIONSAN, SPR_ONIONSAN}; Obj *on = obj_npc(ACTOR_ONION, o, 8900, 650, DIR_DOWN, 0); if (on) on->flags = OF_BACK, on->alpha = flag(F_WF_ONION) ? 255 : 0; - if (!flag(F_WF_ONION)) obj_trigger(8780, 560, 20, 100, EV_WF_ONION, ACTOR_TRIGGER); + if (!flag(F_WF_ONION)) obj_trigger(8840, 656, 20, 48, EV_WF_ONION, ACTOR_TRIGGER); } break; case ROOM_WF_PIANO: { @@ -586,12 +585,9 @@ static int ev_wf_telescope(Ev *c) { static int ev_wf_bird(Ev *c) { EV_BEGIN; - c->v[1] = c->self ? c->self->arg : 0; - NARRATE(c->v[1] ? "* (The little bird offers to carry you back.)@Yes@No" - : "* (A little bird offers to carry you over the gap.)@Yes@No"); + NARRATE("* (The little bird offers to carry you over the gap.)@Yes@No"); if (CHOICE() == 0) { - if (c->v[1]) FADE_TO(ROOM_WF_MARSH_TOP, 8440, 562, DIR_LEFT); - else FADE_TO(ROOM_WF_MARSH_TOP, 8552, 562, DIR_RIGHT); + FADE_TO(ROOM_WF_MARSH_TOP, 8440, 562, DIR_LEFT); set_flag(F_WF_BIRD, 1); } EV_END; diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index 4c7fd151..ac686bc9 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -169,8 +169,7 @@ def check(cond, msg): # Waterfall's west half, the friendly way: Monster Kid, Grillby's with Sans, the tutu, Papyrus's report, the bridge # seeds (and the secret one to the quiche), the wishing room, Undyne's spears, the telescope, the punch card, the marsh -# (the ballet shoes), the bird, -# Onionsan, the piano and the artifact, Shyren, the umbrellas, Monster Kid in the rain, the bridge cut +# (the ballet shoes), Onionsan, the piano and the artifact, Shyren, the umbrellas, Monster Kid in the rain, the bridge cut if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["WF1"]), "--at", "30,1480", "--path-file", os.path.join(HERE, "waterfall.path")], 45000, what="Waterfall") @@ -178,7 +177,7 @@ def check(cond, msg): if s: for name, v in (("WF_MK", 1), ("GRILLBYS", 1), ("WF_TUTU", 1), ("WF_UNDYNE1", 1), ("SEEDS1", 1), ("SEEDS2", 1), ("SEEDS3", 1), ("WF_QUICHE", 1), ("CHASE1", 1), ("WF_TELESCOPE", 1), ("WF_PUNCH", 1), ("WF_BALLET", 1), - ("WF_BIRD", 1), ("WF_ONION", 2), ("PIANO", 1), ("WF_ARTIFACT", 1), ("SHYREN", 1), + ("WF_ONION", 2), ("PIANO", 1), ("WF_ARTIFACT", 1), ("SHYREN", 1), ("UMBRELLA", 3), ("MK_RAIN", 2), ("WF_BRIDGE", 1)): check(flag(s, name) == v, f"Waterfall: F_{name} is {flag(s, name)}, not {v}") check(s["kills"] == 0, f"Waterfall: {s['kills']} killed on the friendly way") diff --git a/games/undertale/tests/waterfall.path b/games/undertale/tests/waterfall.path index 7f133bb1..60cceed7 100644 --- a/games/undertale/tests/waterfall.path +++ b/games/undertale/tests/waterfall.path @@ -119,7 +119,7 @@ go:6700,560 talk w30 talk -# the crystals' SAVE, Sans's telescope, the Nice Cream cart and the punch card upstairs, the bird +# the crystals' SAVE, Sans's telescope, the Nice Cream cart and the punch card upstairs go:7248,562 u z @@ -137,7 +137,8 @@ go:8050,130 u z talk -# down the ladder into the marsh: the ballet shoes in the tall grass, an echo flower, the history sign +# south past Loren, down the ladder into the marsh: the ballet shoes in the tall grass, an echo flower, the history +# sign, then up to Onionsan's path; the piano's song (the artifact), Shyren (hummed along with) go:8140,560 go:8140,700 go:7590,1250 @@ -152,23 +153,14 @@ go:8850,840 u z talk -go:8140,700 -go:8140,560 -go:8000,560 -go:8300,560 -go:8440,560 -r -z -talk -w60 -# Onionsan, the piano's song (the artifact), Shyren (hummed along with) -go:8700,600 -go:8900,600 +go:8770,760 +go:8800,664 +go:8900,664 talk -go:9300,600 -go:9600,600 +go:9300,664 +go:9600,664 talk -go:9850,620 +go:9850,664 go:10070,640 go:10066,412 u diff --git a/games/undertale/tools/pack.py b/games/undertale/tools/pack.py index 60cbd01c..d44839a8 100644 --- a/games/undertale/tools/pack.py +++ b/games/undertale/tools/pack.py @@ -484,21 +484,6 @@ def collision(area, r): big = np.zeros((Y1 - Y0, X1 - X0), bool) xs0, ys0, xs1, ys1 = max(X0, 0), max(Y0, 0), min(X1, W), min(Y1, H) big[ys0 - Y0:ys1 - Y0, xs0 - X0:xs1 - X0] = np.isin(area.idx[ys0:ys1, xs0:xs1], list(walk_idx)) - if r.get("tufts"): - # black ground with grass tufts on it, black nothing without: black is floor only within `tufts` pixels of a - # tuft (a little blot of another colour with black all around it) - win = np.zeros(big.shape, area.idx.dtype) - win[ys0 - Y0:ys1 - Y0, xs0 - X0:xs1 - X0] = area.idx[ys0:ys1, xs0:xs1] - black = np.isin(win, [i for i, k in enumerate(area.rgb) if k == (0, 0, 0) and i != area.transparent]) - lab, n = ndimage.label(~black, np.ones((3, 3))) - tuft = np.zeros_like(black) - for i, sl in enumerate(ndimage.find_objects(lab)): - hh, ww = sl[0].stop - sl[0].start, sl[1].stop - sl[1].start - if hh <= 12 and ww <= 12: - ring = ndimage.binary_dilation(lab[sl] == i + 1, iterations=1) & (lab[sl] != i + 1) - if black[sl][ring].all(): - tuft[sl] |= lab[sl] == i + 1 - big &= ~black | (ndimage.distance_transform_edt(~tuft) <= r["tufts"]) sub = big[margin:margin + ch * 4, margin:margin + cw * 4] if r.get("open"): # floors of many colours (a carpet, planks): its floor_rects alone say sub = np.ones_like(sub) diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index 1ffe9c1b..f7d80b69 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -120,7 +120,8 @@ # the bridge seeds (the game's objects too) and the bridges they make, drawn solved *[("erase", x, y, 20, 20, WF_FLOOR) for x, y in [(2300, 1420), (2280, 1440), (2320, 1440), (2300, 1460), (2960, 1340), (3000, 1340), (2960, 1380), (3000, 1380)]], - # the tutu and the artifact (objects, gone once taken) + # the bird (it waits across the gap), the tutu and the artifact (objects, gone once taken) + ("erase", 8466, 578, 15, 19, [(27, 33, 90), (27, 21, 72), (23, 13, 43)]), ("erase", 1240, 1240, 22, 10, [(23, 13, 43), (27, 21, 72), (27, 33, 90)]), ("erase", 10156, 150, 12, 7, [(27, 21, 72), (27, 33, 90), (54, 47, 121)]), ("fill", 10156, 157, 12, 1, (0, 0, 0)), ("fill", 10156, 158, 12, 3, (99, 102, 135)), @@ -364,19 +365,23 @@ dict(name="wf_sans2", area="waterfall", rect=(7840, 0, 360, 600), title="Waterfall", floor_colors=WF_WATER, floor_rects=[(7860, 92, 300, 118), (7956, 206, 38, 360), (7840, 556, 360, 50)], fix=[("walk", 7956, 420, 38, 140)]), - # the marsh: its shallow glowing water and its grassy black ground are walked on (plain black is nothing, the - # planks cross it); the boardwalk ends at a gap the bird carries Frisk over, a ladder goes down into the marsh + # the marsh, where the colours turn: its land is black, its water bright blue (the planks cross it), and around + # it plain black is nothing (its rectangles); the boardwalk ends at a gap the bird carries Frisk over, a ladder + # goes down into the marsh dict(name="wf_marsh_top", area="waterfall", rect=(8200, 400, 450, 200), title="Waterfall", - floor_colors=WF_WATER + [(23, 13, 43), (0, 0, 0)], tufts=44, floor_rects=[(8200, 556, 284, 64), (8536, 556, 114, 64)]), + floor_colors=WF_WATER + [(23, 13, 43), (0, 0, 0)], floor_rects=[(8200, 556, 284, 64), (8536, 556, 114, 64)]), dict(name="wf_marsh_mid", area="waterfall", rect=(7400, 600, 1250, 200), title="Waterfall", - floor_colors=[(0, 0, 0)] + WF_CYAN, tufts=44, + floor_colors=[(0, 0, 0)], floor_rects=[(8060, 600, 590, 100), (8060, 700, 110, 100), (7760, 780, 300, 20)], fix=[("walk", 8140, 600, 20, 84)]), dict(name="wf_marsh", area="waterfall", rect=(7400, 800, 1650, 660), title="Waterfall", - floor_colors=[(0, 0, 0)] + WF_CYAN, tufts=44, + floor_colors=[(0, 0, 0)], floor_rects=[(7660, 800, 510, 660), (8170, 940, 190, 520), (8360, 1000, 380, 460), + (8740, 800, 55, 660), (8795, 800, 85, 120), (8795, 1000, 265, 460), + (7460, 1150, 200, 190)], fix=[("walk", x, y - 2, w, h + 4) for x, y, w, h in [(7821, 825, 58, 55), (7921, 945, 58, 55), (8301, 1005, 58, 55), (8741, 1005, 58, 55), (8561, 1145, 58, 55), (7941, 1220, 59, 60), (8501, 1360, 59, 57), (8741, 1440, 56, 17)]]), - dict(name="wf_onion", area="waterfall", rect=(8650, 500, 1250, 300), title="Waterfall", floor_colors=WF_WATER, - fix=[("walk", 8648, 560, 16, 40), ("walk", 9800, 600, 20, 58), ("walk", 9860, 640, 40, 58)]), + # (up from the marsh, a narrow black path by Onionsan's water) + dict(name="wf_onion", area="waterfall", rect=(8650, 500, 1250, 300), title="Waterfall", floor_colors=[(0, 0, 0)], + floor_rects=[(8740, 656, 1160, 48), (8740, 656, 60, 144)], fix=[("walk", 9860, 660, 40, 40)]), dict(name="wf_piano", area="waterfall", rect=(9900, 20, 600, 780), title="Waterfall", floor_colors=WF_WATER, floor_rects=[(10060, 140, 200, 64), (10136, 200, 48, 104), (10118, 300, 64, 100), (10040, 398, 220, 64), (10118, 460, 64, 140), (10040, 598, 220, 124), (9900, 638, 142, 46), (10258, 638, 242, 46)]), diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index d93bf791..4ac2d9f2 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -297,8 +297,9 @@ def gen_debris(): ("woshua_ow", "wiki:Woshua_overworld.gif", {"feet": True}), ("seed", "wiki:Bridge_Seed_overworld.png", {"keep": True}), ("bloom", "wiki:Bridge_Seed_overworld_flower.png", {"keep": True}), - # what lies about Waterfall to be picked up (cut from the map, its floor made see-through): the tutu, the - # artifact on its pedestal + # what's about Waterfall (cut from the map, its floor made see-through): the small bird, and to be picked up, + # the tutu, the artifact on its pedestal + ("bird", "map:Waterfall_map.png:8466,578,15,19", {"keep": True, "clear": [(27, 33, 90), (27, 21, 72), (23, 13, 43)]}), ("tutu", "map:Waterfall_map.png:1240,1240,22,10", {"keep": True, "clear": [(23, 13, 43), (27, 21, 72), (27, 33, 90)]}), ("artifact", "map:Waterfall_map.png:10156,150,12,11", {"keep": True, "clear": [(27, 21, 72), (27, 33, 90), (54, 47, 121), (99, 102, 135)]}), From 22fd0447f15992f480e10cc7b20eb29340e78d65 Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 06:25:34 +0000 Subject: [PATCH 10/19] Undertale: Waterfall past the bridge, to Temmie Village Undyne cuts the bridge and Frisk wakes in the garbage dump, on golden flowers. Then the Trash Zone and the walkway with its cooler of Astronaut Food, Mad Dummy (a ghost: hits go through it, but its own missiles led back into it don't, until Napstablook drifts in), the Quiet Area, Blook Acres with Napstablook's house (lie on the floor with them) and the snail farm's races, the small bird that carries Frisk back over the gap, Gerson's shop, the twin waterfalls, the mushroom maze and the hidden way down to Temmie Village and its Tem Shop, the one shop that buys. The game now ends past the maze. New monsters: Mad Dummy and Temmie (talk to her, or feed her Temmie Flakes); new items from the shops and the dump. What everyone says is in short words of our own. The tests walk all of it and fight, flee and spare the new battles. --- README.md | 4 +- docs/play.md | 2 +- games/undertale/README.md | 18 +- games/undertale/docs/gerson.png | Bin 0 -> 14442 bytes games/undertale/docs/maddummy.png | Bin 0 -> 1866 bytes games/undertale/docs/napstahouse.png | Bin 0 -> 4244 bytes games/undertale/docs/temmie.png | Bin 0 -> 6562 bytes games/undertale/src/data.bin | Bin 721854 -> 786266 bytes games/undertale/src/data.h | 134 +++++++------ games/undertale/src/events.c | 2 + games/undertale/src/events.h | 6 +- games/undertale/src/flags.h | 9 +- games/undertale/src/items.c | 10 + games/undertale/src/items.h | 6 + games/undertale/src/menu.c | 2 +- games/undertale/src/menu.h | 2 +- games/undertale/src/monsters.c | 2 +- games/undertale/src/monsters.h | 7 +- games/undertale/src/rooms.c | 1 + games/undertale/src/shop.c | 56 +++++- games/undertale/src/shop.h | 2 +- games/undertale/src/waterfall.h | 4 + games/undertale/src/wf1.c | 21 +- games/undertale/src/wf2.c | 278 +++++++++++++++++++++++++++ games/undertale/src/wfmon.c | 136 +++++++++++++ games/undertale/tests/check.py | 35 ++-- games/undertale/tests/waterfall.path | 83 +++++++- games/undertale/tools/fetch.py | 2 +- games/undertale/tools/rooms.py | 37 ++++ games/undertale/tools/sprites.py | 10 + tools/release.py | 6 +- 31 files changed, 769 insertions(+), 106 deletions(-) create mode 100644 games/undertale/docs/gerson.png create mode 100644 games/undertale/docs/maddummy.png create mode 100644 games/undertale/docs/napstahouse.png create mode 100644 games/undertale/docs/temmie.png create mode 100644 games/undertale/src/wf2.c diff --git a/README.md b/README.md index 32cf907f..9e9aab01 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins, Snowdin and half of Waterfall, from the golden flowers to the bridge Undyne cuts
Download + Undertale
Undertale

The Ruins, Snowdin and most of Waterfall, from the golden flowers to Temmie Village
Download More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins, Snowdin and half of Waterfall are out, the rest of Waterfall, Hotland and New Home are next +- [ ] Undertale: the Ruins, Snowdin and most of Waterfall are out, Undyne's fight, Hotland and New Home are next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index 1774ce4e..2455168f 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins, Snowdin and Waterfall. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. For now the game ends halfway through Waterfall, where Undyne cuts the bridge. +Name the fallen human, then walk and talk your way through the Ruins, Snowdin and Waterfall. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. For now the game ends past Waterfall's mushroom maze.
diff --git a/games/undertale/README.md b/games/undertale/README.md index a822b6d5..59c4b0a6 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins, Snowdin and the first half of Waterfall, from the bed of golden flowers to the bridge Undyne cuts. The rest of the Underground is on the way. + The Ruins, Snowdin and most of Waterfall, from the bed of golden flowers to Temmie Village. The rest of the Underground is on the way.

@@ -25,8 +25,8 @@ * **The whole Ruins:** every room, from the golden flowers through Toriel's puzzles, the falling leaves, the spikes, the rocks, the cracked floors and the switches, to Toriel's home and the long corridor under it. * **Its people, with all they have to say:** Flowey, Toriel and her phone calls, Napstablook, the talking rock, the Froggits who give advice, the spider bake sale, the snail facts, and every sign, bookshelf and mirror. * **Snowdin:** Sans and Papyrus, and every one of Papyrus's puzzles: the invisible electricity maze, the X and O tiles, the one on ice, the multicolor tiles and the Gauntlet. Then Snowdin Town, with its shop, inn, library and Papyrus's house. -* **Waterfall's first half:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the marsh where the land is black and the water glows, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. -* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg and Shyren in Waterfall. +* **Waterfall:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the marsh where the land is black and the water glows, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. Then the fall into the garbage dump, Mad Dummy, Napstablook's house and snail farm, the small bird back over the gap, Gerson's shop, the mushroom maze and Temmie Village with its Tem Shop. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie and Mad Dummy, who can't be hurt, in Waterfall. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -79,6 +79,14 @@ Woshua's green drop
Woshua's green drop heals Shyren's notes
Shyren sings when you hum along + + Mad Dummy's dummies
Mad Dummy sends its dummies + Napstablook's house
At Napstablook's house + + + Gerson's shop
Gerson's shop + Temmie Village
Temmie Village + ## How to play @@ -89,7 +97,7 @@ Monsters jump out as you walk. In a battle, choose FIGHT to attack (press OK whe Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bottom of the box, and Up jumps over his bones. On ice you slide until something stops you. Snowdin Town's shop sells food and gear, and its inn gives you a night's rest. -In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. +In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. The Tem Shop is the one shop that buys what you carry. Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. @@ -106,7 +114,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **The Ruins, Snowdin and half of Waterfall, for now:** the bridge Undyne cuts ends the game, on a screen that says the rest of the Underground is still to come. The rest of Waterfall, Hotland and New Home come next, one at a time. +* **The Ruins, Snowdin and most of Waterfall, for now:** the way on past the mushroom maze ends the game, on a screen that says the rest of the Underground is still to come. Undyne's fight at the end of Waterfall, Hotland and New Home come next, one at a time. * **No music or sound:** the calculator has no speaker. * **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. diff --git a/games/undertale/docs/gerson.png b/games/undertale/docs/gerson.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8d16806efcf4937a854c59c602fd414299e782 GIT binary patch literal 14442 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 OU{Yf8qBX*X!T%q!1m;2j literal 0 HcmV?d00001 diff --git a/games/undertale/docs/maddummy.png b/games/undertale/docs/maddummy.png new file mode 100644 index 0000000000000000000000000000000000000000..5129514e9c74629a16e090ee5d6327f504a6bc42 GIT binary patch literal 1866 zcmaKrc~lbU8peTeTrOtb$t9&|@??=4L5|mlm@fqCJXMxU-bxS6D zyD&P9bG|3Tj0+3-(5h~EL{=9*PNuGlnBL8^Nlg~H@nh`feNJh!TY}R;rvBrs?%v~H z3PCeV1`!+8025#Nl~T+mHJadn@2W zV>15sTGZ^sNP6IG8m!^~!@dFgs*TWrT8NzIwg&N%6GQ~k`daIvQj(Xb=$)J?u%>xj zv>9jgTsk%xB)DDG4{difZwV~RnePiXK~SGZX&Y04!1}}TenhsZcMaE|#`{(wKMRju zbpw0P%^eDVolo(z0(}CE+;HVT^~6X)Rpu=F=TwTO&29!+e5MmOK?^q6f160V;fT!s z92Ahi;mC>Ugb!^mI)x6-d}xrIwJJ3w9lZ}faRd$p(mQ^FPuohIvNtXfpBn^3BS7~e z{8u3D8vh27LUH_`d}8!=&~9V>i1rWmJN)a8&~-XZpTHJnk;Q7>2>eg$st`d{5BNY~ zlK|T-b*@Ii1ubazG1{eY@O!zpEbh+FIaq}e zHSd&!iQ$9o_9bD>!~fpD-6V(@C@#at2a1_zUV%(~xSmhC28{F(mBx*s)BeT3&r(HZ zmXl0CrVfI6J%pcekUTHdYHfPvmEks*|C;n*I9g4fEpfrqy|Q#mMiSDu*1qStXHzD% zn-7km5ZTXc;!4htEOp(+ZWnOoUHMes9GaoY*pG^@DS`nrJQ$k3(1*Afrx}n~4 z3L=Fubi8Muszx@h71plaPeiJK@Mtib6Oeqd=q_SK9Qo<+7M&0jF3Vr6@K4qr;B@*B z6zWrB@HK%(FYBIU^{acQX{-el-0)jg`A$7y<_ABL=el^wLRQ39n1m(i$U>HLQRCGp zxWdhdYEX2VD{8Wg9lzeA@~vHIcf={Wel;Tv-mmWYOs8D}^nLR4P08l6x&c9T6DBO* zUk(?)U;IZ$+3VO1_=$iANL{txH*n^2Wn#WcbOYd}*le77{-~~C;F6>!cIdmBa3!j_ z6&V_zD&#zrv;(P{hMgwmWq|< zTrKeRl`Fiy5J|tSPT1fToNQCx-clByE-$hrrqbUI<>f_7wbRHdzcI`6_LbQ6McQ>* zU1EZ#j+e=3M=F0Pm%YC@L6RaOWzh`kzIgr6H$1A#e&ncYZ1vJAG;P>fbaj3L(gn>& ztA{3I%woNSB^Ef#5USUO;qytohsD@vmc+ivjMZ{kaYuQ6rNaUx?xP3G-?o%p(Ozgi zR+f{VJ8H4JLA@_I5u zh{Vxn?ZzI9?8x?Z?gCNBmxiUKu#?&^cw@I3(WNSfQ&c*4L0GBwT`E=|I|Dm0lMu>j zQ?|l!o2&Xs8Ox)QTH;IZ!jc7$5DA2917i!2(qc0^4)W38UgNY-`tfgPLfx4Drmar96m!*=?ct1(jnVd(aeqes%o z9?flURD7vO>pBd*bn9KBlZH2c&tR=ky`|I4ZQyG4z_TbF0N}2|egooCIT;gHyYpc@ MU42~GPT^nw6V~Wv#Q*>R literal 0 HcmV?d00001 diff --git a/games/undertale/docs/napstahouse.png b/games/undertale/docs/napstahouse.png new file mode 100644 index 0000000000000000000000000000000000000000..83c693722d61db58909021cb533953beb1370b04 GIT binary patch literal 4244 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/temmie.png b/games/undertale/docs/temmie.png new file mode 100644 index 0000000000000000000000000000000000000000..585ab069ab3f61fc65ee35180fc30f0d2e3e4c84 GIT binary patch literal 6562 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 Zbxzk`Y#LZ#B(ZX_S4~OtDMryW_&;(1-Npa_ literal 0 HcmV?d00001 diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index 93e1aae590bce3901b95fe6163e90b907f1b5328..8a4000a4e1fb689c8a1f29894e6338cd1ba198e1 100644 GIT binary patch delta 87357 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∨(<-!8n_ACs{WYU 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 bBHTRm8Y6Fm5R#p9-=+H!Afyh4`Q>OCaoNZZ delta 29733 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 0) return r; r = wf1_event(c); if (r >= 0) return r; + r = wf2_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index 8bedff15..3bdfae3f 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -10,7 +10,8 @@ enum { ACTOR_SANS, ACTOR_PAPYRUS, ACTOR_DOGGO, ACTOR_DOGAMY, ACTOR_DOGARESSA, ACTOR_GREATERDOG, ACTOR_BALL, ACTOR_ORB, ACTOR_TILE, ACTOR_DOG, ACTOR_BLOCK, ACTOR_TRIGGER3, /* Waterfall */ - ACTOR_MK, ACTOR_UNDYNE, ACTOR_SEED, ACTOR_BLOOM, ACTOR_SPEAR, ACTOR_ONION, ACTOR_DEBRIS, ACTOR_SHYREN + ACTOR_MK, ACTOR_UNDYNE, ACTOR_SEED, ACTOR_BLOOM, ACTOR_SPEAR, ACTOR_ONION, ACTOR_DEBRIS, ACTOR_SHYREN, + ACTOR_MADDUMMY, ACTOR_BIRD, ACTOR_TEMMIE }; enum { @@ -38,6 +39,9 @@ enum { /* wf1.c */ EV_WF_MK, EV_WF_ITEM, EV_WF_STREAM_FALL, EV_WF_UNDYNE1, EV_BELL, EV_WF_GRASS, EV_WF_TELESCOPE, EV_WF_BIRD, EV_WF_ONION, EV_PIANO, EV_SHYREN, EV_STATUE, EV_UMBRELLA, EV_MK_RAIN, EV_MK_TALK, EV_WF_BRIDGE_END, + /* wf2.c */ + EV_DUMP_WAKE, EV_COOLER, EV_MAD_DUMMY, EV_NAPSTA_ROOM, EV_LOCKED_HOUSE, EV_SNAILS, EV_GERSON, EV_TEM_SHOP, EV_TEMMIE, + EV_WF_EAST_END, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index 7628330c..7111f7eb 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -110,7 +110,14 @@ enum { F_SHYREN, /* 1 spared, 2 killed */ F_WF_BRIDGE, /* the bridge cut: Frisk fell */ F_KILLS_WATERFALL, - F_WF_BIRD, + F_WF_BIRD, /* the small bird: 1 it carried Frisk west (it waits there), 2 back east */ + F_WF_DUMP, /* woke up in the garbage dump */ + F_WF_COOLER, /* the cooler's Astronaut Food taken: how many */ + F_MAD_DUMMY, /* its fight, over (Napstablook came) */ + F_NAPSTA_HOME, /* 1 invited home, 2 lay on the floor with them */ + F_SNAIL_RACE, /* Thundersnail races run */ + F_TEM_VILLAGE, /* found */ + F_WF_EAST1, /* the way past the mushroom maze reached (where the game now ends) */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/items.c b/games/undertale/src/items.c index 4302e410..2da369ea 100644 --- a/games/undertale/src/items.c +++ b/games/undertale/src/items.c @@ -42,6 +42,16 @@ static const ItemInfo items[ITEM_COUNT] = { "* You look at the punch card.\n* It makes you want to punch\n something.", 15}, [ITEM_ARTIFACT] = {"Legendary Artifact", "Artifact", IT_SPECIAL, 0, 0, 0, "A mysterious orb.\n* It's a little heavy.", "* You hold the orb up.\n* Nothing happens.", 0}, + [ITEM_ASTRONAUT_FOOD] = {"Astronaut Food", "AstroFood", IT_FOOD, 21, 0, 0, "Food for a trip to space,\n found in a cooler.", + "* You eat the Astronaut Food.", 25}, + [ITEM_CRAB_APPLE] = {"Crab Apple", "CrabApple", IT_FOOD, 18, 0, 0, "A fruit with little claws.", + "* You eat the Crab Apple.", 5}, + [ITEM_SEA_TEA] = {"Sea Tea", "SeaTea", IT_FOOD, 10, 0, 0, "Tea made from sea grass.", + "* You drink the Sea Tea.\n* Your feet feel lighter.", 5}, + [ITEM_CLOUDY_GLASSES] = {"Cloudy Glasses", "Glasses", IT_ARMOR, 0, 0, 5, "Glasses you can barely\n see through.", "", 30}, + [ITEM_TORN_NOTEBOOK] = {"Torn Notebook", "TornNotbo", IT_WEAPON, 0, 2, 0, "An old notebook, torn up.\n* It doesn't hit very hard.", "", 50}, + [ITEM_TEMMIE_FLAKES] = {"Temmie Flakes", "TemFlakes", IT_FOOD, 2, 0, 0, "Bits of paper, sold as\n food.", + "* You eat the Temmie Flakes.", 2}, }; const ItemInfo *item_info(int id) { return &items[id >= 0 && id < ITEM_COUNT ? id : 0]; } diff --git a/games/undertale/src/items.h b/games/undertale/src/items.h index a2fd470e..d2851666 100644 --- a/games/undertale/src/items.h +++ b/games/undertale/src/items.h @@ -28,6 +28,12 @@ enum { ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, + ITEM_ASTRONAUT_FOOD, + ITEM_CRAB_APPLE, + ITEM_SEA_TEA, + ITEM_CLOUDY_GLASSES, + ITEM_TORN_NOTEBOOK, + ITEM_TEMMIE_FLAKES, ITEM_COUNT }; enum { IT_FOOD, IT_WEAPON, IT_ARMOR, IT_SPECIAL }; diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index 97c29a61..506e6387 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -368,7 +368,7 @@ void menu_gameover_open(void) { void menu_end_open(void) { g_mode = MODE_END; t = 0; - writer_start(&w, "You fall into the dark below\nthe bridge...|The rest of Waterfall,\nand the underground beyond,\nare still to come...", 40, 90, FONT_MAIN); + writer_start(&w, "Past the mushrooms, the path\ngoes on into the dark...|The rest of Waterfall,\nand the underground beyond,\nare still to come...", 40, 90, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/menu.h b/games/undertale/src/menu.h index 28da811b..c34a20f4 100644 --- a/games/undertale/src/menu.h +++ b/games/undertale/src/menu.h @@ -6,7 +6,7 @@ void menu_title_open(void); void menu_open(void); void menu_save_open(void); void menu_gameover_open(void); -void menu_end_open(void); /* the fall from Waterfall's bridge: what comes next isn't made yet */ +void menu_end_open(void); /* past Waterfall's mushroom maze: what comes next isn't made yet */ void menu_update(uint32_t keys, uint32_t pressed); void menu_draw(void); void game_new(const char *name); diff --git a/games/undertale/src/monsters.c b/games/undertale/src/monsters.c index 11155d90..14241618 100644 --- a/games/undertale/src/monsters.c +++ b/games/undertale/src/monsters.c @@ -319,7 +319,7 @@ int form_setup(int form, Battle *b) { m->x = (int16_t)(xs[f->n - 1][i] + m->def->dx), m->y = (int16_t)(120 + m->def->dy); } /* Toriel and Flowey can't be fled from; Napstablook can */ - if (form == FORM_TORIEL || form == FORM_FLOWEY || form == FORM_PAPYRUS) b->no_flee = true; + if (form == FORM_TORIEL || form == FORM_FLOWEY || form == FORM_PAPYRUS || form == FORM_MAD_DUMMY) b->no_flee = true; b->captures = form == FORM_PAPYRUS; return 0; } diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h index 755879d1..5c165146 100644 --- a/games/undertale/src/monsters.h +++ b/games/undertale/src/monsters.h @@ -10,7 +10,7 @@ enum { MON_SNOWDRAKE = MON_RUINS_COUNT, MON_ICECAP, MON_GYFTROT, MON_DOGGO, MON_LESSERDOG, MON_DOGAMY, MON_DOGARESSA, MON_GREATERDOG, MON_JERRY, MON_CHILLDRAKE, MON_GLYDE, MON_PAPYRUS, MON_SNOW_COUNT, /* Waterfall (wfmon.c) */ - MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_COUNT + MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_MAD_DUMMY, MON_TEMMIE, MON_COUNT }; /* formations: who is fought */ @@ -24,7 +24,7 @@ enum { FORM_GREATERDOG, FORM_PAPYRUS, FORM_SNOW_COUNT, /* Waterfall */ FORM_AARON = FORM_SNOW_COUNT, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, - FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_COUNT + FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_COUNT }; enum { @@ -38,7 +38,8 @@ enum { ATK_GDOG_BARK, ATK_GLYDE_STARS, ATK_PAP_FIRST, ATK_PAP_LAST = ATK_PAP_FIRST + 24, ATK_SNOW_COUNT, /* Waterfall */ ATK_AARON_ARMS = ATK_SNOW_COUNT, ATK_AARON_SWEAT, ATK_WOSHUA_DROPS, ATK_WOSHUA_BUBBLES, ATK_MOLDBYGG_HOPS, - ATK_MOLDBYGG_RAIN, ATK_SHYREN_NOTES, ATK_COUNT + ATK_MOLDBYGG_RAIN, ATK_SHYREN_NOTES, ATK_DUMMY_MINIONS, ATK_DUMMY_MISSILES, ATK_TEMMIE_HOPS, + ATK_COUNT }; /* a formation: up to three monsters, and what the first turn says */ diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index 46a6c038..d2a0b73a 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -18,6 +18,7 @@ void room_setup(int room, int from) { snow2_setup(room, from); town_setup(room, from); wf1_setup(room, from); + wf2_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ diff --git a/games/undertale/src/shop.c b/games/undertale/src/shop.c index 4686cbdc..c408dff4 100644 --- a/games/undertale/src/shop.c +++ b/games/undertale/src/shop.c @@ -22,6 +22,7 @@ typedef struct { const char *topics[4]; const char *answers[4]; int ntopics; + bool buys; /* Sell: it buys what you carry (the Tem Shop) */ } Shop; static const Shop shops[SHOP_COUNT] = { @@ -37,6 +38,27 @@ static const Shop shops[SHOP_COUNT] = { "* Long ago, monsters lived in the RUINS back there.|* When we came here, the cold made it easy to get used to the snow.", "* Life is the same as usual.\n* A little cold, though..."}, .ntopics = 4}, + [SHOP_GERSON] = { + .pic = SPR_SHOP_GERSON, .hello = "* Hello there, little one!\n* Pay no mind to the junk.", .again = "* Take a look around!", + .buying = "Take your\ntime.", .bought = "Wa ha ha!\nThank you!", .poor = "Not enough\nmoney, eh?", + .full = "Your pockets\nare full,\nkid.", .nobuy = "Hmm?", + .sell = "* Sell? I'm not that kind of shop, kid.\n* Try the Temmies, if you can find them.", + .wares = {{ITEM_CRAB_APPLE, 25}, {ITEM_SEA_TEA, 18}, {ITEM_CLOUDY_GLASSES, 35}, {ITEM_TORN_NOTEBOOK, 55}}, .nwares = 4, + .topics = {"About you", "About Undyne", "About the king", "About the junk"}, + .answers = {"* Me? Just an old turtle who's seen a lot.\n* They used to call me a hero, way back when.", + "* Undyne? That girl's the head of the Royal Guard.\n* She'd fight anyone to protect us. Wa ha ha!", + "* The king's a big softie.\n* Lost his family a long while back. Still keeps smiling.", + "* All of this washed up in the dump.\n* One monster's trash is another's treasure!"}, + .ntopics = 4}, + [SHOP_TEM] = { + .pic = SPR_SHOP_TEM, .hello = "* hOI!\n* welcom to... da TEM SHOP!!!", .again = "* hOI!", .buying = "tem has\nstuff!!", + .bought = "thanks!!!", .poor = "no muns...", .full = "u hav too\nmany stuffs", .nobuy = "oh...", + .sell = "", .buys = true, + .wares = {{ITEM_TEMMIE_FLAKES, 1}}, .nwares = 1, + .topics = {"Say hello", "About Temmies", "Tem history", "About shop"}, + .answers = {"* hOI!!! i'm temmie!!", "* temmies r the best!!!\n* we love humans... but some temmies r allergic...", + "* temmie village is very old...\n* tem forget the rest.", "* tem wants to go to colleg someday!!"}, + .ntopics = 4}, }; static int shop_id, st, sel, sub; @@ -44,7 +66,7 @@ static Writer w; static char buf[300]; static const char *right_text; static bool is_box; -enum { S_MENU, S_BUY, S_CONFIRM, S_TALK, S_SAY }; +enum { S_MENU, S_BUY, S_CONFIRM, S_TALK, S_SAY, S_SELL }; static void left_say(const char *s) { snprintf(buf, sizeof buf, "%s", s); @@ -135,6 +157,7 @@ void shop_update(uint32_t keys, uint32_t pressed) { if (pressed & K_DOWN) sel = (sel + 1) % 4; if (pressed & K_Z) { if (sel == 0) st = S_BUY, sub = 0, right_text = s->buying; + else if (sel == 1 && s->buys) st = S_SELL, sub = 0, right_text = "what u\nsell??"; else if (sel == 1) st = S_SAY, left_say(s->sell); else if (sel == 2) st = S_TALK, sub = 0; else g_mode = MODE_WORLD; @@ -173,6 +196,21 @@ void shop_update(uint32_t keys, uint32_t pressed) { case S_SAY: if (!typing) st = S_MENU, left_say(s->again); break; + case S_SELL: { + /* what's carried, and Exit: Z sells it for what it's worth */ + if (pressed & K_UP) sub = (sub + NUM_ITEMS) % (NUM_ITEMS + 1); + if (pressed & K_DOWN) sub = (sub + 1) % (NUM_ITEMS + 1); + if (pressed & K_X || ((pressed & K_Z) && sub == NUM_ITEMS)) { + st = S_MENU, left_say(s->again); + break; + } + if ((pressed & K_Z) && sv.items[sub]) { + sv.gold = (uint16_t)min_i(9999, sv.gold + item_info(sv.items[sub])->sell); + item_remove_at(sub); + right_text = "thanks!!"; + } + break; + } } } @@ -188,6 +226,17 @@ static void wares_list(const Shop *s, bool topics) { if (!(st == S_CONFIRM)) gfx_sprite(SPR_HEART, 0, 20, 140 + sub * 18, 0, 255); } +static void sell_list(void) { + for (int i = 0; i <= NUM_ITEMS; i++) { + char line[48]; + if (i == NUM_ITEMS) snprintf(line, sizeof line, "Exit"); + else if (sv.items[i]) snprintf(line, sizeof line, "%dG - %s", item_info(sv.items[i])->sell, item_info(sv.items[i])->short_name); + else line[0] = 0; + gfx_text(FONT_SMALL, 30, 127 + i * 12, line, C_WHITE, 255); + } + gfx_sprite(SPR_HEART, 0, 20, 130 + sub * 12, 0, 255); +} + void shop_draw(void) { if (is_box) { box_draw(); @@ -210,6 +259,11 @@ void shop_draw(void) { if (st == S_MENU) gfx_sprite(SPR_HEART, 0, 228, 140 + sel * 20, 0, 255); return; } + if (st == S_SELL) { + sell_list(); + if (right_text) gfx_text(FONT_SMALL, 222, 130, right_text, C_WHITE, 255); + return; + } wares_list(s, st == S_TALK); if (st == S_CONFIRM) { char q[40]; diff --git a/games/undertale/src/shop.h b/games/undertale/src/shop.h index 2d2bd970..f803103b 100644 --- a/games/undertale/src/shop.h +++ b/games/undertale/src/shop.h @@ -2,7 +2,7 @@ #ifndef UT_SHOP_H #define UT_SHOP_H #include -enum { SHOP_SNOWDIN, SHOP_COUNT }; +enum { SHOP_SNOWDIN, SHOP_GERSON, SHOP_TEM, SHOP_COUNT }; void shop_open(int id); /* MODE_SHOP until Exit */ void box_open(void); void shop_update(uint32_t keys, uint32_t pressed); diff --git a/games/undertale/src/waterfall.h b/games/undertale/src/waterfall.h index 6f50ab71..ce53db9b 100644 --- a/games/undertale/src/waterfall.h +++ b/games/undertale/src/waterfall.h @@ -8,4 +8,8 @@ void wf1_update(void); bool wf_seed_enters(Obj *o, int x, int y); /* a bridge seed pushed into the water */ void wf_seed_moved(Obj *o); void wf_battle_done(int form); +/* wf2.c: past the bridge */ +void wf2_setup(int room, int from); +int wf2_event(Ev *c); /* -1: not one of its */ +void wf_bird_setup(int room); /* the small bird, on its side of the gap */ #endif diff --git a/games/undertale/src/wf1.c b/games/undertale/src/wf1.c index 0b835bc6..a81c3c79 100644 --- a/games/undertale/src/wf1.c +++ b/games/undertale/src/wf1.c @@ -369,13 +369,9 @@ void wf1_setup(int room, int from) { if (m) m->flags |= OF_SOLID; break; } - case ROOM_WF_MARSH_TOP: { - /* the small bird waits across the gap of bright water: from its side, it carries Frisk back over */ - obj_deco(SPR_BIRD, 8544, 578, false); - Obj *b = obj_trigger(8540, 574, 22, 26, EV_WF_BIRD, ACTOR_ANY); - if (b) b->flags = OF_TALK | OF_SOLID; + case ROOM_WF_MARSH_TOP: + wf_bird_setup(room); break; - } case ROOM_WF_MARSH: pickup(7578, 1230, 30, 30, ITEM_BALLET_SHOES, F_WF_BALLET, 0); { @@ -583,12 +579,15 @@ static int ev_wf_telescope(Ev *c) { EV_END; } +/* the small bird carries Frisk over the gap: east from the boardwalk (arg 2), west from the Quiet Area's side (1) */ static int ev_wf_bird(Ev *c) { EV_BEGIN; + c->v[1] = c->self ? c->self->arg : 1; NARRATE("* (The little bird offers to carry you over the gap.)@Yes@No"); if (CHOICE() == 0) { - FADE_TO(ROOM_WF_MARSH_TOP, 8440, 562, DIR_LEFT); - set_flag(F_WF_BIRD, 1); + set_flag(F_WF_BIRD, c->v[1]); + if (c->v[1] == 1) FADE_TO(ROOM_WF_MARSH_TOP, 8440, 562, DIR_LEFT); + else FADE_TO(ROOM_WF_BIRD2, 18548, 2318, DIR_RIGHT); } EV_END; } @@ -733,9 +732,9 @@ static int ev_bridge_end(Ev *c) { WAIT(30); NARRATE("* (...and cuts the bridge from under you!)"); set_flag(F_WF_BRIDGE, 1); - sv.room = (int16_t)g_room, sv.x = (int16_t)(pl.x - 40), sv.y = pl.y; - save_write_auto(); - menu_end_open(); + /* down, into the dark: the garbage dump */ + world_fade_hold(ROOM_WF_DUMP, 17680, 3214, DIR_DOWN, 60); + WAIT_UNTIL(!world_fading()); EV_END; } diff --git a/games/undertale/src/wf2.c b/games/undertale/src/wf2.c new file mode 100644 index 00000000..d47078df --- /dev/null +++ b/games/undertale/src/wf2.c @@ -0,0 +1,278 @@ +/* Waterfall, past the bridge: the garbage dump and Mad Dummy, Napstablook, the Quiet Area and the small bird, Blook + * Acres, Gerson's shop, the twin waterfalls, the mushroom maze and Temmie Village. (As the Undertale Wiki describes + * them; what they say is ours, in short.) */ +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "save.h" +#include "shop.h" +#include "waterfall.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } + +/* something on the map to talk to (solid: it stands there) */ +static Obj *thing(int x, int y, int w, int h, int event, int name, int arg) { + Obj *o = obj_trigger(x, y, w, h, event, name); + if (o) o->flags = OF_TALK | OF_SOLID, o->arg = (int16_t)arg; + return o; +} +static Obj *solid_sign(int x, int y, int w, int h, const char *text) { + Obj *o = obj_sign(x, y, w, h, text); + if (o) o->flags |= OF_SOLID; + return o; +} + +static Obj *obj_napstablook(int x, int y) { + static const uint16_t s[4] = {SPR_NAPSTA_OW, SPR_NAPSTA_OW, SPR_NAPSTA_OW, SPR_NAPSTA_OW}; + Obj *o = obj_npc(ACTOR_NAPSTA, s, x, y, DIR_DOWN, 0); + if (o) o->alpha = 200; + return o; +} + +/* the small bird over the gap of bright water (F_WF_BIRD: 1, it waits on the west side) */ +void wf_bird_setup(int room) { + bool west = flag(F_WF_BIRD) == 1; + if (room == ROOM_WF_MARSH_TOP) { + if (west) { + obj_deco(SPR_BIRD, 8466, 578, false); + thing(8462, 574, 22, 26, EV_WF_BIRD, ACTOR_BIRD, 2); + } else { + obj_deco(SPR_BIRD, 8544, 578, false); /* (across the gap: out of reach) */ + } + } else if (room == ROOM_WF_BIRD2 && !west) { + obj_deco(SPR_BIRD, 18523, 2341, false); + thing(18519, 2337, 24, 26, EV_WF_BIRD, ACTOR_BIRD, 1); + } +} + +void wf2_setup(int room, int from) { + (void)from; + if (room < ROOM_WF_DUMP || room > ROOM_WF_TEMMIE) return; + switch (room) { + case ROOM_WF_DUMP: + if (!flag(F_WF_DUMP)) { + Obj *t = obj_trigger(17660, 3220, 80, 50, EV_DUMP_WAKE, ACTOR_TRIGGER); + if (t) t->flags = OF_TOUCH; + } + solid_sign(18030, 3292, 80, 44, "* (A heap of garbage.)\n* (A rusty bike sticks out of it.)"); + solid_sign(18120, 3292, 80, 44, "* (A heap of garbage.)\n* (There's an old computer in there.)"); + obj_sign(17880, 3250, 24, 20, "* (Water flows in from somewhere far above.)"); + break; + case ROOM_WF_TRASH: + obj_save(18540, 3234, "* (Bits of garbage float past and drop into the dark.)\n* (You're filled with determination.)"); + solid_sign(18560, 3170, 40, 50, "* (A pile of trash.)\n* (Someone left a box of old tapes.)"); + solid_sign(18690, 3170, 40, 50, "* (A pile of trash.)\n* (A DVD case. Something with claws scratched it.)"); + break; + case ROOM_WF_WALKWAY: + if (flag(F_WF_COOLER) < 2) thing(18922, 2816, 36, 22, EV_COOLER, ACTOR_ITEM, 0); + else solid_sign(18922, 2816, 36, 22, "* (An empty cooler.)"); + solid_sign(18916, 2736, 60, 60, "* (A heap of garbage.)\n* (It smells like old rain.)"); + solid_sign(18824, 2836, 46, 58, "* (A heap of garbage.)\n* (A deflated ball is stuck on top.)"); + if (!flag(F_MAD_DUMMY)) { + static const uint16_t s[4] = {SPR_MADDUMMY_OW, SPR_MADDUMMY_OW, SPR_MADDUMMY_OW, SPR_MADDUMMY_OW}; + obj_npc(ACTOR_MADDUMMY, s, 18929, 2730, DIR_DOWN, EV_MAD_DUMMY); + } + break; + case ROOM_WF_QUIET: + obj_save(18900, 2340, "* (The quiet of this place fills you with determination.)"); + obj_sign(18966, 2256, 22, 24, "* (West: the bird.\n North: the houses.\n East: the shop.)"); + break; + case ROOM_WF_BIRD2: + wf_bird_setup(room); + break; + case ROOM_WF_ACRES: + thing(18568, 2060, 32, 44, EV_LOCKED_HOUSE, ACTOR_DOOR, 0); + thing(18926, 2080, 26, 30, EV_LOCKED_HOUSE, ACTOR_DOOR, 1); + obj_sign(18450, 2124, 64, 34, "* (A doormat shaped like a fish.)"); + obj_sign(19200, 2020, 30, 30, "* (The snail farm.\n* Thundersnail races: ask the ghost.)"); + if (flag(F_MAD_DUMMY)) { + Obj *n = obj_napstablook(19316, 2092); + if (n) n->event = EV_SNAILS, n->flags |= OF_TALK, obj_set_box(n, 0, 20, 26, 36); /* (over the fence) */ + } + break; + case ROOM_WF_NAPSTA_IN: + solid_sign(18820, 1790, 30, 36, "* (A fridge.)\n* (There's a ghost sandwich inside. Your hand goes right through it.)"); + solid_sign(18866, 1800, 32, 30, "* (An old TV, showing a ghost show.)"); + solid_sign(18930, 1786, 36, 30, "* (A computer with a song playing on it.)\n* (It sounds spooky... and kind of nice.)"); + if (flag(F_NAPSTA_HOME)) { + Obj *n = obj_napstablook(18969, 1810); + if (n) n->event = EV_NAPSTA_ROOM, n->flags |= OF_TALK; + } + break; + case ROOM_WF_GERSON: + thing(19356, 2256, 44, 50, EV_GERSON, ACTOR_DOOR, 0); /* (the shop's doorway) */ + thing(19384, 2286, 26, 20, EV_BOX, ACTOR_ITEM, 0); + obj_sign(19690, 2288, 30, 20, "* (Gerson's shop, behind you.\n* Waterfall goes on, ahead.)"); + break; + case ROOM_WF_TWIN: + obj_sign(19860, 2290, 30, 20, "* (The water here is shallow. You wade on.)"); + break; + case ROOM_WF_MUSHROOM: + if (!flag(F_WF_EAST1)) { + obj_trigger(21144, 2350, 16, 500, EV_WF_EAST_END, ACTOR_TRIGGER); + } + break; + case ROOM_WF_TEMMIE: + set_flag(F_TEM_VILLAGE, 1); + obj_save(21325, 3120, "* (The Temmies' cheer fills you with determination.)"); + thing(21360, 3118, 26, 24, EV_BOX, ACTOR_ITEM, 0); + thing(21334, 3020, 48, 56, EV_TEM_SHOP, ACTOR_DOOR, 0); + obj_sign(21176, 3002, 78, 34, "* (A painting of a Temmie, very proud of itself.)"); + obj_sign(21122, 3062, 22, 26, "* (Welcome to Temmie Village!)"); + obj_sign(21316, 3056, 24, 26, "* (Tem Shop! Tem sells!)"); + for (int i = 0; i < 4; i++) { + static const int16_t tx[4] = {21168, 21202, 21234, 21268}, ty[4] = {3072, 3080, 3068, 3074}; + thing(tx[i], ty[i], 24, 30, EV_TEMMIE, ACTOR_TEMMIE, i); + } + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_dump_wake(Ev *c) { + EV_BEGIN; + /* (a dream while Frisk lies there) */ + NARRATE("* (...)|* (In the dark, a voice keeps calling someone's name.)\n* (It isn't yours.)"); + WAIT(30); + NARRATE("* (You wake up on a bed of golden flowers.)\n* (Garbage floats all around.)"); + set_flag(F_WF_DUMP, 1); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_cooler(Ev *c) { + EV_BEGIN; + NARRATE("* (A cooler. There's Astronaut Food inside.)\n* (Take some?)@Yes@No"); + if (CHOICE() == 0) { + if (!item_add(ITEM_ASTRONAUT_FOOD)) { + NARRATE("* (You're carrying too much.)"); + } else { + set_flag(F_WF_COOLER, flag(F_WF_COOLER) + 1); + NARRATE("* (You got the Astronaut Food.)"); + if (flag(F_WF_COOLER) >= 2 && c->self) gone(c->self); + } + } + EV_END; +} + +static int ev_mad_dummy(Ev *c) { + Obj *d = obj_get(ACTOR_MADDUMMY), *n = obj_get(ACTOR_NAPSTA); + EV_BEGIN; + NARRATE("* (It's a training dummy.)\n* (Hit it?)@Yes@No"); + g_shake = 6; + SAY(FACE_NONE, "* Hey! HEY! You!|* You're the one who picked on my cousin back in the Ruins!|* Ghosts like us live in dummies, you know! And you... you...|* GRR! Dummies, get them!!"); + BATTLE(FORM_MAD_DUMMY); + /* Napstablook drifts in; their tears soak Mad Dummy, who storms off */ + n = obj_napstablook(d->x - 50, d->y); + NARRATE("* (Napstablook drifts in, crying softly.)|* (Their tears rain down on Mad Dummy.)"); + SAY(FACE_NONE, "* Ugh! Gross! My dummy's all wet!|* This isn't over! I'll be back!!"); + d = obj_get(ACTOR_MADDUMMY); + WALK(d, d->x, d->y - 120, 3); + gone(obj_get(ACTOR_MADDUMMY)); + set_flag(F_MAD_DUMMY, 1); + SAY(FACE_NONE, "* oh... sorry... i didn't mean to get in the way...|* um... i live just up north, past the pond.|* ...if you want, you could come over.\n* only if you want to..."); + set_flag(F_NAPSTA_HOME, 1); + for (c->v[0] = 200; c->v[0] > 0; c->v[0] -= 10) { + n = obj_get(ACTOR_NAPSTA); + n->alpha = (uint8_t)c->v[0]; + WAIT(2); + } + gone(obj_get(ACTOR_NAPSTA)); + EV_END; +} + +static int ev_napsta_room(Ev *c) { + EV_BEGIN; + if (flag(F_NAPSTA_HOME) >= 2) { + SAY(FACE_NONE, "* oh... hi again.\n* it's nice to have company... i think."); + return 1; + } + SAY(FACE_NONE, "* oh... you really came.|* uh... this is my room. it's not much.|* sometimes i just lie on the floor for a while...\n* want to do that with me?@Sure@No thanks"); + if (CHOICE() == 0) { + NARRATE("* (You lie down on the floor next to Napstablook.)"); + WAIT(60); + NARRATE("* (Time passes.)\n* (It's oddly peaceful.)"); + SAY(FACE_NONE, "* ...thanks. that was really nice.\n* i don't get to do that with anyone."); + set_flag(F_NAPSTA_HOME, 2); + } else { + SAY(FACE_NONE, "* oh... that's okay..."); + } + EV_END; +} + +static int ev_locked_house(Ev *c) { + EV_BEGIN; + if (c->self && c->self->arg == 0) NARRATE("* (The door is locked.)\n* (Someone inside is clanking on something metal.)"); + else NARRATE("* (The door is locked tight.)\n* (It has a big star on it.)"); + EV_END; +} + +/* Thundersnail: 10G a race; cheering doesn't help much */ +static int ev_snails(Ev *c) { + EV_BEGIN; + SAY(FACE_NONE, "* oh... hi. this is our snail farm.|* want to race the snails? it's 10G...@Race@No"); + if (CHOICE() == 1) return 1; + if (sv.gold < 10) { + SAY(FACE_NONE, "* oh... you don't have enough money... that's okay."); + return 1; + } + sv.gold = (uint16_t)(sv.gold - 10); + set_flag(F_SNAIL_RACE, flag(F_SNAIL_RACE) + 1); + NARRATE("* (The snails are off!)|* (Your yellow snail creeps forward...)"); + WAIT(40); + if (rnd_n(2)) { + sv.gold = (uint16_t)(sv.gold + 9); + SAY(FACE_NONE, "* oh... your snail won... here's 9G.\n* ...sorry, that's all the prize money."); + } else { + SAY(FACE_NONE, "* oh... it lost. that's how it goes sometimes."); + } + EV_END; +} + +static int ev_shop_door(Ev *c) { + EV_BEGIN; + shop_open(c->id == EV_GERSON ? SHOP_GERSON : SHOP_TEM); + WAIT_UNTIL(g_mode == MODE_WORLD); + EV_END; +} + +static int ev_temmie(Ev *c) { + static const char *const lines[4] = { + "* hOI!!! im temmie!!|* and dis is my friend... temmie!!", + "* hOI!! im temmie!!\n* don forget my friend!!", + "* hOI!!!\n* yaya!!! human!!! so cute!!", + "* hOI... tem is allergic to temmies...|* but tem still luvs dem!!"}; + EV_BEGIN; + NARRATE(lines[(c->self ? c->self->arg : 0) & 3]); + EV_END; +} + +static int ev_east_end(Ev *c) { + EV_BEGIN; + set_flag(F_WF_EAST1, 1); + sv.room = (int16_t)g_room, sv.x = (int16_t)(pl.x - 30), sv.y = pl.y; + save_write_auto(); + menu_end_open(); + EV_END; +} + +int wf2_event(Ev *c) { + switch (c->id) { + case EV_DUMP_WAKE: return ev_dump_wake(c); + case EV_COOLER: return ev_cooler(c); + case EV_MAD_DUMMY: return ev_mad_dummy(c); + case EV_NAPSTA_ROOM: return ev_napsta_room(c); + case EV_LOCKED_HOUSE: return ev_locked_house(c); + case EV_SNAILS: return ev_snails(c); + case EV_GERSON: case EV_TEM_SHOP: return ev_shop_door(c); + case EV_TEMMIE: return ev_temmie(c); + case EV_WF_EAST_END: return ev_east_end(c); + } + return -1; +} diff --git a/games/undertale/src/wfmon.c b/games/undertale/src/wfmon.c index 86b3b28d..541eb51d 100644 --- a/games/undertale/src/wfmon.c +++ b/games/undertale/src/wfmon.c @@ -5,6 +5,7 @@ #include "battle.h" #include "game.h" #include "gfx.h" +#include "items.h" #include "monsters.h" #include "res.h" #include "world.h" @@ -113,6 +114,65 @@ static const char *talk_shyren(Battle *b, Monster *m) { } static int attack_shyren(Battle *b, Monster *m) { (void)b, (void)m; return ATK_SHYREN_NOTES; } +/* ---------------------------------------------------------------- Mad Dummy: a ghost, so a hit passes through; its + * own missiles, led back up into it, do hurt it. Then its cousin Napstablook drifts in (the fight ends) */ +static void act_maddummy(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b, (void)m, (void)act; + snprintf(t, (size_t)cap, "* You try to talk.\n* Mad Dummy is too busy yelling to hear a word."); +} +static const char *talk_maddummy(Battle *b, Monster *m) { + static const char *const lines[] = {"You! You\nhit my\ncousin!", "Dummies!\nGet them!", "Stand\nSTILL!", + "Why won't\nyou go\ndown?!", "Grr... GRRR!"}; + if (m->state >= 2) return "That's it!\nNo more\nmagic!"; + if (m->state) return "Ow! Who\nthrew that?!"; + return lines[min_i(b->turn - 1, 4)]; +} +static const char *flavor_maddummy(Battle *b, Monster *m) { + (void)b; + if (m->state) return "* Mad Dummy is hit by its own magic."; + return NULL; +} +static bool hit_maddummy(Battle *b, Monster *m, int dmg) { + (void)b, (void)dmg; + m->dmg_shown = 0; /* (MISS: it's a ghost) */ + return true; +} +static int attack_maddummy(Battle *b, Monster *m) { + (void)m; + return b->turn <= 2 || b->turn % 2 ? ATK_DUMMY_MINIONS : ATK_DUMMY_MISSILES; +} +/* hit three times by its missiles, or after a long while: Napstablook comes, and the fight is over */ +static bool ends_maddummy(Battle *b, Monster *m) { return m->state >= 3 || b->turn >= 8; } + +/* ---------------------------------------------------------------- Temmie: talk to her (or feed her Temmie Flakes) */ +static void act_temmie(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { /* Flex */ + snprintf(t, (size_t)cap, "* You flex.\n* Temmie is so impressed she wanders off to tell her friends."); + m->gone = true, m->fade = 1; + } else if (act == 1) { /* Talk */ + snprintf(t, (size_t)cap, "* You say hi.\n* Temmie vibrates with joy."); + m->spare = true; + } else { /* Feed Temmie Flakes */ + int slot = -1; + for (int i = 0; i < NUM_ITEMS; i++) + if (sv.items[i] == ITEM_TEMMIE_FLAKES) slot = i; + if (slot < 0) snprintf(t, (size_t)cap, "* You don't have any Temmie Flakes."); + else { + item_remove_at(slot); + snprintf(t, (size_t)cap, "* You feed Temmie some Temmie Flakes.\n* She's so happy, she gives you money!"); + m->spare = true, m->spare_gold = 30; + } + } +} +static const char *talk_temmie(Battle *b, Monster *m) { + (void)b; + static const char *const lines[] = {"hOI!!", "tem!!!", "awa\nawa!!", "u cute!!"}; + if (m->spare) return "u r tem's\nfriend!!"; + return lines[rnd_n(4)]; +} +static int attack_temmie(Battle *b, Monster *m) { (void)b, (void)m; return ATK_TEMMIE_HOPS; } + static const MonDef wf_defs[MON_COUNT - MON_SNOW_COUNT] = { [MON_AARON - MON_SNOW_COUNT] = { .name = "Aaron", .spare_gold = 30, .hp = 98, .at = 7, .df = 2, .exp = 52, .gold = 30, .spr_idle = SPR_AARON_B, @@ -137,6 +197,19 @@ static const MonDef wf_defs[MON_COUNT - MON_SNOW_COUNT] = { .spr_hurt = SPR_SHYREN_TURNED, .check = "She'd love to sing, if nobody were watching.", .acts = {"Smile", "Hum", "Conduct"}, .nacts = 3, .neutral = {"* Shyren hides her face.", "* Shyren is humming to herself.", "* Shyren peeks at you."}, .act = act_shyren, .talk = talk_shyren, .attack = attack_shyren}, + [MON_MAD_DUMMY - MON_SNOW_COUNT] = { + .name = "Mad Dummy", .hp = 200, .at = 7, .df = 0, .exp = 0, .gold = 0, .spr_idle = SPR_MADDUMMY_B, + .spr_hurt = SPR_MADDUMMY_B, .idle_speed = 4, .check = "Lives inside a dummy. Hits go right through.", .acts = {"Talk"}, + .nacts = 1, .neutral = {"* Mad Dummy is yelling at its dummies.", "* Mad Dummy glares at you.", + "* Mad Dummy's dummies are getting nervous."}, + .flags = MF_BOSS | MF_NOT_KILLABLE, .act = act_maddummy, .talk = talk_maddummy, .attack = attack_maddummy, + .flavor = flavor_maddummy, .on_hit = hit_maddummy, .ends = ends_maddummy}, + [MON_TEMMIE - MON_SNOW_COUNT] = { + .name = "Temmie", .hp = 5, .at = 7, .df = 0, .exp = 40, .gold = 20, .spr_idle = SPR_TEMMIE_B, + .spr_hurt = SPR_TEMMIE_HURT, .idle_speed = 4, .check = "Wants to pet you. You're allergic, though.", + .acts = {"Flex", "Talk", "Feed Flakes"}, .nacts = 3, + .neutral = {"* Temmie is vibrating.", "* Temmie is trying to pet you.", "* Smells like Temmie Flakes."}, + .act = act_temmie, .talk = talk_temmie, .attack = attack_temmie}, }; const MonDef *wf_mon_def(int id) { return &wf_defs[id - MON_SNOW_COUNT]; } @@ -156,6 +229,9 @@ static const Form wf_forms[FORM_COUNT - FORM_SNOW_COUNT] = { [FORM_MOLDBYGG_MOLDSMAL - FORM_SNOW_COUNT] = {{MON_MOLDSMAL, MON_MOLDBYGG}, 2, "* Moldbygg and Moldsmal block the way."}, [FORM_MOLDBYGG_WOSHUA - FORM_SNOW_COUNT] = {{MON_MOLDBYGG, MON_WOSHUA}, 2, "* Moldbygg and Woshua appear."}, [FORM_SHYREN - FORM_SNOW_COUNT] = {{MON_SHYREN}, 1, "* Shyren hums, then hides."}, + [FORM_MAD_DUMMY - FORM_SNOW_COUNT] = {{MON_MAD_DUMMY}, 1, "* Mad Dummy blocks the way!"}, + [FORM_TEMMIE - FORM_SNOW_COUNT] = {{MON_TEMMIE}, 1, "* A Temmie bounces up!"}, + [FORM_TEMMIE_MOLDBYGG - FORM_SNOW_COUNT] = {{MON_TEMMIE, MON_MOLDBYGG}, 2, "* Temmie and Moldbygg come along."}, }; const Form *wf_form(int form) { return &wf_forms[form - FORM_SNOW_COUNT]; } @@ -168,6 +244,10 @@ int wf_encounter(int room) { static const uint8_t pool[] = {FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, FORM_AARON}; return pool[rnd_n(5)]; } + case ROOM_WF_TWIN: case ROOM_WF_MUSHROOM: { + static const uint8_t pool[] = {FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_MOLDBYGG, FORM_WOSHUA, FORM_AARON}; + return pool[rnd_n(5)]; + } } return -1; } @@ -266,6 +346,59 @@ static void atk_shyren_notes(int t) { int wf_attack_length(int atk) { (void)atk; return 160; } +/* Mad Dummy: its dummies fly in from the sides and fire; later its magic missiles home in on the SOUL, and one that + * flies into Mad Dummy (up at the board's top middle, where it shows) hurts it */ +static void atk_dummy_minions(int t) { + if (t < 130 && t % 22 == 0) { + bool left = (t / 22) % 2; + int y = by0() + 12 + rnd_n(by1() - by0() - 24); + Bullet *d = shot((t / 22) % 3 == 2 ? SPR_DUMMY_BOT : SPR_DUMMY_MINION, left ? bx0() - 12 : bx1() + 12, y, + (left ? 1 : -1) * P(2), 0); + if (d) d->r = 7, d->flags |= BF_NOCLIP, d->life = 140; + } +} +#define DUMMY_X (board_cx()) +#define DUMMY_Y (by0() + 4) +static void atk_dummy_missiles(int t) { + if (t < 100 && t % 25 == 0) { + Bullet *b = shot(SPR_ORB, (t / 25) % 2 ? bx0() + 6 : bx1() - 6, by1() - 6, 0, -P(1)); + if (b) b->kind = BK_SCRIPT, b->r = 4, b->a = 0; + } + /* (the dummy's mark: what the missiles may fly into) */ + if (t == 0) { + Bullet *m = shot(SPR_DUMMY_MINION, DUMMY_X, DUMMY_Y, 0, 0); + if (m) m->flags |= BF_HARMLESS, m->kind = BK_NONE, m->life = 180, m->a = 1; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_ORB) continue; + /* steer toward the SOUL, a little at a time */ + int dx = soul_x() * FX - b->x, dy = soul_y() * FX - b->y; + b->vx += dx > 0 ? 2 : -2, b->vy += dy > 0 ? 2 : -2; + b->vx = clamp_i(b->vx, -P(2), P(2)), b->vy = clamp_i(b->vy, -P(2), P(2)); + b->x += b->vx, b->y += b->vy; + if (abs_i(b->x / FX - DUMMY_X) < 8 && abs_i(b->y / FX - DUMMY_Y) < 8 && b->t > 20) { + b->kind = BK_NONE; + for (int k = 0; k < bt.nmon; k++) + if (bt.mon[k].def == &wf_defs[MON_MAD_DUMMY - MON_SNOW_COUNT]) bt.mon[k].state++, bt.mon[k].hurt = 20, bt.mon[k].shake = 6; + } + if (b->t > 200) b->kind = BK_NONE; + } +} +/* Temmie: little Temmies hop across the board */ +static void atk_temmie_hops(int t) { + if (t < 130 && t % 26 == 0) { + bool left = (t / 26) % 2; + Bullet *b = shot(SPR_TEMMIE_OW, left ? bx0() - 10 : bx1() + 10, by1() - 8, (left ? 1 : -1) * P(2), -P(3)); + if (b) b->kind = BK_GRAVITY, b->ay = 5, b->r = 7, b->flags |= BF_NOCLIP, b->life = 150, b->a = 4; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_GRAVITY || b->spr != SPR_TEMMIE_OW || b->a <= 0) continue; + if (b->y > P(by1() - 8) && b->vy > 0) b->vy = -P(3), b->a--; + } +} + void wf_attack_run(Battle *b, int atk, int t) { (void)b; if (t < 0) { @@ -280,5 +413,8 @@ void wf_attack_run(Battle *b, int atk, int t) { case ATK_MOLDBYGG_HOPS: atk_moldbygg_hops(t); break; case ATK_MOLDBYGG_RAIN: atk_moldbygg_rain(t); break; case ATK_SHYREN_NOTES: atk_shyren_notes(t); break; + case ATK_DUMMY_MINIONS: atk_dummy_minions(t); break; + case ATK_DUMMY_MISSILES: atk_dummy_missiles(t); break; + case ATK_TEMMIE_HOPS: atk_temmie_hops(t); break; } } diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index ac686bc9..cdd306cd 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """Checks of Undertale on a computer (make test): the host build, with AddressSanitizer and UBSan, through the menus, every battle, the saves, the -whole Ruins, the whole of Snowdin and Waterfall's west half. +whole Ruins, the whole of Snowdin and Waterfall as far as it goes. python3 tests/check.py build/play [--quick] @@ -31,9 +31,9 @@ ROOMS = {m.group(1): int(m.group(2)) for m in re.finditer(r"#define ROOM_(\w+) (\d+)", open(os.path.join(HERE, "..", "src", "data.h")).read())} FORM_SNOWDRAKE, FORM_PAPYRUS = 19, 31 -FORM_AARON, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, FORM_MOLDBYGG_WOSHUA, FORM_SHYREN = \ - range(32, 39) -ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT = range(17, 22) +(FORM_AARON, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, + FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG) = range(32, 42) +ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD = range(17, 23) def run(args, frames, saves=None, what=""): @@ -102,19 +102,22 @@ def check(cond, msg): check(s and s["mode"] == MODE_WORLD and s["hp"] == 1, f"Papyrus did not capture Frisk: {s}") # Waterfall's battles: fled from, fought, and each spared its own way (Aaron out-flexed, Woshua's green caught after -# asking to be cleaned, Moldbygg hugged then let go, Shyren hummed along with) -for form in range(FORM_AARON, FORM_SHYREN + 1): +# asking to be cleaned, Moldbygg hugged then let go, Shyren hummed along with, Temmie talked to); Mad Dummy can't be +# fled or hurt: its fight lasts until Napstablook comes +for form in list(range(FORM_AARON, FORM_SHYREN + 1)) + [FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG]: s = run(["--god", "--battle", str(form), "--path", "flee"], 1500, what=f"battle {form}, fleeing") check(s and s["mode"] == MODE_WORLD, f"battle {form}: fleeing did not end it: {s}") -for form in (FORM_AARON, FORM_WOSHUA, FORM_MOLDBYGG, FORM_SHYREN): +for form in (FORM_AARON, FORM_WOSHUA, FORM_MOLDBYGG, FORM_SHYREN, FORM_TEMMIE): s = run(["--god", "--battle", str(form), "--path", "fight"], 4000, what=f"battle {form}, fighting") check(s and s["mode"] == MODE_WORLD and s["kills"] >= 1, f"battle {form}: FIGHT did not win it: {s}") for form, seq, gold in ((FORM_AARON, "1,1,1", 30), (FORM_WOSHUA, "1,1,1", 25), (FORM_WOSHUA_AARON, "1,1@2,1@2,1@2", 55), (FORM_MOLDBYGG, "1,3", 20), (FORM_MOLDBYGG_WOSHUA, "1,3,1@2,1@2,1@2", 45), - (FORM_SHYREN, "2,2,2,2,2", 20)): + (FORM_SHYREN, "2,2,2,2,2", 20), (FORM_TEMMIE, "2", 0), (FORM_TEMMIE_MOLDBYGG, "2,1@2,3@2", 20)): s = run(["--god", "--battle", str(form), "--path", "seq:" + seq], 9000, what=f"battle {form}, sparing") check(s and s["mode"] == MODE_WORLD and s["kills"] == 0 and s["gold"] == gold, f"battle {form}: the friendly way did not spare it: {s}") +s = run(["--god", "--battle", str(FORM_MAD_DUMMY), "--path", "act:1"], 9000, what="Mad Dummy") +check(s and s["mode"] == MODE_WORLD and s["kills"] == 0, f"Mad Dummy's fight did not end: {s}") # the shop in Snowdin: a Cinnamon Bunny for 25G; Papyrus's date: his phone number s = run(["--name", "Frisk", "--noenc", "--room", str(ROOMS["SNOWTOWN"]), "--at", "446,1092", "--gold", "100", "--keys", @@ -167,21 +170,23 @@ def check(cond, msg): check(flag(s, name) == v, f"Snowdin: F_{name} is {flag(s, name)}, not {v}") check(s["kills"] == 0, f"Snowdin: {s['kills']} killed on the friendly way") -# Waterfall's west half, the friendly way: Monster Kid, Grillby's with Sans, the tutu, Papyrus's report, the bridge -# seeds (and the secret one to the quiche), the wishing room, Undyne's spears, the telescope, the punch card, the marsh -# (the ballet shoes), Onionsan, the piano and the artifact, Shyren, the umbrellas, Monster Kid in the rain, the bridge cut +# Waterfall, the friendly way: Monster Kid, Grillby's with Sans, the tutu, Papyrus's report, the bridge seeds (and +# the secret one to the quiche), the wishing room, Undyne's spears, the telescope, the punch card, the marsh (the +# ballet shoes), Onionsan, the piano and the artifact, Shyren, the umbrellas, Monster Kid in the rain, the bridge cut, +# the garbage dump, Mad Dummy, Napstablook's house, the snail farm, Gerson, the mushroom maze and Temmie Village if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["WF1"]), "--at", "30,1480", "--path-file", - os.path.join(HERE, "waterfall.path")], 45000, what="Waterfall") - check(s and s["mode"] == MODE_END and s["room"] == ROOMS["WF_BRIDGE"], f"Waterfall did not end at the bridge: {s}") + os.path.join(HERE, "waterfall.path")], 60000, what="Waterfall") + check(s and s["mode"] == MODE_END and s["room"] == ROOMS["WF_MUSHROOM"], f"Waterfall did not end past the maze: {s}") if s: for name, v in (("WF_MK", 1), ("GRILLBYS", 1), ("WF_TUTU", 1), ("WF_UNDYNE1", 1), ("SEEDS1", 1), ("SEEDS2", 1), ("SEEDS3", 1), ("WF_QUICHE", 1), ("CHASE1", 1), ("WF_TELESCOPE", 1), ("WF_PUNCH", 1), ("WF_BALLET", 1), ("WF_ONION", 2), ("PIANO", 1), ("WF_ARTIFACT", 1), ("SHYREN", 1), - ("UMBRELLA", 3), ("MK_RAIN", 2), ("WF_BRIDGE", 1)): + ("UMBRELLA", 3), ("MK_RAIN", 2), ("WF_BRIDGE", 1), ("WF_DUMP", 1), ("WF_COOLER", 2), + ("MAD_DUMMY", 1), ("NAPSTA_HOME", 2), ("TEM_VILLAGE", 1), ("WF_EAST1", 1)): check(flag(s, name) == v, f"Waterfall: F_{name} is {flag(s, name)}, not {v}") check(s["kills"] == 0, f"Waterfall: {s['kills']} killed on the friendly way") - for item in (ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT): + for item in (ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD): check(item in s["items"], f"Waterfall: item {item} not picked up: {s['items']}") if failures: diff --git a/games/undertale/tests/waterfall.path b/games/undertale/tests/waterfall.path index 60cceed7..c3a9cef0 100644 --- a/games/undertale/tests/waterfall.path +++ b/games/undertale/tests/waterfall.path @@ -223,5 +223,86 @@ talk go:15400,1700 go:16000,1700 go:16800,1700 -go:17400,1700 +go:17370,1669 +17400,1669 talk +talk +# the garbage dump: waking on the golden flowers, the Trash Zone's SAVE, the walkway's cooler, Mad Dummy (until +# Napstablook comes) +go:18300,3240 +go:18540,3256 +u +z +talk +go:18880,3200 +go:18930,2818 +u +z +pick:0 +talk +u +z +pick:0 +talk +go:18905,2705 +r +z +pick:0 +talk +act:1 +talk +# the Quiet Area, Napstablook's house (lying on the floor), the snail farm (no race), Gerson's shop (just looking) +go:18900,2440 +go:18877,2116 +18877,2080 +w30 +go:18972,1828 +u +z +pick:0 +talk +go:18840,1940 +18840,1980 +w30 +go:19318,2134 +u +z +pick:1 +talk +go:19366,2290 +u +z +w20 +d +w5 +d +w5 +d +w5 +z +w30 +# the twin waterfalls, the mushroom maze, Temmie Village down its hidden path (a Temmie, the Tem Shop), and out at +# the maze's far side, where the game now ends +go:20540,2310 +go:20700,2330 +go:21070,2860 +go:21070,2950 +go:21170,3084 +u +z +talk +go:21350,3070 +u +z +w20 +d +w5 +d +w5 +d +w5 +z +w20 +go:21070,2950 +go:21070,2840 +go:21150,2380 diff --git a/games/undertale/tools/fetch.py b/games/undertale/tools/fetch.py index de4c4741..c5f52ffd 100644 --- a/games/undertale/tools/fetch.py +++ b/games/undertale/tools/fetch.py @@ -58,7 +58,7 @@ "Junk_Food", "Annoying_Dog/In_battle", "Lesser_Dog/In_battle", "Greater_Dog/In_battle", "Doggo/In_battle", "Dogamy_and_Dogaressa/In_battle"] # files the categories leave out, as their wiki names -FILES = ["QC sprite.png", "QC screenshot shop.png"] +FILES = ["QC sprite.png", "QC screenshot shop.png", "Gerson screenshot shop.png", "Tem Shop screenshot Temmie Armor.png"] DEMO = { "MacUnderTale.zip": "https://thisisatestofthevideogamedeliverysystem.sfo2.digitaloceanspaces.com/game/MacUnderTale.zip", } diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index f7d80b69..e2ed0862 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -107,6 +107,8 @@ WF_FLOOR = [(54, 47, 121), (20, 26, 73)] WF_WATER = [(27, 33, 90), (27, 21, 72)] WF_CYAN = [(123, 251, 254), (47, 234, 255)] +WF_DUMP = [(17, 11, 49), (18, 24, 71), (5, 6, 33), (15, 9, 47)] # (the dump's water, waded in) +NAPSTA_FLOOR = [(198, 88, 41), (100, 50, 17), (133, 59, 41), (136, 68, 41)] AREAS.append(dict(name="waterfall", map="Waterfall_map.png", floor=WF_FLOOR, margin=0, close=True, patches=[ # the people the game moves about (they're the game's objects here): Monster Kid, the fish by the first # echo flower, Undyne (her black ledges kept black), Woshua, the Goner Kid, Onionsan, Shyren, the grey @@ -120,6 +122,11 @@ # the bridge seeds (the game's objects too) and the bridges they make, drawn solved *[("erase", x, y, 20, 20, WF_FLOOR) for x, y in [(2300, 1420), (2280, 1440), (2320, 1440), (2300, 1460), (2960, 1340), (3000, 1340), (2960, 1380), (3000, 1380)]], + # past the bridge: Mad Dummy, the bird (on its side of the gap), Papyrus at Undyne's door, Napstablook (by the + # houses, at the snail farm, at home), Mettaton, the creature by the pond (all the game's objects) + ("erase", 18918, 2686, 22, 44, "ring"), ("erase", 18523, 2341, 16, 20, "ring", []), ("erase", 18578, 2058, 26, 48, "ring"), + ("erase", 18811, 2113, 24, 42, "ring"), ("erase", 18976, 2100, 38, 52, "ring"), ("erase", 19108, 2330, 42, 54, "ring"), + ("copy", 19276, 2090, 26, 52, 19316, 2090), ("erase", 18969, 1810, 26, 40, "ring"), # the bird (it waits across the gap), the tutu and the artifact (objects, gone once taken) ("erase", 8466, 578, 15, 19, [(27, 33, 90), (27, 21, 72), (23, 13, 43)]), ("erase", 1240, 1240, 22, 10, [(23, 13, 43), (27, 21, 72), (27, 33, 90)]), @@ -395,6 +402,36 @@ fix=[("walk", 12920, 1676, 1480, 48)]), dict(name="wf_aaron", area="waterfall", rect=(14400, 1560, 960, 260), title="Waterfall", floor_colors=WF_WATER), dict(name="wf_bridge", area="waterfall", rect=(15360, 1540, 2300, 460), title="Waterfall"), + # under the bridge: the garbage dump's landing (Frisk wades in its water), the Trash Zone, the walkway up to + # Mad Dummy + dict(name="wf_dump", area="waterfall", rect=(17580, 3120, 740, 260), title="Waterfall", floor_colors=WF_DUMP, + fix=[("walk", 17666, 3226, 64, 40)]), # (the golden flowers Frisk wakes up on) + dict(name="wf_trash", area="waterfall", rect=(18320, 3120, 500, 240), title="Waterfall", floor_colors=WF_DUMP), + dict(name="wf_walkway", area="waterfall", rect=(18820, 2420, 160, 920), title="Waterfall", floor_colors=WF_DUMP), + # the Quiet Area and its pond, the small bird's side of the gap, Blook Acres (Undyne's, Napstablook's and + # Mettaton's houses, the snail farm), Napstablook's room, Gerson's crossroads + dict(name="wf_quiet", area="waterfall", rect=(18660, 2200, 480, 220), title="Waterfall", floor_colors=WF_WATER, + fix=[("walk", 18650, 2296, 50, 44)]), + dict(name="wf_bird2", area="waterfall", rect=(18250, 2200, 410, 240), title="Waterfall", + floor_colors=WF_WATER + [(23, 13, 43), (0, 0, 0)]), + dict(name="wf_acres", area="waterfall", rect=(18420, 1960, 1000, 240), title="Waterfall", floor_colors=WF_WATER, + fix=[("walk", 18876, 2088, 24, 30)], # (Napstablook's doorway) + doors=[((18876, 2098, 24, 10), "wf_napsta_in", (18826, 1906), "up")]), + dict(name="wf_napsta_in", area="waterfall", rect=(18780, 1720, 260, 240), title="Napstablook's house", + floor_colors=NAPSTA_FLOOR, fix=[("walk", 18820, 1920, 40, 40)], + doors=[((18820, 1954, 40, 6), "wf_acres", (18877, 2116), "down")]), + dict(name="wf_gerson", area="waterfall", rect=(19140, 2200, 710, 280), title="Waterfall", floor_colors=WF_WATER), + # the twin waterfalls (waded through), the mushroom maze (its walls dotted lines of grass: kept clear of), Temmie + # Village below it + dict(name="wf_twin", area="waterfall", rect=(19850, 2200, 700, 220), title="Waterfall", + floor_colors=WF_WATER + WF_DUMP + [(0, 0, 0)], floor_rects=[(19850, 2286, 700, 48)]), + dict(name="wf_mushroom", area="waterfall", rect=(20550, 2280, 610, 600), title="Waterfall", + floor_colors=[(0, 0, 0)] + WF_WATER + WF_DUMP, margin=3, floor_rects=[(20550, 2306, 214, 48), (20555, 2350, 605, 530)], + fix=[("walk", 20550, 2310, 214, 40), ("walk", 20556, 2346, 212, 16), ("walk", 20764, 2320, 24, 40), + ("walk", 21020, 2372, 140, 26), ("walk", 21056, 2850, 44, 30)]), + # (the way in, into the maze; out at its top right; the hidden way down to the village) + dict(name="wf_temmie", area="waterfall", rect=(21040, 2880, 380, 280), title="Temmie Village", floor_colors=WF_WATER, + fix=[("walk", 21056, 2880, 44, 24)]), ] # rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index 4ac2d9f2..e241d4a1 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -299,6 +299,16 @@ def gen_debris(): ("bloom", "wiki:Bridge_Seed_overworld_flower.png", {"keep": True}), # what's about Waterfall (cut from the map, its floor made see-through): the small bird, and to be picked up, # the tutu, the artifact on its pedestal + # past the bridge: Mad Dummy and its dummies, Temmie, the shops' keepers + ("maddummy_ow", "wiki:Mad_Dummy_overworld.png", {"feet": True}), + ("maddummy_b", "wiki:Mad_Dummy_battle.gif", {"feet": True, "every": 9}), + ("dummy_minion", "wiki:Dummy_Minion_battle.png", {"center": True}), + ("dummy_bot", "wiki:Dummy_Bot_battle.png", {"center": True}), + ("temmie_ow", "wiki:Temmie_overworld.png", {"feet": True}), + ("temmie_b", "wiki:Temmie_battle_idle.gif", {"feet": True, "every": 8}), + ("temmie_hurt", "wiki:Temmie_battle_hurt.png", {"feet": True}), + ("shop_gerson", "wiki:Gerson_screenshot_shop.png", {"keep": True, "box": (0, 0, 320, 120)}), + ("shop_tem", "wiki:Tem_Shop_screenshot_Temmie_Armor.png", {"keep": True, "box": (0, 0, 320, 120)}), ("bird", "map:Waterfall_map.png:8466,578,15,19", {"keep": True, "clear": [(27, 33, 90), (27, 21, 72), (23, 13, 43)]}), ("tutu", "map:Waterfall_map.png:1240,1240,22,10", {"keep": True, "clear": [(23, 13, 43), (27, 21, 72), (27, 33, 90)]}), ("artifact", "map:Waterfall_map.png:10156,150,12,11", diff --git a/tools/release.py b/tools/release.py index 6faf9e72..817b2e84 100644 --- a/tools/release.py +++ b/tools/release.py @@ -27,9 +27,9 @@ "on its own"), "hollowknight": ("Hollow Knight", "from King's Pass to Hornet in Greenpath. Too big to share the calculator with " "NumPlay: install it on its own"), - "undertale": ("Undertale", "the Ruins, Snowdin and half of Waterfall, from the bed of golden flowers to the bridge " - "Undyne cuts: Flowey, Toriel, Sans, Papyrus, Monster Kid, Undyne's spears and every puzzle, the rest " - "of the Underground to come. Too big to share the calculator with NumPlay: install it on its own"), + "undertale": ("Undertale", "the Ruins, Snowdin and most of Waterfall, from the bed of golden flowers to Temmie " + "Village: Flowey, Toriel, Sans, Papyrus, Monster Kid, Undyne's spears, Mad Dummy and every puzzle, the " + "rest of the Underground to come. Too big to share the calculator with NumPlay: install it on its own"), "championisland": ("Champion Island", "the Doodle Champion Island Games. Too big to share the calculator with " "NumPlay: install it on its own"), "numpowder": ("NumPowder", "The Powder Toy on the calculator: sand, water, fire, acid, electricity and nearly 200 " From 3e2d41f7211e39846aecf524f8f04cfa30e382fd Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 07:54:56 +0000 Subject: [PATCH 11/19] Undertale: Waterfall's end, Undyne's fight, to Hotland's edge The rest of Waterfall, as the Undertale Wiki describes it (what's said is short and in our own words): - The lantern maze past the mushroom maze (the map draws it with no way through for Frisk, so two grass tufts of one wall are left out). - The dead end: its echo flower, Undyne coming up behind, Monster Kid jumping out of the grass in her way, and the hidden path lighting up. - The echo flowers' path north, and the prophecy's glyphs at its end. - The chasm's bridge: Monster Kid learns Frisk is a human, trips and hangs off the edge as Undyne comes; help them up, let them fall, or run off, each with its own ending. - Undyne on her crag, then her fight: the green SOUL stays put and turns its shield with the arrows to block her spears from four sides, and her spears come up from the ground. She can't be spared: fled from, she chases Frisk by the river and the neon sign (where she waits for Papyrus's call), and a catch is another fight. - Hotland's first room (a new area cut from its map): Undyne falls in the heat on the bridge, and a cup from the water cooler gets her up. The game now ends there. Tests: the Waterfall route goes on to Hotland, and Undyne's fight is fled from in the battle checks. Docs and screenshots updated. --- README.md | 4 +- docs/play.md | 2 +- games/undertale/README.md | 22 +- games/undertale/docs/chasm.png | Bin 0 -> 3425 bytes games/undertale/docs/crag.png | Bin 0 -> 4346 bytes games/undertale/docs/deadend.png | Bin 0 -> 4034 bytes games/undertale/docs/hotland.png | Bin 0 -> 11590 bytes games/undertale/docs/neon.png | Bin 0 -> 1330 bytes games/undertale/docs/undyne.png | Bin 0 -> 3115 bytes games/undertale/src/battle.c | 10 + games/undertale/src/battle.h | 5 +- games/undertale/src/bullets.c | 17 ++ games/undertale/src/data.bin | Bin 786266 -> 858633 bytes games/undertale/src/data.h | 121 +++++---- games/undertale/src/events.c | 2 + games/undertale/src/events.h | 4 +- games/undertale/src/flags.h | 8 +- games/undertale/src/menu.c | 2 +- games/undertale/src/menu.h | 2 +- games/undertale/src/monsters.h | 6 +- games/undertale/src/rooms.c | 2 + games/undertale/src/waterfall.h | 9 +- games/undertale/src/wf1.c | 4 +- games/undertale/src/wf2.c | 16 -- games/undertale/src/wf3.c | 380 +++++++++++++++++++++++++++ games/undertale/src/wfmon.c | 69 ++++- games/undertale/tests/check.py | 16 +- games/undertale/tests/waterfall.path | 56 +++- games/undertale/tools/rooms.py | 42 +++ games/undertale/tools/sprites.py | 19 +- 30 files changed, 717 insertions(+), 101 deletions(-) create mode 100644 games/undertale/docs/chasm.png create mode 100644 games/undertale/docs/crag.png create mode 100644 games/undertale/docs/deadend.png create mode 100644 games/undertale/docs/hotland.png create mode 100644 games/undertale/docs/neon.png create mode 100644 games/undertale/docs/undyne.png create mode 100644 games/undertale/src/wf3.c diff --git a/README.md b/README.md index 9e9aab01..36798a38 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins, Snowdin and most of Waterfall, from the golden flowers to Temmie Village
Download + Undertale
Undertale

The Ruins, Snowdin and Waterfall, from the golden flowers to Hotland's edge
Download More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins, Snowdin and most of Waterfall are out, Undyne's fight, Hotland and New Home are next +- [ ] Undertale: the Ruins, Snowdin and Waterfall are out, Hotland, the CORE and New Home are next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index 2455168f..7b94c10a 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins, Snowdin and Waterfall. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. For now the game ends past Waterfall's mushroom maze. +Name the fallen human, then walk and talk your way through the Ruins, Snowdin and Waterfall. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. For now the game ends in Hotland's first room.
diff --git a/games/undertale/README.md b/games/undertale/README.md index 59c4b0a6..c5d04f00 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins, Snowdin and most of Waterfall, from the bed of golden flowers to Temmie Village. The rest of the Underground is on the way. + The Ruins, Snowdin and Waterfall, from the bed of golden flowers to Hotland's edge. The rest of the Underground is on the way.

@@ -25,8 +25,8 @@ * **The whole Ruins:** every room, from the golden flowers through Toriel's puzzles, the falling leaves, the spikes, the rocks, the cracked floors and the switches, to Toriel's home and the long corridor under it. * **Its people, with all they have to say:** Flowey, Toriel and her phone calls, Napstablook, the talking rock, the Froggits who give advice, the spider bake sale, the snail facts, and every sign, bookshelf and mirror. * **Snowdin:** Sans and Papyrus, and every one of Papyrus's puzzles: the invisible electricity maze, the X and O tiles, the one on ice, the multicolor tiles and the Gauntlet. Then Snowdin Town, with its shop, inn, library and Papyrus's house. -* **Waterfall:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the marsh where the land is black and the water glows, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. Then the fall into the garbage dump, Mad Dummy, Napstablook's house and snail farm, the small bird back over the gap, Gerson's shop, the mushroom maze and Temmie Village with its Tem Shop. -* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie and Mad Dummy, who can't be hurt, in Waterfall. +* **Waterfall:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the marsh where the land is black and the water glows, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. Then the fall into the garbage dump, Mad Dummy, Napstablook's house and snail farm, the small bird back over the gap, Gerson's shop, the mushroom maze and Temmie Village with its Tem Shop. And at the end of Waterfall: the lantern maze, Undyne at the dead end (and Monster Kid in her way), the echo flowers' path, Monster Kid on the chasm's bridge, Undyne on her crag, her fight and her chase, and Hotland's edge, where the heat gets her and the water cooler helps. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -87,6 +87,18 @@ Gerson's shop
Gerson's shop Temmie Village
Temmie Village + + Undyne and Monster Kid at the dead end
Monster Kid gets in Undyne's way + Monster Kid hanging off the bridge
Monster Kid hangs off the bridge + + + Undyne on her crag
Undyne on her crag + Undyne's fight, the green SOUL
Block Undyne's spears with the green SOUL + + + The neon sign
Welcome to Hotland + Undyne in Hotland's heat
Water for Undyne, in Hotland's heat + ## How to play @@ -97,7 +109,7 @@ Monsters jump out as you walk. In a battle, choose FIGHT to attack (press OK whe Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bottom of the box, and Up jumps over his bones. On ice you slide until something stops you. Snowdin Town's shop sells food and gear, and its inn gives you a night's rest. -In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. The Tem Shop is the one shop that buys what you carry. +In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. The Tem Shop is the one shop that buys what you carry. When Undyne turns your SOUL green, it can't move: turn its shield with the arrows to block her spears. She can't be spared: run, and she'll chase you. Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. @@ -114,7 +126,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **The Ruins, Snowdin and most of Waterfall, for now:** the way on past the mushroom maze ends the game, on a screen that says the rest of the Underground is still to come. Undyne's fight at the end of Waterfall, Hotland and New Home come next, one at a time. +* **The Ruins, Snowdin and Waterfall, for now:** Hotland's first room ends the game, on a screen that says the rest of the Underground is still to come. Hotland, the CORE and New Home come next, one at a time. * **No music or sound:** the calculator has no speaker. * **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. diff --git a/games/undertale/docs/chasm.png b/games/undertale/docs/chasm.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b315023442d55407193bd05ca3ce80f5212702 GIT binary patch literal 3425 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/crag.png b/games/undertale/docs/crag.png new file mode 100644 index 0000000000000000000000000000000000000000..85b4489ab581164159bfec6e02559bfa5a0225df GIT binary patch literal 4346 zcmVEkwwUSaM*5ij1PO0GK&pgrEkY8PVH2lodP&?w*X) z7a_lj6hdEYx6q4__b7T16x!Y}03qay;k_g!z>N{|qObr1DnbPV+%S}dP)M=A$bOJ~%K!gwO~f07eJ_FhT%~5CUL?P&kcDBdu>AJD%Y3%a!+IA~YYh z2x{Sj10zHTjSvE0gb)BDG#3TjmGbh-zcue4-~KDLj}Q)wP_^p1VC$WL4lF#jTLQcn zp#nl^gpgks?3y1TG(tEqLMVI=+#LWO0eIQ`?7d7Oj)~BGq!L63jZnb?V1&ql`}Fgd z|7hO-%k4i<`v~E{2mvrc2!Ihnl>n^Ca!G&@@*);;AXJ#t;o-gHCBTglDmVuonr%V| z4P~I>UowE@=@CLM9POn&J@%VWKmBqkUYs7W(Jvu1DhgdmuSzm1P9qL{czxw`_~mls zu*;=~vmj%g?RHJme0cOw{O|p@?i^ZACUtil%wR(e*LPtv0>~@y%9pAEOhJEt)^*O_G{|lbgux6(nirDem;Bo0(t?sU%uvY znG^Oa32oPY*LRQQl+uSs54*$B(3@uh-1^kpAXbY#!^{?9LmBUKDe_p=cvXxAy+W-) zEYK|}KMD~E?dl&Bmk~Wa_Lp`{YtEsdg̸Ivxo8?k~`s3gK_AM}e`9d-* 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/deadend.png b/games/undertale/docs/deadend.png new file mode 100644 index 0000000000000000000000000000000000000000..109993c20c8aed424f1f827d7c2326a820e7e584 GIT binary patch literal 4034 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 RnEsJ#pkw-=_`YNKzW`a+|Lgz& literal 0 HcmV?d00001 diff --git a/games/undertale/docs/hotland.png b/games/undertale/docs/hotland.png new file mode 100644 index 0000000000000000000000000000000000000000..6fa8db7cfb723e3295f099a20ae8bdd307abbc01 GIT binary patch literal 11590 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/neon.png b/games/undertale/docs/neon.png new file mode 100644 index 0000000000000000000000000000000000000000..e5aa2d0504057fe2f9b396ae033c0475b14d4938 GIT binary patch literal 1330 zcma)*eN>WX7{*_DNt~jy!?MiOa-~O^^F1Z%oTCz)VJ(b8Gd0mAtPjKzOKmF5W38j+ z&eUa*(zGOT;0Kj0MP74iWmsBJ(s4?hH07hruLPx`b@p#Pf86K!_?_!{?sHwwnaG{t z_O`2S0RXTkZ6i_uz-o(S{@Mm%sb;cI2mm1GNW`ssGF1A(KaXK{ePKP^vV(}MYRdE2 zR35x9-0c#AIaJZ_cC_}YebhWDUm7gh#I=Xu{C^{W)=X$ew%-7AV z{YqstH`QBq(u>omqY^0JAbPHDE)Q!NN|>1z_6iI~#p6HQT3H{aJ(pK)mk%A2%5++4 z1$j^trhjQ4d&Ro%L5MTtbL&kYsDyQa*q){(plb<`lBriraI%bDJHC)ytl9q8LNU1j{Lrfnv=-(7C!!Ob z3jxsoz{C{DrV$*|J$$>~t_v^sj0?%Rw1UtY!|p%X$0Y^6V_ono5TQ*f#e@d)4 zl~@P9yRW-EXQ)&dw?as*3y9X!rp5;sB>bU>74>!sA(dBqBV*E7ooR!dzVFBZKxcH# ziAScnsrIXTUI-(ZEr(cMWV50t?MFqUs$Dmu?T{Hvlum8vby2PBVD>x44FQT(L}eT* z$m?i6voq*If?=+gr+%6m17bExlZPyQA@09B{H0sg()f)KvO?EUhqe;|n6ejQ9JI@;-}{Q@u3}_2o0fEWHse@& zc23iIH9IHC!x#SN^;m~`0J>5ten9?uL`I3|5tN5w;88z`LL*TZJV>B-mtZkthQ^}D za__0m`6mOf!&Fa6``VJ6L?EUbtdEw(e&>9ch6t*RD%V7!2*| zZ`pA~Wh5!zG_H>YF>u1xvi(+`l%JY0Sg8``IG}By_r`+=G{Ul2%m5)8eM%MV9-ij~x7 sPhAvKykyXV|hAK7BYP>gwCPb*K2rX@?xh-x7 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 y1) { @@ -168,6 +176,15 @@ bool soul_hit_test(void) { Bullet *b = &bullets[i]; if (b->kind == BK_NONE || (b->flags & (BF_HIDDEN | BF_HARMLESS))) continue; int bx = b->x / FX, by = b->y / FX; + if (bt.soul_mode == SOUL_GREEN && (b->flags & BF_SHIELD)) { + /* the shield stops what comes at it from the side it faces */ + int dx = bx - sx, dy = by - sy; + int side = abs_i(dx) > abs_i(dy) ? (dx < 0 ? 2 : 3) : (dy < 0 ? 1 : 0); + if (side == bt.shield && abs_i(dx) + abs_i(dy) <= 15) { + b->kind = BK_NONE; + continue; + } + } bool touch; if (b->flags & BF_BOX) touch = sx + 3 > bx - b->w / 2 && sx - 3 < bx + b->w / 2 && sy + 3 > by - b->h / 2 && sy - 3 < by + b->h / 2; else touch = (sx - bx) * (sx - bx) + (sy - by) * (sy - by) <= (b->r + 3) * (b->r + 3); diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index 8a4000a4e1fb689c8a1f29894e6338cd1ba198e1..814b33a81f556233f7f83f884c52d99a9b212eed 100644 GIT binary patch delta 93577 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

Q1Juyc+>QMsT#(C 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 delta 32301 zcmXt>30zOv|NrkfcgvQ24@vfrJ%l8Ck|arzJxP;&ca!W}+Jx*RX|iWel4MJ048|B^ zjIS}q7~2?Q%>UW+`+GcIpY!>A?)#kcKJWdUdp}xvtlfhzty&ND^=MsMQ50uTMN^bH zwu-VKLQ#S(MTu!7m1FlcCI5w{)Oe{WMQ=3a43_B`!n+I&$)xkFpTNOx(!1^2*x`aGfiiS{M5?|A-cJM}U=p7vgDFx~BEWRMn*nBm zSztET=7RZPp}~tKW!!gaz3M`V;ZrOmakL3wBkz;q8fvSL9@ECzSl95U>)^(JI3;f= z+w~jD0hfw=5)cGfSv`GqfE(7vGk zmG)O9hIX5L$@`al_foNwzw!PR_#M0kfBc6+@rL$|QYhZizNLLf`;PWK?R(k}v>%kS z;!oN?X+P3_RPw}Mw0|jimiWY*Pkiw=?cWf5rv1$4e`vq_hdl8wEq)2|1SX^iS_G{` z)=(6cRuwKF0?YvEpoUOIGzgHYXsN1V0@w!bf;3GPi*!|F0_znoxrQp7O;seD8iQ$~ z2$U6?@BjHO z>4sPVvcX628H5^!*ac>pCWD(I4BP`A!W4(VbKomYkqw+wXf$ZRJ&TtLx+$uFDDWBt z8m7nxifO}OHmJh}b=ZhG;3+sMZG@w0BVxc8&_S~iyMV23Bj$l4;05qAY(x%lHcK&1 zDVQoH_JD_=zbJ)tO9{(SmJ%`GGYC~niF+VjD@eVk>2_ zm9nA`bW_WUSs(*E19i2s!VlztPnuO$6zF9|X9i6Hk3coEtndP-&2mgsjun?fm*tqK zoLB^WWjV11j8n^rWKaakYUP9nSOC2Bav}@F8@BYfWtFxp(w0TqidP^{wH3*lt(c+P z3Qr3nd$T-*<(a6wa1-T4I*63zg`ZkpG}Fq9FQ7;-FVc+i;t8l_R)D?&16M!-6+|sr zfq^TCT(yEo(n!{N1#u5#7!{$bh@>h)R}ls(3NNq>WPxUCMPZHMWiyD-DvI8EMMPZ@ zn#P&Y6OWSG?$v>Ixv#-P=3$7;e;R>K{uv8rk!SgR%q zfU91O1yvK(jA|kpoCVEHa-~w8zSZel9obdKd#a097B7Lay2uCZ)ar0lT~yGji)X+` zuTGGuE}V?&LYg%gpa#0Eff{NMRBGTcHN;uaOsyf3K)6;zq<|`V4OCbI71j`Wpq*Kh zzBNTSNCA()5m6I6s41)fwWi1i$y!ZOTCXYG!66WB)D*9cT6C<18fr0VEheoc>dIQU zX)Ua{me{P-65)C+kpdopYS4RuMrJJ$WY(r{ZTi+mg|$&(ZQ-NV7EQF;MfgxchU z+7?NnHc6p2daNy?>2%h#qoW<%+Mzc)CbeTyJ6z6Ad;%e=9a+qdEM_OF>2^d-JMjtx z7RV(}8D)`Nk1Fi=lKf>$6=uP3eo7lUh{0s}2D?HSA- z$=I_Rdt$gfG2EW;YfnnHXEpYsvuaOfv=`Mhd$OXvcmwiud$HND$C&NK46{CC)Q6$^ zFjQYyy+wVDp*|w6&x-1ck6?mYpQu(}xNG&vcwE!#i#6aQm|)Zww?SzJnqxXJm;;h= z5NX0eERqi5B?wR*uqg);lY`g;D(Md769?4fKyq_HMGnG+zA0t{s#&%W;ou?YFB-6- z2I!{&al8R>yaB6fK+bPK&Tl}W(SSmufr!!?2tU1n$OUbT24V-WH5(uyN5*r+?;X*( zBV#(Eb4TF`PJ?yQ5gT&Eh8(dWM?$vcD2`~3!d`b2{vZ%s1uljo`M{9@8!})+7;K2{ z8xler5^5WYK((Q`3Z&Lh+yfbUL$S_i1Z^WMz7ZDRNK}!HkVYf%8Z=QGiFhEjM!0Ds zB5fl|Fs@s?1kf?hXiVqEB$~z;SYuStSd38{lTsTC8?7+~NMiz3V+^!0$)z!t-URw4 zOx6U^H^G;iV2n)&t4)NVHxUm&1~j$IrqDHI+@>N!G!@T)uWTxEK$6;2Sm9bz@c{JJ zn+iLlsaOHt8O`X_481mE)y+f=*^E^*L#NG%6V1dly_x6_O(t+On-Q*?L*E=JHAm#l zsSTQA<;{h?Y>wMDXCcjni`JZU-dsEenMQN*3Iv)?#rk)mqZ1vS(7zL|;e?KyFhVDB z8+6m0@O3A|xlbk>~l250dc z_!-V3*D_kusWlU|#tmD;QEM1#EnKzMFw`1mT8k{B4K!^Sw2jCVZ3rA~DAn3fsQk)zoT{j?LoW_vocXI1SfPTFJD?L`!L4RY1?6dYXB+mnjhQ(||3 zwgZEAfQb$;(SgNuAP#gu_Z`Gj;A37S`L50XxENN36G_*aph#9mNxH z62jM@iP;fGIwEElI=bNBF8H?#wT}zxaY4*3h}i`(yHL8jP>j0Z-!4eUg(B32Oz0w< z%ue*}#6mh@GoA3VPR07~L`~j_sMm>3ok+o*NWq=NEUlC1uXiH3bV5&^&~Ya!;LZ%t z8Ds5?DmpW9XVlS|qO&t9=}iC51eVT3&d$_>oe3_TsRuiYW57Z0ECN72=wNgvq<0pT z7;lkfc45#i_-7Y5>Vlzl!S}nsP!|lQ3kKIkq-tF-%r4kM7ntb+Gp_V;MSQLV8dp@} ziUeIzi7SD|RRn_q&{^X;SfINic2}{==t{q?^y^B$u7vBZ!g|R|w%S!VXh5IC?iOjYJG++d6rSB#VRx+EjgD?~bi?4>FeEpm;)Yb* zkct~|!40Xn;f8Lwp&K=T8)|YRxww&B+}Q27i4d~~WAs4RJ&Fh~t=t=o z25&$!-9wB4g`k_^A*^&>YB8V>$TE8|a4!b#g`Rt{(q62z7c1?>O1Y+T4Wxiapqkc8 zyZ{b*FA)R2fH0$%xM%ccoZg7OH!JOpd-f)*_r^v@;34R5_F<4dFw+NS`j8v?u*yE<@jlcBeMBOVY9A2+9sy5{YoLkVN5q5cV29C% zx}Xnfyf0%BDL@LS!qTF^YZ14juC0}-@|DI{;57)+`_dh919DJ_?u*QR4ABph>W3Bd zV@3T~S3lO(k9GB9UHu5k{Rqna*#GvU-sy))_9MCXV>90mE9g)E{w$|I%jwT@`cvxk zr+DjcQoV6ejq|A2!RjjpAoBt2s|T<#7$B|!7j*y;Wq^1Lyz~JC`~l(($TJ2|+qI<%lCp>zJMusQ5RZq%h zPm8*FAOj9$z=0@mAT~7+-x-Jx4kTUmx<4kY*dNZjv$-*0{d!u-7 zWaKTP!CCMQI7x3Y4io|#OZCQ@ym4Z0%-S2X_9ke1i*|-L*5r*fd1Fo9;<-7P!3U$x z!K`R7D;kVL4j;A=fi@0$b3E&ls@dqeW>4j zs9t=8^?{d`stY>cg3e4`(Vqh}egEdJZZF5YbW_Lj5*``fUhtn(M|8_G?4LGLQv67{0~zm@l!{mjQgK z5PZc`U?+X48hsJFFS_z2)%jAH`VxbEDQA4iPQGLqU-GoCh&P8a#!!51D4}ksNCl5U z4KWm94;3pwHgJ+d5&KY)3`(m*Iineh4_iZtokKC6q2jvX$3T9p#t;4ZiFv}0^3_kA zmVP2u^%D~`KjEhPu?jy{!S~>eF^oRLSimrtA4cUm43!L{QW=IyhH*49jLqgSX#Jt{ zhcSNwia*iK9}o5yMV9JMR`JJ>{HYrJak1eL4#yLQ;|0UbTmpd(nk^OM~S;eFf_rqRxrUV7@A;$d$8!O1+!@kCTj%?XK301 zTXQtDqZw~B)kA|K0&$71DUsYb@)dSg+~SSrqO(2isBaYXHL81gs* z*f`ScI8jRSC1EprHp6d@o+eviN}-f#*6;icvd`~gWmDD+XM!hz(5liXaWOG zpy->xKob~f0`571a6b{6i7+-%91#=A?-LR6M7(7p(wzuH6S0>NXhNU~f%y>B8iHCw zgq6=rJ1qpG2|>Rh9DhOpR?y*{F^Nu-u7a!Q!vCSRIb((tZ)jGO`#Z^LR1QeI2__|2*Zi};bgRM+%Fsn zh2vJ?>{i0rt$YRDSI~Wh^?!v+eT7SXCH&Q|I41v!o$FV44A;R!a7_P-a`-DY6%q7{ zAXr7fd<6A4FTOH@3NZriBg7+cQjZ{^OoebNK0B3)bSlO+712*cRZ}svsd&s(JZ2g+ z(+Dcl2rAR4P^RGx(}cG+4f~l!g)>deGNwZ_oqJHziH6fj|I>wyI-Qg0>De-~#+3cZa zQ^?Gwww?pw90r?1=AJ_eokQ(1he_v9%*~;W;-;9u>|!!tZ>D=A+m7lxy<|8uLj$^VtB* z=csc&jLnB`J}$Qax&>JL0^Df<#j0L#dLTDDk)I!Eui0BtmaxY}8 zg%mCeDYF-faTY}G<{}6eG3g?R7s1^kxLX8wi#QTn#ExST;$MWmi?e01$5_xoq}YojphXfhB9U$+6GtN9NJ_Ct77-~5ptW4h#dKJVOD$&d z#c;Y9P8Y-JVgk)#4h9y(z+wW;V$RW`ppAloC<0a#(usnJD3J&Ds8Q6jQ55@86#7e` zTOyu<9I-^~kxN9Bx`Y$!CG6jqh(h41FA-IYC6;&rv4a^+hiJqZ%^6EHE)|VXqs4Pz zFQcj1qLD~6r`FJ^(G;lB-1v*;U^iOa)}tw!m(qVJ3s?$cOEJ2oNM(moeZn23&@ym!aQfq~T@6fo0tKT1K2- zMgg*n$hRE2<*05sB43Wkmm`ta2rHoK|u|xl;IOD@7Z9 zrKn)68viB!1?(XSFg+A7gmUnMGW{f)62n$?W6T3Fd)HTqc%(Q5Rw z8ojJ$pw-+SSp(4;4)51sL~9V~8dB#Pjycv~Y-`vPtlYJ&@YbM9Y=W-M`DU2=){r3fj0n9`ONkn&vh&2&UNJO-W1e8Q}Lx}{HL?%vTVrW1WJ&}DwA_*)}I2wuE z&r9TfUZMzz`@Kay>z&+4jNFJ1ZKT&mdTk`LY~;9TBl&S7d$5fp`i)cu8`(=GF>?}f zN+QuGVF*bWLJ|QXiFBC+2T3ITB;=gLMlOjX>m)G)JON&M64sf-v2_x+vXZzJkwnHx z;?5s~&N4SK@FoV{glsk;n@z}O6SCRFz?)FsCbmPH7<3bZZeq|)h-MQ7;3i_`CQN=4 zVQ>@M>&=X_8OPs@cs4V}W{QQ)Ft(XRZbpBb37wlc58F)t%`jzcMz))gEd-zdbT+pz z$QG2j1&7{(^KZfVx6pA5irhlX-NIza&?LifGR!6;|746LnLQt7P_8$()ZT zbIzSiDBTMER#N6xktMbgfwtmvTZOdLt>n$E9E5BoFK(s&-HPvR<-W#NZar<~=xM8n zFt^cp8*z9W2Tt2a^4pNiHY{cvCCxU{+cwm;4d%9?=xv;TZHIn4^xH+M*v?J2?UX>< zDG;}l2Dg(2w^LGW=XT@{!INz}5Z4aGwF7bOV6{6i-5n6`;JA1PC&4?|UF_hF?hdNY zoeaE_3SlSJORg; z_mNNcvCG^iBEUn?pFSszRQjdTFO`0&^h*^lEMEN8RJNt5h%OZ=q!K0eL%1I%_QS+} znAi^!`;owYR==NH)B7>hG-%SGNrNVh2$DvPp2j$7Oq|BXF-`P_rj~gCx&s*M0X*vf zaxeHhn_bOuRhvUDa(hoN-( zq(h$$Z8~)6RG42w^EH!v%>-XF_}7T{Yoz-%lKUFTeU0QYpvgc28LU4831nE@(a+$H zeg@AtWQar{^$cz&XCSr=#Fl|gWKh^=aC_+>oe!etgD`TC(033UIY_y4kSgRLc5)Ck z9pvEPASv!3yV66@AAc7^1^)eVBC}X1{zGQ65H= zhY{sreEBfGd>Bz4CifnOnZu;E!=$z&^gF^zjv)LaJg9Mm2Q`kM`y(vi2zo!l0*>Hj zN1;24VIGBvqcCxl7=4r&eH6n#D#}{=Q8L3(M01oglVcEb7X!G03Uql2eB?3C+m3Nh z>zD}9j`5JiF*a<+L=EGZcnJc`$GP)! zoM4m*eJ1po!b(Mm3uGp0$P|uRCJ$C*@?ZrQL8@^A!V?glVBizbo!}(t1nN4$N>AWg zCs5T1?i8Hhd6|>Yo5~3}c^RfoE9Y8SxQZ*UwPdoQ1|Z3(;AK&O*dlpn4V}p3ei<^|SvG*_!7d zJO|x5=*}VDb4-2?w>^gx&N2BpT=yK4pW}YXIVR77K8uK#g^g!Ho5dzEi-?-VZZ(Tr zl3DEK`QFG9Z!F_H#OE3OJe&0MbU4pO?>rsO6WhRET`wO`51>E-n3GITgD(DyR z%?oVoF0jwK!2PWpI^_^Ba`1{AvRe*0J_j?*p>qzMbJ&IC;7U1cU2^d69FEFz*p1|H zT$aO@D2K6f7%PXdE;80d7IzVwxQN;=ViOnff{ToC5hgBL#P*BqE-#X~F0#Ul6z{oo z%B52-;?6}axjZtGOW~JGfu75QTDfcta(Ncw5_FeX-6aOUgjz0PKbNqdOV|(B^h?;! zC5-qIHToqHY34zn$HMYhSRM<@!*Q)V#GQw@^AL9)87vRq<)Xnw<1!sC!^mYAxy%HY zncy-LTxNpH80cl57~`6e4_!WV`7n|XT|RXA(B(sy4_!WV`5b*+f$j=)R~YXK3%eqo zTfCfAuZS4!3T5pT5vpHdqjrU-yslvNS9liYDxI#P^Q)-fDk`{&_^y&VuX5^el~V00 z2g6s9-c_V`73p1r{u+~9W0GqGrfVdoYdmmsjq$HhHechm<27pf>(E^nRv0f2KqYaV z4eoXE0{F}86zSJFeZJ0F$#tFvx=vxwHRA@IZZP-_2EV~dZ(!XwaKjrI;ti^w8$`7m zl*c!yI&TozZjg3waMQJbeg%lW0I?Tf2L;$c0ShUx2!{pKWd&^D3OL9qz<;@D-lW4# zCc4Q)H@Qc76C1dR4crv*AVj~34cx>A3ZW~+)d~s2h0qmp;8RE%E`+X-P|P)uZrpuZW8!-hkM{^L_vv?^e)lOX?h|0{izsj!#LD|@^6taX zeTv)r6t?$a>OM@}=S1p0b;W(|Ry-&^J9&U%JU}cDC@3FL)jpsYc|eB;oCH6h#`_MM z@6hpg(0m8YcNpAv*vxlCuW47(5T+hdD{x)29#X+PWTJT^e#24c+ z{T{Q@$E@-(eIC>2G3t6uE_h4{{ump1OwsuxbUzaRe}wKwwrW2TLw>}?e`Krnqp;ej zKZ+gT9`Mk9q%``G^7=>iX+N@0qqF&h0iLj`CnTLGoHjopT0Wt$c*1I)P*gm@9)5!6 zCnos`L;MN9{)znX6MOBS2=6~}UjGxD8?J$uAW#2^n*l#@NA+p3{-3gnr|9b`+oGqU zg8Edv1diHMqT*BB?J4f|Gju<5GVn7o@Mn%jeioI~pG73_(|#7t`p+DX{LIn#Gw7aS zkk9a%XOwf#xbgFhdvVXGEuRrxpAlW3;g0`=%m7 zU$Bo~u#aEJh%cad!K5!3?*)>4AzoX&1gS4XA}9cc_JWkkW3~DVa{dc$QTW(;2)&#Kd}5i$RU4_L*7951{Z!qaC!rCZ&2ME=-!~ZH+ab#BxAi{bNB`k zz9FK$rNdh~yhV?1VdyOky@jE-F!L7myd~JY<>25g2M2FCe0a+y;;m?AyydPD*MY$p z-OP84^A4AOhdSPo@!sKj@9>IujPs7F=N&43hl<~cXBIEH#(O%vXX5w7fcLoBdkpP8 zdVWtjeUF~s6XD)tXzw||dC&g-JqJPWxlvCa^8~U*_{5(Uhp%tpOMmMs_f4^9`PBb zKNsi!&!p7PY>z&3EbLRT_zMR11?&HUfqfy?f8hblFYFz^@H>|;oLv74?Z2q_UmiXAmul-@5eZ&e zy!gw1S>?YRoBhiP*S{Q3{>y6r<=E_B4DDaS@xLUde>vUa*LjK}ivYWSxlAhZ9T=l3 zvH*0}6j@7G1zh{#xq>vxLI914Q8s|?{bRj)Kqhdmn-)<>V z-UWv^eO)CbgG&aMvWhO{OOS7<(5UhO$P}tvCsjF3Ri(G4$`v3R?9#aoDnZ*H)HOBw zXfh1k1L;DOwWP)ZG)unWO^~X|L{I<>O_S3=8h8R~>6-KbtH2mTXCR$HbOzC7q|~La zs>>!CoawrJ1dc(o&eUa|X+UcrEkkAqgDhakv(k_;sv+}12hEUsG|P|=d2>iNvEhU{Tt(3IUOUcLJq){58(yXpDt1FF&N=qNG z3gm!Kpp9BuhJsySfmT}j>ZPR<{WgQ!Mj85-VUjZRFC%NnGSVBI1@USbIZxxWUPd}X z_r)j+ZCOeEUsm$t8Oe`kq*Tkwr{JtsR>tUMWr$G@qH+vaj*WIX*+`a?u^>z>Cwpt< zP)#}c8H7T24^%L1p|?eXwn)$x3EHvDbC()mFM_wz8~l%YtpCmtkwkvxY6= zEKkSsG8{YrM?`r#mB%j1%QjkhxdY77%gYQ<%P22>KqIpPeJU_n1?Vdd0?|@Rm9*bVsH@X6%kEEL{o`Ql~{EpT&5Bh zUI~#`lJ|gzR!P>-E6HUb3p9gv3@8Ad&C2wv3`3Qro2bm{D`Rw(rLU}v`YOwoYGrAo zRhCbIw_aH~8e4}0moeZoC{nBA zw$*Xl>hh#sU9K^z%V4tx{c1=TkOC@EM@52HAW+t@`NDYQl9*Syt4PbHGz@Qr47>)S5`DCbm)&Td4`-HDSCafu|OIYN5(n zk_Q}d)mliY7KT_0|Hr>{o_wC8*OE_xx4}j50gN$g)3G*O*M{rba)GFgE7q1-z)7u* z;nbG5L5fyeR?=(BXW+D9M;|*Tvtu$lmSrcS!E2DK+Q}r%4yoD^8SRLScJjGVhu_dD zb?8uspiqZsR!91&bs(+-aUB_<*O3pwV{i;&2eS^5tuB+)MelW)q%JF}OF3FsW)p&( zRIX`U10H%^$P1&U@bi-4PMkDJ;{JHuYSHtN%_J`1eR z0_$U8^@)7-G4A@&tB5WIE8<0gfHu*a2g6z|b7z z7Z9d8$OoXe=74oOkntR_?gr2|z&;vqrrtmGrQ*(^2IpMZBxw|=T)SMvGoQT+5z61G&6Ld}lCMUwU6O22dHYXJ3gzB7- zv=fqcA`v;sXTVo?vSg0#L@0EU+dx^f1p~C8a|heoGoM_NYh%#D7}UBH(E$% zvn6ybkxon0(-O(F#3owGJz#;>lJMG+f(9D16?Cm&ycGu63Y%z!WLn8=&{AuK#I06{ zrj>LD8Q>YHYqXMnU>*2mI5U7V3^}tBXY}jLDx6t`Gplx%uR*@i8k*MFKx=HEHEz|K znBN+kX)SZXXV6YsMwWsK4Pg&L;@wb<2^!8-C_R`ht z09^-G+yS}{6et}iC_Bhx5TSLTp6ozT!gnAUOfx$|-x0g$NS}__P)8zaN4CBlEsU-s zV(Lgp?MUa2bnZwR?g%q3baKI}U9f5wtlC9-t1hyU<|2c@Rj@;Mk+Y0W&~-w`oyee_ z$cCLzK_|j)CmE=ABDir~<2pE|cS5b5WFAO1JJZkVOvldXtuw3Wj0iiklFs;fXDZ&# zh_Excy$gh0pzA_e)rFYeMf$5C~0Ux-wZ;!ev)-LRZNTGf2x_Ww_o| z_BOi8T4p!sx*^VPFyD4Mw!)(ak~+yx@v81f zyu0L=Ut9qF_3qLh!ViWU#BPLLH#)d6xEq|i;fiiD8}Q=`>8!d@HMtSp-0&K%)8{n^ zGJDXs2Yq{Ba6K@%9z@U{WQiVZI(kq6^`J26A-93M;F#9KlI!#y7>YX`-C4Cee(H{& zx=SC`9bLQ2PoPM5ml;M+XnG>fo`|z2YUoK4=}8jli68eQa`q&0_LMbDu9+UtdXTU@ zNLU^);z7~jLDAts(cvNUL9*&WIc9mt8JY(=^N?P;2hq+03G||KFILeDOYKFu&`j#GP4w)|3VX9p=uJ(~o7%s(3^4jY(}zX%!7%&4bRVSH z2MP3{cHn!EW@&xc+4RA!`cOdjr9)p<*cU1E<)E#v%#?jGw7znJ)>pdfeW?Na%9lnz z==wp|56|ewsb4?oCHqN7wI90gNB-}JTKdUoqd#>0QDc9$YW)ep{mGvFiIn}xp8e$^ zt-rLE>HSHa10Wm#rvos$0T|r?EPMbVa)8wI0aPplNF1KfcrvLctMSAxJjnr`xR@tp zmnWMTPbA~X#GV+PCld0+mFW^vxsjNX)T-Z0^fFJa>O2mxaVRnibDnIZBy$TEEC z<4Yf3#OsTAeX(+1tlSqX_ocG-WlQHvy})&FMDt~5A3)EONA;bO9;mFa{ci=!e0?FkEUFyP08x z*kQ7rHVgwBhUkYO`eD)&oCfPmfBN{-#~Lb+hBX2UA3>xWL3|m(j%Wn&Wd!kM1V%Z6nt^NP z2zl2s0~sKY6$G;CK*SfwDgrT`Km-_w?gM2K2-gA$EP?1gP`&^TMj!)?r0+`V?s}_Ww zg6J4TxfMi(6C|6^Infx!0Ha`Z6rM3kR+FR9^C%`9Mc+|GzEK$HD2`M{VWgvAbQDH9 zijsR2<$N%GgOO4&QVPaPf{|1(wQ{h9Xt}5c6P1E-m0-5m!Ni1M$u9?_A6N%IgHQ&! zXN+c`(X4nh+>ge^MkD6Ytadcz*l3s?jcCU}GX|P581fkGVGKcP3_)s)wAIHTy)j5* zjBIC)h0YqwipD}bmV$FEHQQKpHv70+oV*TP)NwKeRMEysPjDJE(z$N&(#{wscYz0>5`#sW z;~8)~x*Ct3#!GuS9u;8?cy_nrvF7p8(VPJ71Qsy?+nIn$CZLiDSpNj* zC$JHjfbC4cb|%P3eFD|iMZKB+-xFlHjyMU zk$vDqb}kdyl1-GG%@76%A+?5(T0=;!A*?urs275#gmAzf!iqy!E!VUV`2u9?A=pm{ zr(l!lJBi6Bky$69o=FydJ_(Ue!hj}WJd@atPa=U#!f+NHxRYC=8CmU?>dngi#`gVdY`m$q6H#g|Xr= zHWFb}En$>wVGJCGdZy5C3L>3CM4Lk8G=<7(3YF6o`56@IQ)D-2(!o<;XHJp6U=7GM z!zIuEg)?b5lZGROaHJ596vB~0I8q2l3gJj094Uk&g>a-0jugU?LO4@cPxyQx^#RGfb*6~R>eW~xQnm`bOqgp;Z8I1Qp{c=j}uF%4&&Mx{3m z=bA=pnZ}^g@Dsi_r{Rp#p`DI1PA5iAr+Sz!kAYR{bQqd0uY*1MbWVS!%NNEBXlJ0f z83gYcGE&Z*-V^lCQdd}Hj^`{=4KM6W^&{_ zlf*hxz5;p1Ec(o1;8|G2EC!y%z_VD?EOrF5@U2-S?%B}HChW~-^4Ua<*{pmvG_yI9 z)Mu07XEXV166_oZ=P=kD!o?g2=TM5wA=1ww%Fki2IYfuK(9DHqE;MrqxN`|tb4lED z$*FV6sdLGxbJ?=YgKi$unTK@dQMS&b7@NoLVjhLcJW|~}ZUW4cmZr@k4M7AJ==0c2 z%_HB23uX5kr4us~lx+TfzGfO=;a9fX*r6F<$^T2apZ$@Gxi|M$SAiWraS}ZGw#fWn;;#^D~Tue?~EOWtU z5UMWb)&(@$V(Q_=9QH2epk^^@U5q-S7$=G?DK9DD5jY~E;5Z7EM9EK}jT*&4N)(ks z6oW)DNEAhNlzasO^(an~qBu#4BHAxuuq80H1pO`{k1oN3mY}93`1ul<16ry}Nc2lM zwqAkO#;&{j}F ztRUsAAbhT1x4(kqyaHERA#=fJVf;Ha-eeJf==u&(o>F{mq;0n))!U}vr*cdaCMtzyDeh-?+QU4?E}VJEAw zlT}#uD#XoojqAW&Uj@^vV0slt6stI*SWVy6FuNKfUyX^c=0tEcM!s4mf>3?6MZ#Q7 zA+`p>HB7LEm8`)X*HEVLi&1qA$B}CYP-}<{YcLvq$OT@3Kw}N+SVL*KmcDCYa4m+s zmKtfTTm&+~D-a;plFZkV%-2%(uEm(wa-(J~+gs$}%>w1iJJsbG-6m;v^`>e;PW1x#++!$08 zgMGwcA2CQR2C2m$wHTsijI^=z7&c5Xl$cyJH_&MVoi@;61H#>a1U4Xn4U{1pu!#*= z^9HPWgM0&mpieYo=@Uy;5ldAOOH~m|I*%ot$CA!tN$0Vo^H|b(Ea^O!bRJ7Ok0qVQ zlFm7j@5@UjaL{694EPK}^jJ=TVx^lAi#^0*53$%oEcU=ppg^t}$E0yg8pot@Od7|e zaZDP=q;X6d$E0yg8pot@Od7|eaZDP=q;b>`anulT)DUqNMMNA$L>xIgjv^wCA|j5I z97homN4}54pyCJ=aTF18xM3V_7>C|r047{O1V}aGVJIGk;$bKrhT>r;9){v!C?1C5 zVJIGk;$bKrhT>r;9)_%VIEsg(csPoOqj(sKhaq-KAPE!#8$BL|_}wKq1o(Xs48_Ax zJPgId5DdVC3y1)zW&#W)z)%7VCBRSu3?;x&0t_Xz=m~a6RAT@6F z=$=-jn#hQWjF`xXiHw-Yh>47t$cTxIn8=8UjF`xXiHw-Yh>47t$cTxIn8=8U93O0C zc^g^YMwYjcUIqcj>skD(D-A2ObMk3Be4na0rve4Mb0mw$_W+pK} z5`L6~A0^2uGKuJrL}ii0K}ZrCq$JK7lVk|k0m|x0FqQ;kNidcKW6*&ZV-w?SVw_Ek zvq@Hyo1_3qnJk(8WwJ~I)r@5J7s)cv+)C%IblytmtxUKT zMz>PxY$YmfrHa_f;rCWj+g5_XR)WD+N~NttrmZCQZS>tn-)%@^8&ciIf!a1=?l#oD zOUQen?J^YH1!?+r#JQaf z@ecazfPM$`JBZdhh*mpba0k`u4$7PzoY?Ik5$uF+Crs@u{{78PV&+bH3^=GeNqaky z#!jTMlcc>9Y3wA)@1%U)MWcH6tl4TF}u!qB`Js95} z9s}4zYT83;+JjE_pi{m#_CmXt3HCC6FOnFqw`GS?SbB>F6V!!@hLlf4aO5G&Nnif*BwkJOy@I zy7UEWKrZ+ULiBVzCmqj$4%9HeW}>f=!q*J`wOl2?#z4O&v42f8<$G|*_?l`p1G)?u zZt>zSGGr~8L7kZ)-+?h|1{R&cjnNEtp&6972O&O)9UP>rJqX=F20h3&=O8uKLHzz8 zPvsoMtqwtV2)aYq%ONCn2uU46QirHw4-tM3QScp-N%|qV0NNn)aPj%WVMKCRo)w4j z*283&!*Yyvm_ZM-UpkBt9%0ZU7}gQe(-A_)5xGn~!o){#w4-QD~0xW09k> zjXX-mIx1g*0PU!3sUMYPjiadYC~kZV+GFw=@D;}_ZulLOcIq))=a_s4_;nR$NXIxg zIu7A+`2^&O>nTR|S1I}c%nTS0T_sS&rWKt?+ zQnO{U3(X`?WKuGppw9{H=>&Uk>jXjM1QG27Iy!;KPY|U}@btw=h)%-gNq%c{63LuI zGAGghNmg@`eb`B2z$s`>G5IM}cnTGs!U#`sKjRc)KE+Z0DKgwCwnV3RGV3(7r(yCm zRp@EChAb1Tp62%#ytrzoiC(Ai(bM?oY5e~*7JHfpp-#&%^9&u&kXFy&UT278XV|o# z!A;LdUyu!w)H7^%&#>J+BOd`z{S3$ZXE@$J!x(2|sCkw#&SDp5skzURRnHRt&l0H4 z@;@(XXW5pVB@~|Jlz{)p);tICIc(w_h5b1U=o}^LIo#|V;ylMu?>UZo&rxrmLzL$@ zkIaHT3)jkm!7NsoCHXIcr6-66Z$L9rToN$UEZGgr0vW(g%d+GuEsMMAS#q3C9t1_8 ztdRvXSy+A+u9C&ZE=%T^=b7j{t2oc28|U$a^Xx~@QyZM8HaIUogWKA9Zjzkm@bo;} z<80`&q0hz}vXNT0^g&)(AXep?#x>32qMl7|&nB*4pu+_^Tp%f3pdPqD(zt-IF3^E% z+66M%1=MwcY<2--xdL2YKDLsN3iDwq-@+R6?HHM(zsX`Ur}kg*`r-2dtR3rAWG+& zaUIv@nt6l%H#mRhrL4F?Zofesyg?MaAp^A=M7SFqaoixc-{7#P0OA7FQvhuNv<1Yr z0t(IoD%t|7;sUDT0`5;2$O_OtHEu$G6Z)G3rkhCOCQMgdr zw=lq4B&}Ph?>2O|v6I`_$!%0|8#UZUs<+uj-{$G8+Zf>OKn`zj^R(3+i0{Dh9gN}* zgWkb)?%+CisP*qq=iebD-@$E)petg~A`G=ia&*V!MbwN%Sbq^#UBu)?j9G+H&ptY7 z(NDH<4XE7^saoe4`+KnR!z)`HDoJ4gp-Kmm9HivRY6%G2kz zpa!T9nuG2qHjU7QII$~`pLOZndM7Jw57K|stZ!H(|DYjLR->Xec!;(Jj|)RJpeDbG z;d*c_W~4n^8#^q;v(R-(gtX7<@q;cK9=dWUX{S3D|8L05*s%C{37#Ts#EB>42GAD& z9_H=;wO=(Z`D`>HCKX>uZNjfNnsNl=#1nfePldJM{v{p5Xjj?uTNh_e#$jxF8}5Pg z{bAZ&w7=3`r0v_5=VNGR&~{|J#_iZN@p(BdB+5}*cvWuEy3i`^c`lB|vAtFN$SA*w z;EMphaOuE=v`c6MSYc#G9?;=)ChZDZa-%Yu2``13y zq5G5e4XbVKUVKc??dzUA=*MEcdKEvc!M${=H%|nk>63jpRzv)0{a6_nUiRl+7z_;b zM6nDMJdmJS5#^(~;-9MS7{rQAM2vMrp{hGR7z*?ihnBQ`u^2C|`wlPpym|!H8gwT| z7C#Zli8|t~#yD01Z%*)L+9+;K)0PP)x3Gfkv=t!iKDvZ3mi9H@cOFwBsd==2!qB%9 zOWImf=)(l>!@1c&+b071fT2y(5qmktokc<|&-e37+D(zn$^6Rqy!o4fLlzf5;lTk^ z6cT|ErzQMMk?%8UXYsiQa^9!$|GO{4xJqOC=wmQSJ+*(6P6bw7AJKQ}4vw}YFle6GI}$Le8c!zQvnA4xlGm|F28h(-}PJ#|oDmQ53Bb*N?GE2A+SM-#9Sv-?ZPO+oLD> zwI6NBnc~Ask{y;eoa;x=VVr!nI}fw8!?H_0ufL!uADQQ`i^YGKfY_Fc{MYbi<0TA= zfx6{U#4u4hZC}1Gce(h_=y1P>HlOw>Z89rKxKjK-Z*klDDyuRT#l3)4a{ciCwe~kl zKCk<~_VfR>p@k*i-}}F|_bv4AO~<9TFa|F~_qfC_-D$`0{X$v{Svg7TL;H?4o!0F~ zo}ZzeOWTk31no~PInjAh!r)K8q1L7p!GEv_R&4vO#A|B4XA#};BuyxFU_8Wz-=sOW zB7PDupRlq$6@{{=11rKeibZvcAo{pGer+d|*K}BBFO-+iooFDG9NHqnomLI$G%fzy zNr;?a`xZvlv=z#2CK}yKC`)WGzJC0XB!jp!kiVNnJIosfXy;i&`1@hi@!Mhi0VhQI zf_4P$C4c_H5=ON&KqyDrBie~VsS87wCegyk@-XpVh4MWTcwQuw zbZ3g^2mHmg+UWCf$>+3R7zfoQyes*9|5HgjRhR$K&#qL`hSe@<|7jqVvKuVIE~#oB zI$GODDu-~pbA6>^2O~53m9(u0)Wx5Fqb<&>{N=F!+OD1@-@pC8cJIKF?|r;VT0u11 z#ftrDi~E=HE@>~&rlZTDs5;7aRX3!!<)6-gA1X}US2X#=T%Z!#%C|?twht7=FUVY z?Zr5$T%}FnEVy{$5ye#rZ4VADpYiOkE zB+Id)CQ%WOOM`$~dN4Cb8V$_4nAS!9&C^3=?ZuGfiK$7N4gvc~;5HfL&8!9fi zJ2B#lk?D9!5z`?KkqqK+nD=|0Kfd#NfA`+^zRUAI@BQ(Iznt41wMk@2jYnM+nJo7= z|Gua0)3DSBH2g1h)Z`~X{ zc|ogGi%751s!3#k)+$Hy{{(6J{#*a2=A@l(T3n$~<`XW^pWqvB)>84M`&#`Z`5PsU-Aoq`Ya9!Yw)YH<(s3O@H6lvf{ov*I}>UY0v zkhABbxN-C#0}Skc)d200!)WM(;RX@;YJ>s!a${)trBU*^Qc+y{rcs}W3?FCIGLcbn z24%QzvQdX+JT!sh^@%jhSNe`o^JSv%Y;Jfh*&tW5-lM_|3k*U$e31bdPcEUy8`3CG zNd*15uKd8LJ0kmM8kFnUj}0iiY(4e1Z8k_jMh^9N-3r5fDmR}Sw|s7JnG7f}sN14K zE^I62{G1X4kgeNofcBsFQDN>udi2o|qfUtdD~>bN(@z^<>GU~+stBnt>NA<&aGnu2 zmy8(FS_N_l?h7aFibF8}_ji+v7K8eZXl3pWxA`rTmrajFb6Q|6K$#O@ z!DLN=7Tqi2NsCDRse=V}Ms?(P`!g04ee*f)H=QgnbEC5bW>$q*fV*RNxqtba#GW1& zOqbW&g7fEuS%5Ah!U7A=_Osyb%l)nTy{z9V_puuyi=+6wX0SyM$Q^3IgfYV`zM3oSsndyxgI zS1pm7r|?4BGRpAxc|f7;^S9OCtzam_R#66jXw@Nko|kEHA84ONIc+WXm#??zlA|_R zR7bdPiv_rLeQH4@qjN1T9Eo`rH=;H9RwawVc7LZwGrq7On7aj5EtKcS3auI~@^KMU z(ex$v=j|jW4#-Qt|H5)+5A}`T&-DvSd9Ls01Kc>VjJeu&n7Il%YQa!Lj#)6-m2!)V zM*Inj_WG}r7F{yvj0L(coV9pE+WAken^|GO8!6`*nVuIdnD5+WtIEZo!mHNLs6G{X zji|m-ZP6^&e#ZmjZZcG{w=4)MO6nE1FB2n9IE7R6CDU;-(-g}%!+p?-@F7Wer_5K z**@I?E9q}LHCN6VIn$xt_j||TYPa{#&Iis8nC$>APm)8oN=T+5f1K;Ucr_^u;o$iW zIetBr9%n43p?84H5_vO-};5?^dW#V8yL09#;!<$e40tX8IrO<&eYKj^9+8qpSbqPItcMm-s zTFUiRhaCEU&QW4z&!;!yu9tEiyp8wUzL za-BKcal@fp<8Lu_JHK~eM0JM-{`M}{y?RgnDj^Koc%SRX)-h$h>Jjnjs%HZ|Slq~v zWIkjBYW~ZEZHvQSGIu^E2oJO})U|C4b+E?^LpmET%B{|MQ8oW*=Y_%9<;!ii(gA5U ytwTUmWl3d7>$alwBU!feNR~@X%T90aotkcfyz&c>Upx5)%I}F%6VyIw*8c(jfD7*c diff --git a/games/undertale/src/data.h b/games/undertale/src/data.h index 6ef50f76..3854ddbb 100644 --- a/games/undertale/src/data.h +++ b/games/undertale/src/data.h @@ -207,62 +207,67 @@ #define SPR_BIRD 193 #define SPR_TUTU 194 #define SPR_ARTIFACT 195 -#define SPR_SPEAR 196 -#define SPR_NOTE 197 -#define SPR_DROP 198 -#define SPR_ARM 199 -#define SPR_DEBRIS 200 -#define SPR_AARON_B 201 -#define SPR_AARON_HURT 202 -#define SPR_WOSHUA_B 203 -#define SPR_WOSHUA_HURT 204 -#define SPR_MOLDBYGG_B 205 -#define SPR_SHYREN_B 206 -#define SPR_SHYREN_TURNED 207 -#define SPR_INTROIMAGE 208 -#define SPR_INTROLAST 209 -#define SPR_UNDERTALETITLE 210 -#define SPR_GAMEOVERBG 211 -#define SPR_FACE_TORIELTALK 212 -#define SPR_FACE_TORIELTALKSIDE 213 -#define SPR_FACE_TORIELHAPPYTALK 214 -#define SPR_FACE_TORIELWHAT 215 -#define SPR_FACE_TORIELWHATSIDE 216 -#define SPR_FACE_TORIELMAD 217 -#define SPR_FACE_TORIELCOLD 218 -#define SPR_FACE_TORIELSURPRISED 219 -#define SPR_FACE_TORIELEMBARRASSED 220 -#define SPR_FACE_TORIELGLASSES 221 -#define SPR_FACE_TORIELREVENGETALK 222 -#define SPR_FACE_TORIELSCARED 223 -#define SPR_FACE_TORIELBLINK 224 -#define SPR_FACE_TORIELHAPPYBLINK 225 -#define SPR_FACE_TORIELBODY 226 -#define SPR_FACE_SANS 227 -#define SPR_FACE_SANSCHUCKLE 228 -#define SPR_FACE_SANSWINK 229 -#define SPR_FACE_PAPYRUS 230 -#define SPR_FACE_PAPYRUSEVIL 231 -#define SPR_FACE_PAPYRUSLAUGH 232 -#define SPR_FACE_PAPYRUSMAD 233 -#define SPR_FACE_PAPYRUSSIDE 234 -#define SPR_FLOWEYNICE 235 -#define SPR_FLOWEYNICESIDE 236 -#define SPR_FLOWEYSASSY 237 -#define SPR_FLOWEYEVIL 238 -#define SPR_FLOWEYGRIN 239 -#define SPR_FLOWEYPLAIN 240 -#define SPR_FLOWEYPISSED 241 -#define SPR_FLOWEYWINK 242 -#define SPR_FLOWEYLAUGH 243 -#define SPR_FLOWEYHURT 244 -#define SPR_FLOWEYTORIEL 245 -#define SPR_FLOWEYTORIEL2 246 -#define SPR_FLOWEYSIDESHOCK 247 +#define SPR_ECHO_OW 196 +#define SPR_UNDYNE_FALLEN 197 +#define SPR_SPEAR 198 +#define SPR_ARROW 199 +#define SPR_UNDYNE_B 200 +#define SPR_NOTE 201 +#define SPR_DROP 202 +#define SPR_ARM 203 +#define SPR_DEBRIS 204 +#define SPR_AARON_B 205 +#define SPR_AARON_HURT 206 +#define SPR_WOSHUA_B 207 +#define SPR_WOSHUA_HURT 208 +#define SPR_MOLDBYGG_B 209 +#define SPR_SHYREN_B 210 +#define SPR_SHYREN_TURNED 211 +#define SPR_INTROIMAGE 212 +#define SPR_INTROLAST 213 +#define SPR_UNDERTALETITLE 214 +#define SPR_GAMEOVERBG 215 +#define SPR_FACE_TORIELTALK 216 +#define SPR_FACE_TORIELTALKSIDE 217 +#define SPR_FACE_TORIELHAPPYTALK 218 +#define SPR_FACE_TORIELWHAT 219 +#define SPR_FACE_TORIELWHATSIDE 220 +#define SPR_FACE_TORIELMAD 221 +#define SPR_FACE_TORIELCOLD 222 +#define SPR_FACE_TORIELSURPRISED 223 +#define SPR_FACE_TORIELEMBARRASSED 224 +#define SPR_FACE_TORIELGLASSES 225 +#define SPR_FACE_TORIELREVENGETALK 226 +#define SPR_FACE_TORIELSCARED 227 +#define SPR_FACE_TORIELBLINK 228 +#define SPR_FACE_TORIELHAPPYBLINK 229 +#define SPR_FACE_TORIELBODY 230 +#define SPR_FACE_SANS 231 +#define SPR_FACE_SANSCHUCKLE 232 +#define SPR_FACE_SANSWINK 233 +#define SPR_FACE_PAPYRUS 234 +#define SPR_FACE_PAPYRUSEVIL 235 +#define SPR_FACE_PAPYRUSLAUGH 236 +#define SPR_FACE_PAPYRUSMAD 237 +#define SPR_FACE_PAPYRUSSIDE 238 +#define SPR_FLOWEYNICE 239 +#define SPR_FLOWEYNICESIDE 240 +#define SPR_FLOWEYSASSY 241 +#define SPR_FLOWEYEVIL 242 +#define SPR_FLOWEYGRIN 243 +#define SPR_FLOWEYPLAIN 244 +#define SPR_FLOWEYPISSED 245 +#define SPR_FLOWEYWINK 246 +#define SPR_FLOWEYLAUGH 247 +#define SPR_FLOWEYHURT 248 +#define SPR_FLOWEYTORIEL 249 +#define SPR_FLOWEYTORIEL2 250 +#define SPR_FLOWEYSIDESHOCK 251 #define AREA_RUINS 0 #define AREA_SNOWDIN 1 #define AREA_SNOWTOWN 2 #define AREA_WATERFALL 3 +#define AREA_HOTLAND 4 #define ROOM_AREA1 0 #define ROOM_AREA1_2 1 #define ROOM_RUINS1 2 @@ -382,10 +387,18 @@ #define ROOM_WF_TWIN 116 #define ROOM_WF_MUSHROOM 117 #define ROOM_WF_TEMMIE 118 +#define ROOM_WF_LANTERN 119 +#define ROOM_WF_DEADEND 120 +#define ROOM_WF_ECHOPATH 121 +#define ROOM_WF_CHASM 122 +#define ROOM_WF_ARENA 123 +#define ROOM_WF_NORTH 124 +#define ROOM_WF_HOTGATE 125 +#define ROOM_HT_ENTRANCE 126 #define FONT_MAIN 0 #define FONT_MENU 1 #define FONT_SMALL 2 -#define NUM_SPRITES 248 -#define NUM_ROOMS 119 +#define NUM_SPRITES 252 +#define NUM_ROOMS 127 #define NUM_FONTS 3 #endif diff --git a/games/undertale/src/events.c b/games/undertale/src/events.c index 8b583a81..169d0945 100644 --- a/games/undertale/src/events.c +++ b/games/undertale/src/events.c @@ -115,5 +115,7 @@ int event_run(Ev *c) { if (r >= 0) return r; r = wf2_event(c); if (r >= 0) return r; + r = wf3_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index 3bdfae3f..6e1f82b0 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -41,7 +41,9 @@ enum { EV_WF_ONION, EV_PIANO, EV_SHYREN, EV_STATUE, EV_UMBRELLA, EV_MK_RAIN, EV_MK_TALK, EV_WF_BRIDGE_END, /* wf2.c */ EV_DUMP_WAKE, EV_COOLER, EV_MAD_DUMMY, EV_NAPSTA_ROOM, EV_LOCKED_HOUSE, EV_SNAILS, EV_GERSON, EV_TEM_SHOP, EV_TEMMIE, - EV_WF_EAST_END, + /* wf3.c */ + EV_LANTERN, EV_DEADEND, EV_MK_CHASM, EV_ARENA, EV_UNDYNE_CATCH, EV_PAP_NEON, EV_HOT_UNDYNE, EV_HOT_COOLER, + EV_HOT_END, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index 7111f7eb..ada941ab 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -117,7 +117,13 @@ enum { F_NAPSTA_HOME, /* 1 invited home, 2 lay on the floor with them */ F_SNAIL_RACE, /* Thundersnail races run */ F_TEM_VILLAGE, /* found */ - F_WF_EAST1, /* the way past the mushroom maze reached (where the game now ends) */ + F_WF_EAST1, /* (unused: the mushroom maze's far side once ended the game) */ + F_DEADEND, /* Undyne at the dead end, Monster Kid in her way: the way north lit */ + F_MK_CHASM, /* Monster Kid on the chasm's bridge: 1 hanging, 2 helped up, 3 let fall, 4 left behind */ + F_UNDYNE, /* her fight: 1 fled (she chases), 2 killed, 3 fallen in the heat, 4 given water */ + F_WATER_CUP, /* a cup of the cooler's water: 1 carried, 2 poured */ + F_PAP_NEON, /* Papyrus's call by the neon sign */ + F_HOTLAND, /* Hotland reached (where the game now ends) */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index 506e6387..67855c4e 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -368,7 +368,7 @@ void menu_gameover_open(void) { void menu_end_open(void) { g_mode = MODE_END; t = 0; - writer_start(&w, "Past the mushrooms, the path\ngoes on into the dark...|The rest of Waterfall,\nand the underground beyond,\nare still to come...", 40, 90, FONT_MAIN); + writer_start(&w, "Out of Waterfall at last,\ninto the heat of Hotland...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/menu.h b/games/undertale/src/menu.h index c34a20f4..8e2ecbf5 100644 --- a/games/undertale/src/menu.h +++ b/games/undertale/src/menu.h @@ -6,7 +6,7 @@ void menu_title_open(void); void menu_open(void); void menu_save_open(void); void menu_gameover_open(void); -void menu_end_open(void); /* past Waterfall's mushroom maze: what comes next isn't made yet */ +void menu_end_open(void); /* at Hotland's edge: what comes next isn't made yet */ void menu_update(uint32_t keys, uint32_t pressed); void menu_draw(void); void game_new(const char *name); diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h index 5c165146..8fd40598 100644 --- a/games/undertale/src/monsters.h +++ b/games/undertale/src/monsters.h @@ -10,7 +10,7 @@ enum { MON_SNOWDRAKE = MON_RUINS_COUNT, MON_ICECAP, MON_GYFTROT, MON_DOGGO, MON_LESSERDOG, MON_DOGAMY, MON_DOGARESSA, MON_GREATERDOG, MON_JERRY, MON_CHILLDRAKE, MON_GLYDE, MON_PAPYRUS, MON_SNOW_COUNT, /* Waterfall (wfmon.c) */ - MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_MAD_DUMMY, MON_TEMMIE, MON_COUNT + MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_MAD_DUMMY, MON_TEMMIE, MON_UNDYNE, MON_COUNT }; /* formations: who is fought */ @@ -24,7 +24,7 @@ enum { FORM_GREATERDOG, FORM_PAPYRUS, FORM_SNOW_COUNT, /* Waterfall */ FORM_AARON = FORM_SNOW_COUNT, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, - FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_COUNT + FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE, FORM_COUNT }; enum { @@ -39,7 +39,7 @@ enum { /* Waterfall */ ATK_AARON_ARMS = ATK_SNOW_COUNT, ATK_AARON_SWEAT, ATK_WOSHUA_DROPS, ATK_WOSHUA_BUBBLES, ATK_MOLDBYGG_HOPS, ATK_MOLDBYGG_RAIN, ATK_SHYREN_NOTES, ATK_DUMMY_MINIONS, ATK_DUMMY_MISSILES, ATK_TEMMIE_HOPS, - ATK_COUNT + ATK_UNDYNE_ARROWS, ATK_UNDYNE_SPEARS, ATK_COUNT }; /* a formation: up to three monsters, and what the first turn says */ diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index d2a0b73a..4f6c279e 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -19,6 +19,7 @@ void room_setup(int room, int from) { town_setup(room, from); wf1_setup(room, from); wf2_setup(room, from); + wf3_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ @@ -27,6 +28,7 @@ void room_update(void) { snow1_update(); snow2_update(); wf1_update(); + wf3_update(); } /* what a room draws on its floor, under everything (world.c) */ diff --git a/games/undertale/src/waterfall.h b/games/undertale/src/waterfall.h index ce53db9b..0e769607 100644 --- a/games/undertale/src/waterfall.h +++ b/games/undertale/src/waterfall.h @@ -1,4 +1,5 @@ -/* Undertale: Waterfall (wf1.c: from Snowdin to the bridge Undyne cuts), its monsters (wfmon.c). */ +/* Undertale: Waterfall (wf1.c: from Snowdin to the bridge Undyne cuts; wf2.c: the dump to Temmie Village; wf3.c: + * on to Hotland), its monsters (wfmon.c). */ #ifndef UT_WATERFALL_H #define UT_WATERFALL_H #include "event.h" @@ -12,4 +13,10 @@ void wf_battle_done(int form); void wf2_setup(int room, int from); int wf2_event(Ev *c); /* -1: not one of its */ void wf_bird_setup(int room); /* the small bird, on its side of the gap */ +Obj *wf_mk(int x, int y, int dir); /* Monster Kid, Undyne in her armor (their feet at (x, y)) */ +Obj *wf_undyne(int x, int y); +/* wf3.c: the lantern maze to Hotland's edge */ +void wf3_setup(int room, int from); +int wf3_event(Ev *c); /* -1: not one of its */ +void wf3_update(void); #endif diff --git a/games/undertale/src/wf1.c b/games/undertale/src/wf1.c index a81c3c79..5a29bbfe 100644 --- a/games/undertale/src/wf1.c +++ b/games/undertale/src/wf1.c @@ -29,6 +29,8 @@ static Obj *obj_undyne(int x, int y) { if (o) o->flags &= (uint16_t)~OF_SOLID; return o; } +Obj *wf_mk(int x, int y, int dir) { return obj_mk(x, y, dir); } +Obj *wf_undyne(int x, int y) { return obj_undyne(x, y); } /* a thing to pick up: its item and the flag that says it's taken (and what's drawn of it, at (x, y)) */ static void pickup(int x, int y, int w, int h, int item, int fl, uint16_t spr) { if (flag(fl)) return; @@ -545,7 +547,7 @@ static int ev_wf_grass(Ev *c) { WAIT(30); NARRATE("* (...and pulls out Monster Kid.)"); WAIT(20); - NARRATE("* (She drops him, and walks away.)"); + NARRATE("* (She drops them, and walks away.)"); } u = obj_get(ACTOR_UNDYNE); WALK(u, 6560, 520, 2); diff --git a/games/undertale/src/wf2.c b/games/undertale/src/wf2.c index d47078df..23ccc1ed 100644 --- a/games/undertale/src/wf2.c +++ b/games/undertale/src/wf2.c @@ -7,7 +7,6 @@ #include "events.h" #include "game.h" #include "items.h" -#include "menu.h" #include "monsters.h" #include "save.h" #include "shop.h" @@ -113,11 +112,6 @@ void wf2_setup(int room, int from) { case ROOM_WF_TWIN: obj_sign(19860, 2290, 30, 20, "* (The water here is shallow. You wade on.)"); break; - case ROOM_WF_MUSHROOM: - if (!flag(F_WF_EAST1)) { - obj_trigger(21144, 2350, 16, 500, EV_WF_EAST_END, ACTOR_TRIGGER); - } - break; case ROOM_WF_TEMMIE: set_flag(F_TEM_VILLAGE, 1); obj_save(21325, 3120, "* (The Temmies' cheer fills you with determination.)"); @@ -253,15 +247,6 @@ static int ev_temmie(Ev *c) { EV_END; } -static int ev_east_end(Ev *c) { - EV_BEGIN; - set_flag(F_WF_EAST1, 1); - sv.room = (int16_t)g_room, sv.x = (int16_t)(pl.x - 30), sv.y = pl.y; - save_write_auto(); - menu_end_open(); - EV_END; -} - int wf2_event(Ev *c) { switch (c->id) { case EV_DUMP_WAKE: return ev_dump_wake(c); @@ -272,7 +257,6 @@ int wf2_event(Ev *c) { case EV_SNAILS: return ev_snails(c); case EV_GERSON: case EV_TEM_SHOP: return ev_shop_door(c); case EV_TEMMIE: return ev_temmie(c); - case EV_WF_EAST_END: return ev_east_end(c); } return -1; } diff --git a/games/undertale/src/wf3.c b/games/undertale/src/wf3.c new file mode 100644 index 00000000..bc291534 --- /dev/null +++ b/games/undertale/src/wf3.c @@ -0,0 +1,380 @@ +/* Waterfall, its end: the lantern maze, the dead end where Undyne finds Frisk (and Monster Kid gets in her way), + * the echo flowers' path, the chasm's bridge, Undyne on her crag and her fight, the chase by the river and the + * neon sign, and Hotland's edge, where she falls in the heat. (As the Undertale Wiki describes them; what they say + * is ours, in short.) */ +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "menu.h" +#include "monsters.h" +#include "save.h" +#include "snowdin.h" +#include "waterfall.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } + +#define ECHO(s) "* (The echo flower whispers.)|* " s +static void echo(int x, int y, const char *text) { obj_sign(x - 10, y - 14, 20, 40, text); } + +/* ---------------------------------------------------------------- Undyne, after Frisk */ +/* fled from her fight, she chases Frisk through the arena, the river and the neon sign's hall: slower than Frisk, + * but a catch is another fight */ +static bool chasing; +static int stun_t; +static void chase_update(void) { + if (!chasing || event_running()) return; + Obj *u = obj_find(ACTOR_UNDYNE); + if (!u) return; + if (stun_t) { + stun_t--; + return; + } + int dx = pl.x + 10 - u->x, dy = pl.y + 29 - u->y; + u->x = (int16_t)(u->x + clamp_i(dx, -2, 2)), u->y = (int16_t)(u->y + clamp_i(dy, -2, 2)); + if (abs_i(dx) < 14 && abs_i(dy) < 12) event_start(EV_UNDYNE_CATCH, u); +} +/* she comes in after Frisk, from the way Frisk came */ +static void chase_setup(void) { + if (flag(F_UNDYNE) != 1) return; + static const int8_t back[4][2] = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}}; + chasing = true, stun_t = 30; + wf_undyne(pl.x + 10 + back[pl.dir][0] * 70, pl.y + 29 + back[pl.dir][1] * 70); +} + +/* Monster Kid on the chasm's bridge: how it went (EV_MK_CHASM's v[0]: 0 they meet, 1 Frisk helps them up, 3 + * Undyne gets there first, 4 Frisk runs off) */ +static int mk_how; + +void wf3_update(void) { + if (g_room < ROOM_WF_LANTERN || g_room > ROOM_HT_ENTRANCE) return; + chase_update(); + if (g_room == ROOM_WF_CHASM && flag(F_MK_CHASM) == 1 && !event_running()) { + Obj *u = obj_find(ACTOR_UNDYNE); + if (pl.x < 22330) mk_how = 4, event_start(EV_MK_CHASM, NULL); + else if (u && (!u->walking || u->x - (pl.x + 10) < 24)) mk_how = 3, event_start(EV_MK_CHASM, NULL); + } +} + +/* ---------------------------------------------------------------- the rooms */ +void wf3_setup(int room, int from) { + (void)from; + chasing = false; + if (room < ROOM_WF_LANTERN || room > ROOM_HT_ENTRANCE) return; + switch (room) { + case ROOM_WF_LANTERN: + obj_sign(21176, 2414, 48, 28, "* (The lanterns light the way through the crystals.\n* Their glow is dim, but it's enough.)"); + { + static const int16_t lx[5] = {21260, 21440, 21280, 21680, 21720}, ly[5] = {2440, 2640, 2740, 2800, 2420}; + for (int i = 0; i < 5; i++) obj_sign(lx[i], ly[i], 20, 20, "* (A lantern, glowing softly.)"); + } + break; + case ROOM_WF_DEADEND: { + /* the end of the dark: an echo flower; the way north hidden in the grass until Undyne has come */ + Obj *e = obj_deco(SPR_ECHO_OW, 22420, 2686, true); + if (e) obj_set_box(e, -8, -8, 16, 8); + if (!flag(F_DEADEND)) { + Obj *f = obj_trigger(22408, 2650, 24, 40, EV_DEADEND, ACTOR_TRIGGER); + if (f) f->flags = OF_TALK; + Obj *b = obj_trigger(22160, 2556, 62, 64, EV_NONE, ACTOR_TRIGGER2); + if (b) b->flags = OF_SOLID | OF_HIDDEN; + } else { + echo(22420, 2666, ECHO("\"...\"\n* (It only gives back the quiet now.)")); + } + break; + } + case ROOM_WF_ECHOPATH: + echo(22170, 2150, ECHO("\"It's so quiet back here.\n Does anyone ever come this way?\"")); + echo(22210, 2230, ECHO("\"One day I'll see the stars.\n The real ones, up on the surface.\"")); + echo(22170, 2330, ECHO("\"Shh... did you hear that?\n Footsteps...\"")); + echo(22210, 2370, ECHO("\"If you could wish for anything...\n what would it be?\"")); + break; + case ROOM_WF_CHASM: + /* the glyph at the end of the echo flowers' path, a SAVE, Monster Kid on the bridge */ + obj_sign(22180, 1978, 38, 44, + "* (Ancient glyphs, about a prophecy.)|* (An angel will come down from the surface...)\n* (...and the underground will go empty.)"); + echo(22210, 2070, ECHO("\"Yo... where'd everybody go?\"")); + obj_save(22300, 2000, "* (The roar of the chasm fills you with determination.)"); + if (flag(F_MK_CHASM) == 1) set_flag(F_MK_CHASM, 4); /* (left in the middle of it) */ + if (!flag(F_MK_CHASM)) { + wf_mk(22560, 2058, DIR_LEFT); + obj_trigger(22396, 1990, 12, 110, EV_MK_CHASM, ACTOR_TRIGGER); + } + break; + case ROOM_WF_ARENA: + obj_save(23520, 2038, "* (Undyne's crag looms over you.)\n* (You're filled with determination.)"); + if (!flag(F_UNDYNE)) { + wf_undyne(23455, 1570); + obj_trigger(23300, 1980, 12, 100, EV_ARENA, ACTOR_TRIGGER); + } + chase_setup(); + break; + case ROOM_WF_NORTH: + chase_setup(); + break; + case ROOM_WF_HOTGATE: + obj_sign(23648, 672, 505, 100, + flag(F_UNDYNE) == 2 ? "* (A neon sign. It's switched off.)" : "* (A neon sign.\n* It says WELCOME TO HOTLAND!)"); + if (!flag(F_PAP_NEON)) obj_trigger(23700, 760, 12, 70, EV_PAP_NEON, ACTOR_TRIGGER2); + chase_setup(); + break; + case ROOM_HT_ENTRANCE: + obj_sign(130, 6140, 60, 92, "* (Sans's other sentry station.)\n* (He's here too, somehow.)"); + { + Obj *k = obj_trigger(718, 6162, 30, 46, EV_HOT_COOLER, ACTOR_ITEM); + if (k) k->flags = OF_TALK | OF_SOLID; + } + if (flag(F_UNDYNE) == 1) { + obj_trigger(0, 6100, 1460, 300, EV_HOT_UNDYNE, ACTOR_TRIGGER); /* (she's right behind) */ + } else if (flag(F_UNDYNE) == 3) { + Obj *f = obj_deco(SPR_UNDYNE_FALLEN, 534, 6213, false); + if (f) f->name = ACTOR_UNDYNE, f->event = EV_HOT_UNDYNE, f->flags |= OF_TALK, obj_set_box(f, 0, 6, 50, 20); + } + if (!flag(F_HOTLAND)) obj_trigger(1000, 6100, 16, 300, EV_HOT_END, ACTOR_TRIGGER2); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_deadend(Ev *c) { + Obj *u = obj_get(ACTOR_UNDYNE), *mk = obj_get(ACTOR_MK); + EV_BEGIN; + /* the echo flower at the end; the room lights up, and Undyne is there */ + NARRATE("* (The echo flower gives back the sound of your own footsteps.)"); + WAIT(20); + pl.dir = DIR_LEFT; + u = wf_undyne(pl.x - 170, pl.y + 29); + WALK(u, pl.x - 50, pl.y + 29, 2); + WAIT(20); + NARRATE("* (Undyne raises her spear.)"); + /* ...and Monster Kid jumps out of the grass, right between them */ + mk = wf_mk(21960, pl.y + 31, DIR_RIGHT); + WALK(mk, pl.x - 22, pl.y + 31, 6); + mk->dir = DIR_LEFT; + NARRATE("* Yo!! Undyne!! You're here!|* Are you gonna fight somebody?!\n* Can I watch? Please please please?!"); + WAIT(15); + NARRATE("* (Undyne grabs Monster Kid by the arm...)"); + u = obj_get(ACTOR_UNDYNE), mk = obj_get(ACTOR_MK); + WALK_TO(mk, 21840, mk->y, 2); + WALK(u, 21810, u->y, 2); + NARRATE("* (...and drags them away.)"); + gone(obj_get(ACTOR_UNDYNE)), gone(obj_get(ACTOR_MK)); + set_flag(F_DEADEND, 1); + gone(obj_get(ACTOR_TRIGGER2)); + if (c->self) gone(c->self); + WAIT(20); + NARRATE("* (In the grass, a hidden path lights up.)"); + EV_END; +} + +static int ev_mk_chasm(Ev *c) { + Obj *u = obj_get(ACTOR_UNDYNE), *mk = obj_get(ACTOR_MK); + EV_BEGIN; + c->v[0] = c->self && c->self->name == ACTOR_MK ? 1 : mk_how; + mk_how = 0; + if (c->v[0] == 0) { + /* they meet on the bridge: Monster Kid has learned what Frisk is */ + if (c->self) gone(c->self); + WALK(mk, pl.x + 56, mk->y, 3); + NARRATE("* Yo... I gotta ask you something.|* Undyne told me to stay away from you.\n* She says you're a human.|* ...|* So that means... I gotta be your enemy now, right?|* Okay! Here goes! You're a... you're a big...|* ...ugh. I can't think of anything mean.|* Forget it! See ya!"); + mk = obj_get(ACTOR_MK); + mk->dir = DIR_RIGHT; + WALK(mk, 22639, mk->y, 4); + /* ...and trips over the edge */ + g_shake = 4; + mk->y = 2084; + obj_set_box(mk, -10, -30, 20, 30); + mk->event = EV_MK_CHASM, mk->flags = OF_TALK; + NARRATE("* (Monster Kid trips over the edge of the bridge!)|* Y-yo... a little help...?"); + u = wf_undyne(22900, 2058); + WALK_TO(u, 22672, 2058, 1); + set_flag(F_MK_CHASM, 1); + NARRATE("* (Undyne is coming across the bridge.)"); + return 1; + } + if (c->v[0] == 1) { + /* Frisk pulls them up: Monster Kid stands up to Undyne, and she backs off */ + u->walking = 0; + NARRATE("* (You pull Monster Kid back up.)"); + mk->x = (int16_t)(pl.x + 40), mk->y = 2058, mk->dir = DIR_RIGHT, obj_set_box(mk, -6, -8, 12, 8); + WAIT(10); + NARRATE("* Undyne...|* If you wanna hurt them...\n* you'll have to get through me first!"); + WAIT(20); + NARRATE("* (Undyne hesitates... then turns away.)"); + u = obj_get(ACTOR_UNDYNE); + WALK(u, 22920, u->y, 3); + gone(u); + mk = obj_get(ACTOR_MK); + mk->dir = DIR_LEFT; + NARRATE("* Yo... thanks for saving me.|* We're still friends, right? Cool.|* I'd better get home before my parents worry. Later!"); + mk = obj_get(ACTOR_MK); + WALK(mk, 22920, mk->y, 4); + gone(mk); + set_flag(F_MK_CHASM, 2); + return 1; + } + if (c->v[0] == 3) { + /* Undyne gets there first: Monster Kid falls, and she dives after them */ + NARRATE("* (Monster Kid can't hold on any more...)"); + gone(mk); + WALK(u, 22650, u->y, 4); + NARRATE("* (Undyne dives off the bridge after them!)"); + gone(obj_get(ACTOR_UNDYNE)); + WAIT(45); + g_shake = 6; + u = wf_undyne(22650, 2058); + wf_mk(22676, 2058, DIR_LEFT); + WAIT(15); + NARRATE("* (Undyne climbs back up, Monster Kid with her.)\n* (She's badly hurt.)"); + NARRATE("* Undyne... you were right about them.|* They just stood there and watched me fall."); + u = obj_get(ACTOR_UNDYNE), mk = obj_get(ACTOR_MK); + WALK_TO(mk, 22940, mk->y, 2); + WALK(u, 22920, u->y, 2); + gone(obj_get(ACTOR_UNDYNE)), gone(obj_get(ACTOR_MK)); + set_flag(F_MK_CHASM, 3); + return 1; + } + /* Frisk ran off: behind, Undyne helps Monster Kid up */ + gone(mk), gone(u); + NARRATE("* (Behind you, Undyne pulls Monster Kid back up.)"); + set_flag(F_MK_CHASM, 4); + EV_END; +} + +/* after a fight: killed, she's gone; fled, she comes after Frisk */ +static int undyne_after(void) { + Obj *u = obj_find(ACTOR_UNDYNE); + if (bt.mon[0].killed) { + set_flag(F_UNDYNE, 2); + chasing = false; + if (u) gone(u); + return 2; + } + set_flag(F_UNDYNE, 1); + chasing = true, stun_t = 50; + /* (she gets up behind Frisk, a little back the way Frisk came) */ + if (!u) u = wf_undyne(0, 0); + u->x = (int16_t)(pl.x - 60), u->y = (int16_t)(pl.y + 29); + return 1; +} + +static int ev_arena(Ev *c) { + EV_BEGIN; + if (c->self) gone(c->self); + /* Undyne, on top of her crag */ + WAIT_UNTIL(cam_pan(23290, 1440, 4)); + WAIT(15); + NARRATE("* (Undyne stands on top of the crag.)"); + NARRATE("* You. Human.|* King Asgore has six human SOULs already.|* With one more, he can break the barrier\n and set every monster free.|* So yours is coming with me.|* I've chased you all through Waterfall.\n* No more running.|* Get ready, human! Here I come!"); + NARRATE("* (Undyne leaps down from the crag!)"); + gone(obj_get(ACTOR_UNDYNE)); + WAIT_UNTIL(cam_pan(23250, 1840, 8)); + cam_free(); + g_shake = 8; + wf_undyne(pl.x + 50, pl.y + 29); + WAIT(15); + BATTLE(FORM_UNDYNE); + if (undyne_after() == 2) { + NARRATE("* Heh... so that's how it ends...|* Alphys... the rest... is on you..."); + NARRATE("* (Undyne melts away.)"); + } else { + stun_t = 50; + NARRATE("* (Undyne isn't letting you get away that easily!)"); + } + EV_END; +} + +static int ev_undyne_catch(Ev *c) { + EV_BEGIN; + NARRATE("* (Undyne catches up with you!)"); + BATTLE(FORM_UNDYNE); + if (undyne_after() == 2) NARRATE("* Heh... so that's how it ends...|* Alphys... the rest... is on you...|* (Undyne melts away.)"); + EV_END; +} + +static int ev_pap_neon(Ev *c) { + EV_BEGIN; + if (c->self) gone(c->self); + set_flag(F_PAP_NEON, 1); + SAY(FACE_PAPYRUS, "* Ring...|`0* HUMAN! PAPYRUS HERE!|* I'VE BEEN THINKING ABOUT FRIENDSHIP.|`2* AND I THINK YOU AND UNDYNE\n WOULD BE THE BEST OF FRIENDS!!!|* WE SHOULD ALL GET TOGETHER SOMETIME!|`0* WELL! BYE!"); + if (chasing) NARRATE("* (Undyne waited politely for you to hang up.)"); + EV_END; +} + +/* Hotland's heat: Undyne, after Frisk in her armor, falls on the bridge; the cooler's water gets her up */ +static int ev_hot_undyne(Ev *c) { + Obj *u = obj_get(ACTOR_UNDYNE); + EV_BEGIN; + if (flag(F_UNDYNE) == 1) { + if (c->self) gone(c->self); + PL_WALK(640, 6206, 3); + pl.dir = DIR_LEFT; + u = wf_undyne(4, 6236); + WALK(u, 300, 6236, 2); + WALK(u, 556, 6236, 1); + g_shake = 6; + gone(u); + u = obj_deco(SPR_UNDYNE_FALLEN, 534, 6213, false); + if (u) u->name = ACTOR_UNDYNE, u->event = EV_HOT_UNDYNE, u->flags |= OF_TALK, obj_set_box(u, 0, 6, 50, 20); + set_flag(F_UNDYNE, 3); + NARRATE("* (Undyne collapses on the bridge.)\n* (In all that armor, the heat is too much for her.)"); + return 1; + } + if (flag(F_WATER_CUP) != 1) { + NARRATE("* (Undyne lies there, dried out by the heat.)"); + return 1; + } + NARRATE("* (Pour the water on her?)@Pour@Don't"); + if (CHOICE() == 1) return 1; + set_flag(F_WATER_CUP, 2); + NARRATE("* (You pour the water on Undyne.)"); + WAIT(30); + gone(u); + u = wf_undyne(558, 6238); + WAIT(20); + NARRATE("* (Undyne gets up... and stares at you for a long time.)"); + u = obj_get(ACTOR_UNDYNE); + WALK(u, -20, u->y, 2); + gone(u); + set_flag(F_UNDYNE, 4); + EV_END; +} + +static int ev_hot_cooler(Ev *c) { + EV_BEGIN; + if (flag(F_UNDYNE) == 3 && !flag(F_WATER_CUP)) { + NARRATE("* (A water cooler.)\n* (Take a cup of water?)@Yes@No"); + if (CHOICE() == 0) { + set_flag(F_WATER_CUP, 1); + NARRATE("* (You fill a cup with cold water.)"); + } + } else { + NARRATE("* (A water cooler. The water's nice and cold.)"); + } + EV_END; +} + +static int ev_hot_end(Ev *c) { + EV_BEGIN; + set_flag(F_HOTLAND, 1); + sv.room = (int16_t)g_room, sv.x = (int16_t)(pl.x - 30), sv.y = pl.y; + save_write_auto(); + menu_end_open(); + EV_END; +} + +int wf3_event(Ev *c) { + switch (c->id) { + case EV_DEADEND: return ev_deadend(c); + case EV_MK_CHASM: return ev_mk_chasm(c); + case EV_ARENA: return ev_arena(c); + case EV_UNDYNE_CATCH: return ev_undyne_catch(c); + case EV_PAP_NEON: return ev_pap_neon(c); + case EV_HOT_UNDYNE: return ev_hot_undyne(c); + case EV_HOT_COOLER: return ev_hot_cooler(c); + case EV_HOT_END: return ev_hot_end(c); + } + return -1; +} diff --git a/games/undertale/src/wfmon.c b/games/undertale/src/wfmon.c index 541eb51d..ec500afd 100644 --- a/games/undertale/src/wfmon.c +++ b/games/undertale/src/wfmon.c @@ -173,6 +173,30 @@ static const char *talk_temmie(Battle *b, Monster *m) { } static int attack_temmie(Battle *b, Monster *m) { (void)b, (void)m; return ATK_TEMMIE_HOPS; } +/* ---------------------------------------------------------------- Undyne: no sparing her; she turns the SOUL green + * (block her spears with its shield), then red again (her spears from the ground). Running is the friendly way */ +static void act_undyne(Battle *b, Monster *m, int act, char *t, int cap) { + (void)m; + if (act == 0) snprintf(t, (size_t)cap, "* You tell Undyne you don't want to fight.\n* She isn't listening."); + else { + b->state[0]++; + snprintf(t, (size_t)cap, "* You tell Undyne her spears are too slow.\n* Her spears get faster!"); + } +} +static const char *talk_undyne(Battle *b, Monster *m) { + (void)m; + static const char *const lines[] = {"Ha! You\ncan't run\nnow!", "Use the\nshield!\nBlock!", "Is that\nall you've\ngot?", + "For every\nmonster's\nfuture!", "You're\ntougher\nthan you\nlook!", "NGAAH!"}; + return lines[(b->turn - 1) % 6]; +} +static const char *flavor_undyne(Battle *b, Monster *m) { + (void)m; + static const char *const lines[] = {"* Undyne points her spear at you.", "* Undyne's eye is fixed on you.", + "* Undyne flips her spear around.", "* Smells like sushi."}; + return lines[b->turn % 4]; +} +static int attack_undyne(Battle *b, Monster *m) { (void)m; return b->turn % 2 ? ATK_UNDYNE_ARROWS : ATK_UNDYNE_SPEARS; } + static const MonDef wf_defs[MON_COUNT - MON_SNOW_COUNT] = { [MON_AARON - MON_SNOW_COUNT] = { .name = "Aaron", .spare_gold = 30, .hp = 98, .at = 7, .df = 2, .exp = 52, .gold = 30, .spr_idle = SPR_AARON_B, @@ -210,6 +234,11 @@ static const MonDef wf_defs[MON_COUNT - MON_SNOW_COUNT] = { .acts = {"Flex", "Talk", "Feed Flakes"}, .nacts = 3, .neutral = {"* Temmie is vibrating.", "* Temmie is trying to pet you.", "* Smells like Temmie Flakes."}, .act = act_temmie, .talk = talk_temmie, .attack = attack_temmie}, + [MON_UNDYNE - MON_SNOW_COUNT] = { + .name = "Undyne", .hp = 1500, .at = 6, .df = 20, .exp = 500, .gold = 0, .spr_idle = SPR_UNDYNE_B, + .spr_hurt = SPR_UNDYNE_B, .idle_speed = 5, .check = "Head of the Royal Guard. She does not back down.", + .acts = {"Plead", "Challenge"}, .nacts = 2, .act = act_undyne, .talk = talk_undyne, .attack = attack_undyne, + .flavor = flavor_undyne}, }; const MonDef *wf_mon_def(int id) { return &wf_defs[id - MON_SNOW_COUNT]; } @@ -232,6 +261,7 @@ static const Form wf_forms[FORM_COUNT - FORM_SNOW_COUNT] = { [FORM_MAD_DUMMY - FORM_SNOW_COUNT] = {{MON_MAD_DUMMY}, 1, "* Mad Dummy blocks the way!"}, [FORM_TEMMIE - FORM_SNOW_COUNT] = {{MON_TEMMIE}, 1, "* A Temmie bounces up!"}, [FORM_TEMMIE_MOLDBYGG - FORM_SNOW_COUNT] = {{MON_TEMMIE, MON_MOLDBYGG}, 2, "* Temmie and Moldbygg come along."}, + [FORM_UNDYNE - FORM_SNOW_COUNT] = {{MON_UNDYNE}, 1, "* Undyne attacks!"}, }; const Form *wf_form(int form) { return &wf_forms[form - FORM_SNOW_COUNT]; } @@ -399,10 +429,45 @@ static void atk_temmie_hops(int t) { } } +/* Undyne: spears fly at the green SOUL from all four sides, faster as she goes on (and as she's challenged) */ +static void atk_undyne_arrows(int t) { + int speed = P(2) + P(min_i(bt.turn, 10)) / 6 + P(bt.state[0]) / 3; + int every = max_i(10, 22 - bt.turn); + if (t < 140 && t % every == 0) { + static const int16_t ang[4] = {64, 192, 0, 128}; /* from above, below, the left, the right: pointing in */ + static const int8_t fx[4] = {0, 0, -1, 1}, fy[4] = {-1, 1, 0, 0}; + int side = rnd_n(4); + Bullet *b = shot(SPR_ARROW, board_cx() + fx[side] * 60, board_cy() + fy[side] * 60, -fx[side] * speed, -fy[side] * speed); + if (b) b->r = 3, b->angle = ang[side], b->flags |= BF_SHIELD | BF_NOCLIP; + } +} +/* and at the red SOUL: a glint on the ground, then a spear shoots up there */ +static void atk_undyne_spears(int t) { + if (t < 130 && t % 14 == 0) { + int x = clamp_i(soul_x() - 20 + rnd_n(41), bx0() + 6, bx1() - 6); + Bullet *b = shot(SPR_SPEAR, x, by1() - 4, 0, 0); + if (b) b->kind = BK_SCRIPT, b->flags |= BF_HARMLESS, b->alpha = 90, b->a = 0, b->r = 3; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_SPEAR) continue; + if (++b->a == 16) b->flags &= (uint8_t)~BF_HARMLESS, b->alpha = 255, b->vy = -P(5); + b->y += b->vy; + if (b->y < P(by0() - 30)) b->kind = BK_NONE; + } +} + void wf_attack_run(Battle *b, int atk, int t) { (void)b; if (t < 0) { - board_set(atk == ATK_SHYREN_NOTES ? 160 : 130, 110); + if (atk == ATK_UNDYNE_ARROWS) { + board_set(80, 80); + soul_set_mode(SOUL_GREEN); + bt.shield = 1; + } else { + board_set(atk == ATK_SHYREN_NOTES ? 160 : 130, 110); + soul_set_mode(SOUL_RED); + } return; } switch (atk) { @@ -416,5 +481,7 @@ void wf_attack_run(Battle *b, int atk, int t) { case ATK_DUMMY_MINIONS: atk_dummy_minions(t); break; case ATK_DUMMY_MISSILES: atk_dummy_missiles(t); break; case ATK_TEMMIE_HOPS: atk_temmie_hops(t); break; + case ATK_UNDYNE_ARROWS: atk_undyne_arrows(t); break; + case ATK_UNDYNE_SPEARS: atk_undyne_spears(t); break; } } diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index cdd306cd..4a504611 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -32,7 +32,7 @@ re.finditer(r"#define ROOM_(\w+) (\d+)", open(os.path.join(HERE, "..", "src", "data.h")).read())} FORM_SNOWDRAKE, FORM_PAPYRUS = 19, 31 (FORM_AARON, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, - FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG) = range(32, 42) + FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE) = range(32, 43) ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD = range(17, 23) @@ -103,8 +103,9 @@ def check(cond, msg): # Waterfall's battles: fled from, fought, and each spared its own way (Aaron out-flexed, Woshua's green caught after # asking to be cleaned, Moldbygg hugged then let go, Shyren hummed along with, Temmie talked to); Mad Dummy can't be -# fled or hurt: its fight lasts until Napstablook comes -for form in list(range(FORM_AARON, FORM_SHYREN + 1)) + [FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG]: +# fled or hurt: its fight lasts until Napstablook comes. Undyne can't be spared: fled from (her arrows blocked with +# the green SOUL's shield) +for form in list(range(FORM_AARON, FORM_SHYREN + 1)) + [FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE]: s = run(["--god", "--battle", str(form), "--path", "flee"], 1500, what=f"battle {form}, fleeing") check(s and s["mode"] == MODE_WORLD, f"battle {form}: fleeing did not end it: {s}") for form in (FORM_AARON, FORM_WOSHUA, FORM_MOLDBYGG, FORM_SHYREN, FORM_TEMMIE): @@ -173,17 +174,20 @@ def check(cond, msg): # Waterfall, the friendly way: Monster Kid, Grillby's with Sans, the tutu, Papyrus's report, the bridge seeds (and # the secret one to the quiche), the wishing room, Undyne's spears, the telescope, the punch card, the marsh (the # ballet shoes), Onionsan, the piano and the artifact, Shyren, the umbrellas, Monster Kid in the rain, the bridge cut, -# the garbage dump, Mad Dummy, Napstablook's house, the snail farm, Gerson, the mushroom maze and Temmie Village +# the garbage dump, Mad Dummy, Napstablook's house, the snail farm, Gerson, the mushroom maze and Temmie Village, the +# dead end, Monster Kid helped up on the chasm's bridge, Undyne's fight (fled), her chase, Papyrus's call, and Hotland, +# where she falls in the heat and gets the cooler's water if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["WF1"]), "--at", "30,1480", "--path-file", os.path.join(HERE, "waterfall.path")], 60000, what="Waterfall") - check(s and s["mode"] == MODE_END and s["room"] == ROOMS["WF_MUSHROOM"], f"Waterfall did not end past the maze: {s}") + check(s and s["mode"] == MODE_END and s["room"] == ROOMS["HT_ENTRANCE"], f"Waterfall did not end in Hotland: {s}") if s: for name, v in (("WF_MK", 1), ("GRILLBYS", 1), ("WF_TUTU", 1), ("WF_UNDYNE1", 1), ("SEEDS1", 1), ("SEEDS2", 1), ("SEEDS3", 1), ("WF_QUICHE", 1), ("CHASE1", 1), ("WF_TELESCOPE", 1), ("WF_PUNCH", 1), ("WF_BALLET", 1), ("WF_ONION", 2), ("PIANO", 1), ("WF_ARTIFACT", 1), ("SHYREN", 1), ("UMBRELLA", 3), ("MK_RAIN", 2), ("WF_BRIDGE", 1), ("WF_DUMP", 1), ("WF_COOLER", 2), - ("MAD_DUMMY", 1), ("NAPSTA_HOME", 2), ("TEM_VILLAGE", 1), ("WF_EAST1", 1)): + ("MAD_DUMMY", 1), ("NAPSTA_HOME", 2), ("TEM_VILLAGE", 1), ("DEADEND", 1), ("MK_CHASM", 2), + ("UNDYNE", 4), ("WATER_CUP", 2), ("PAP_NEON", 1), ("HOTLAND", 1)): check(flag(s, name) == v, f"Waterfall: F_{name} is {flag(s, name)}, not {v}") check(s["kills"] == 0, f"Waterfall: {s['kills']} killed on the friendly way") for item in (ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD): diff --git a/games/undertale/tests/waterfall.path b/games/undertale/tests/waterfall.path index c3a9cef0..69d69bd2 100644 --- a/games/undertale/tests/waterfall.path +++ b/games/undertale/tests/waterfall.path @@ -1,4 +1,4 @@ -# Waterfall's west half from Snowdin's fog (play it with --room 85 --at 30,1480 --name Frisk --noenc --god), the +# Waterfall from Snowdin's fog to Hotland's edge (play it with --room 85 --at 30,1480 --name Frisk --noenc --god), the # friendly way, as in snowdin.path. Monster Kid, Sans's booth (Grillby's), the echo flowers go:600,1480 talk @@ -282,7 +282,7 @@ w5 z w30 # the twin waterfalls, the mushroom maze, Temmie Village down its hidden path (a Temmie, the Tem Shop), and out at -# the maze's far side, where the game now ends +# the maze's far side go:20540,2310 go:20700,2330 go:21070,2860 @@ -305,4 +305,54 @@ z w20 go:21070,2950 go:21070,2840 -go:21150,2380 +go:21130,2380 +# the lantern maze, the dead end (its echo flower: Undyne, then Monster Kid in her way), the echo flowers' path north +21175,2380 +go:21780,2665 +21830,2665 +go:22390,2660 +r +z +talk +w30 +go:22190,2580 +22190,2530 +go:22190,2110 +22190,2030 +# the chasm: Monster Kid on the bridge, then hanging off it, helped up; Undyne on her crag, her fight (fled), her +# chase by the river and the neon sign (Papyrus calls); Hotland: she falls in the heat, the cooler's water for her, +# and on, where the game now ends +go:22390,2030 +talk +go:22626,2022 +d +z +talk +go:23300,2030 +talk +flee +talk +go:23449,1960 +23449,1930 +w20 +go:23449,920 +23449,890 +w20 +go:23690,780 +talk +go:24200,780 +24215,780 +talk +w20 +go:722,6188 +u +z +pick:0 +talk +go:590,6206 +l +z +pick:0 +talk +w20 +go:1010,6220 diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index e2ed0862..2dde8162 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -127,6 +127,11 @@ ("erase", 18918, 2686, 22, 44, "ring"), ("erase", 18523, 2341, 16, 20, "ring", []), ("erase", 18578, 2058, 26, 48, "ring"), ("erase", 18811, 2113, 24, 42, "ring"), ("erase", 18976, 2100, 38, 52, "ring"), ("erase", 19108, 2330, 42, 54, "ring"), ("copy", 19276, 2090, 26, 52, 19316, 2090), ("erase", 18969, 1810, 26, 40, "ring"), + # by the chasm: Undyne on the bridge, Monster Kid hanging off it, the old monster beyond; Undyne on her crag + ("erase", 22494, 2006, 24, 52, "ring", []), ("erase", 22628, 2050, 24, 34, "ring"), ("erase", 23054, 2000, 32, 36, "ring"), + ("erase", 23436, 1510, 38, 62, "ring", []), + # the lantern maze, as the map draws it, has no way through for Frisk: two tufts of one wall left out + ("erase", 21618, 2654, 26, 44, [(0, 0, 0)]), # the bird (it waits across the gap), the tutu and the artifact (objects, gone once taken) ("erase", 8466, 578, 15, 19, [(27, 33, 90), (27, 21, 72), (23, 13, 43)]), ("erase", 1240, 1240, 22, 10, [(23, 13, 43), (27, 21, 72), (27, 33, 90)]), @@ -135,6 +140,15 @@ ("erase", 2380, 1500, 80, 20, "ring"), ("erase", 2850, 1240, 30, 80, "ring"), ("erase", 3040, 1540, 80, 20, "ring"), ])) +# Hotland: its orange rock floors (its black is nothing) +HT_FLOOR = [(181, 85, 21), (169, 124, 41), (178, 83, 19), (91, 65, 0)] +AREAS.append(dict(name="hotland", map="Hotland_map.png", floor=HT_FLOOR, margin=0, close=True, patches=[ + # Undyne, fallen on the bridge in the heat (an object here, there only if she chased Frisk): the planks repeat + # every 40 pixels + ("copy", 454, 6219, 50, 21, 534, 6219), + ("erase", 536, 6208, 42, 11, [(19, 35, 45), (18, 34, 44), (19, 35, 44), (23, 37, 53), (20, 37, 47), (20, 36, 46)]), +])) + ROOMS = [ # the landing: the bed of golden flowers, a hallway, the Delta Rune arch dict(name="area1", area="ruins", rect=(0, 5900, 680, 260), title="Ruins", margin=0, @@ -432,12 +446,40 @@ # (the way in, into the maze; out at its top right; the hidden way down to the village) dict(name="wf_temmie", area="waterfall", rect=(21040, 2880, 380, 280), title="Temmie Village", floor_colors=WF_WATER, fix=[("walk", 21056, 2880, 44, 24)]), + # the crystal maze of lanterns, the dark dead end where Undyne finds Frisk, the echo flowers' path north, the chasm's + # bridge (Monster Kid), Undyne's crag, the way north and the gate to Hotland + dict(name="wf_lantern", area="waterfall", rect=(21160, 2340, 640, 560), title="Waterfall", floor_colors=[(0, 0, 0)], + margin=3), + # (the dead end's hidden way north, through the grass, walked once Undyne has gone; the echo flowers' path goes + # on up into the chasm's room, the rooms meeting) + dict(name="wf_deadend", area="waterfall", rect=(21800, 2560, 640, 200), title="Waterfall", + floor_colors=[(0, 0, 0)] + WF_WATER + WF_DUMP, floor_rects=[(21800, 2616, 640, 90), (22160, 2556, 62, 64)], + fix=[("walk", 22164, 2560, 54, 60)]), + dict(name="wf_echopath", area="waterfall", rect=(21940, 2080, 420, 480), title="Waterfall", + floor_colors=[(0, 0, 0)] + WF_WATER + WF_DUMP, floor_rects=[(22160, 2080, 62, 480)]), + dict(name="wf_chasm", area="waterfall", rect=(22160, 1940, 1090, 160), title="Waterfall", + floor_colors=WF_WATER + WF_DUMP + [(23, 13, 43)], + fix=[("walk", 22416, 2040, 238, 20), ("walk", 23096, 2040, 70, 20)]), + dict(name="wf_arena", area="waterfall", rect=(23250, 1440, 370, 640), title="Waterfall", + floor_colors=WF_WATER + WF_DUMP + [(23, 13, 43)], floor_rects=[(23250, 1980, 370, 100), (23418, 1940, 80, 40)], + doors=[((23418, 1940, 80, 8), "wf_north", (23449, 1340), "up")]), + # the river under the crag, the neon sign's hall + dict(name="wf_north", area="waterfall", rect=(23280, 880, 360, 560), title="Waterfall", floor_colors=WF_WATER, + doors=[((23420, 1372, 78, 8), "wf_arena", (23449, 1950), "down"), + ((23420, 897, 78, 8), "wf_hotgate", (23512, 776), "right")]), + dict(name="wf_hotgate", area="waterfall", rect=(23480, 640, 740, 200), title="Waterfall", floor_colors=WF_WATER, + doors=[((23498, 775, 8, 47), "wf_north", (23449, 910), "down"), + ((24210, 775, 10, 47), "ht_entrance", (24, 6206), "right")]), + # Hotland's first room: Sans's station, the bridge over the lava, the water cooler + dict(name="ht_entrance", area="hotland", rect=(0, 6080, 1460, 320), title="Hotland", + doors=[((0, 6215, 6, 45), "wf_hotgate", (24180, 776), "left")]), ] # rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side # by side with a gap, a door each way along the rows y .. y + h LINKS = [ ("h", "wf_hist", "wf_chase1", 540, 60), + ("h", "wf_mushroom", "wf_lantern", 2372, 26), ("h", "wf_lantern", "wf_deadend", 2682, 16), ("v", "wf_wish", "wf_hist", 3112, 36, 818), ("h", "snowdin1", "snowdin2", 404, 52), ("h", "snowdin2", "snowdin3", 404, 52), diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index e241d4a1..e3bea48c 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -114,6 +114,14 @@ def gen_spear(): return [im] +def gen_arrow(): + # Undyne's spear in battle, pointing right (turned as it flies) + im = _img(18, 7) + d = ImageDraw.Draw(im) + d.polygon([(17, 3), (11, 0), (11, 2), (0, 2), (0, 4), (11, 4), (11, 6)], fill=(255, 255, 255, 255)) + return [im] + + def gen_note(): im = _img(9, 11) d = ImageDraw.Draw(im) @@ -153,7 +161,7 @@ def gen_debris(): GEN = {"otile": gen_otile, "snowball": gen_snowball, "bone": gen_bone, "orb": gen_orb, "snowflake": gen_snowflake, "iceshard": gen_iceshard, "present": gen_present, "knife": gen_knife, "dogpaw": gen_dogpaw, "heartbullet": gen_heartbullet, "spear": gen_spear, "note": gen_note, "drop": gen_drop, "arm": gen_arm, - "debris": gen_debris} + "debris": gen_debris, "arrow": gen_arrow} SNOW_CLEAR = [(133, 163, 216), (114, 129, 177), (139, 163, 186), (180, 192, 201), (195, 207, 216)] PAP_GIF = "move:Papyrus_screenshot_back_and_forth.gif:0,280,640,450:" @@ -171,7 +179,7 @@ def gen_debris(): ("savepoint", "demo:spr_savepoint", {"origin": (0, 0), "keep": True}), ("flowey", "demo:spr_flowey", {"origin": (0, 0), "keep": True}), # the SOUL, 8 x 8 as the game's 16 x 16 halved; frame 1: blue - ("heart", "demo2:spr_heart", {"center": True, "keep": True, "tints": [(0, 60, 255)]}), # red, blue + ("heart", "demo2:spr_heart", {"center": True, "keep": True, "tints": [(0, 60, 255), (0, 192, 0)]}), # red, blue, green ] + [ # the battle: its buttons (orange, then yellow when chosen), the FIGHT target and its bar, the slash, the HP label (n, "demo2:spr_" + n, {"keep": True}) for n in [ @@ -313,7 +321,14 @@ def gen_debris(): ("tutu", "map:Waterfall_map.png:1240,1240,22,10", {"keep": True, "clear": [(23, 13, 43), (27, 21, 72), (27, 33, 90)]}), ("artifact", "map:Waterfall_map.png:10156,150,12,11", {"keep": True, "clear": [(27, 21, 72), (27, 33, 90), (54, 47, 121), (99, 102, 135)]}), + ("echo_ow", "wiki:Echo_Flower_overworld.png", {"feet": True}), + # Undyne fallen in Hotland's heat, on its bridge (cut from the map, the bridge and the rock behind see-through) + ("undyne_fallen", "map:Hotland_map.png:534,6213,50,27", + {"keep": True, "clear": [(169, 124, 41), (91, 65, 0), (62, 35, 0), (19, 35, 45), (18, 34, 44), (19, 35, 44), + (23, 37, 53), (20, 37, 47), (20, 36, 46), (12, 29, 33), (19, 36, 46), (23, 36, 52)]}), ("spear", "gen:spear", {"center": True}), + ("arrow", "gen:arrow", {"center": True}), + ("undyne_b", "wiki:Undyne_battle_armor.gif", {"feet": True, "every": 6}), ("note", "gen:note", {"center": True}), ("drop", "gen:drop", {"center": True}), ("arm", "gen:arm", {"center": True}), From 32b07d6ff45343887ae1371fdd703fa7889a21db Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 09:36:54 +0000 Subject: [PATCH 12/19] Undertale: Hotland's first floor, from the Lab to the elevator Hotland's first floor, as the Undertale Wiki describes it (what's said is short and in our own words, the quiz questions too): - The crossroads before the Lab (the Royal Guards at the elevator, the River Person's dock), then Alphys's Lab: the lights come on, Alphys meets Frisk, and Mettaton bursts in with his quiz show. After it, Alphys upgrades the phone: its CELL now opens the Dimensional Box. The fridge holds Instant Noodles. - Conveyor belts that carry Frisk; the Magma Chamber's steam vents that throw Frisk over the lava (west leads on, east down to the Burnt Pan); the laser walkway, its lasers sweeping across (orange: keep moving, blue: stand still), and a laser's alarm when one catches Frisk. - The puzzle hub: its vent turns a quarter each time it's used; the two shooting puzzles (dark blocks pushed a cell per arrow, two shots: the rules worked out to give exactly the wiki's solutions) open the door north; Alphys switches off the blue laser before the left one. - The vents over the lava, and Mettaton's cooking show: the ingredients, Alphys's vegan substitute, and the jetpack up the growing counter against the clock. The CORE far off, and the elevator up, where the game now ends. - Vulkin, Tsunderplane and Pyrope, each with its ACTs and attacks. Engine: battles that play their own way are a table now (Flowey's first, the quiz, the jetpack, the alarm); a shooting puzzle screen (MODE_SHOOT); belts, vents and lasers in Hotland's rooms; a map-cut sprite option keeping only some colours. The test driver learns "vent:x,y" and counts a door within a room as a point reached. Tests: the Waterfall route now ends at the Lab's crossroads; a Hotland route goes on to the elevator; the new battles are fled from, fought and spared. Docs and screenshots updated. --- README.md | 4 +- docs/play.md | 2 +- games/undertale/README.md | 21 +- games/undertale/docs/cooking.png | Bin 0 -> 7187 bytes games/undertale/docs/jetpack.png | Bin 0 -> 2010 bytes games/undertale/docs/lab.png | Bin 0 -> 2610 bytes games/undertale/docs/lasers.png | Bin 0 -> 6206 bytes games/undertale/docs/quiz.png | Bin 0 -> 2507 bytes games/undertale/docs/shooting.png | Bin 0 -> 1131 bytes games/undertale/src/battle.c | 33 +- games/undertale/src/battle.h | 18 ++ games/undertale/src/bullets.c | 2 +- games/undertale/src/data.bin | Bin 858633 -> 961349 bytes games/undertale/src/data.h | 146 +++++---- games/undertale/src/events.c | 3 + games/undertale/src/events.h | 9 +- games/undertale/src/flags.h | 15 +- games/undertale/src/game.c | 14 +- games/undertale/src/game.h | 2 +- games/undertale/src/hotland.h | 9 + games/undertale/src/ht1.c | 440 +++++++++++++++++++++++++++ games/undertale/src/htmon.c | 289 ++++++++++++++++++ games/undertale/src/htshows.c | 256 ++++++++++++++++ games/undertale/src/items.c | 6 +- games/undertale/src/items.h | 3 + games/undertale/src/menu.c | 29 +- games/undertale/src/monsters.h | 19 +- games/undertale/src/rooms.c | 4 + games/undertale/src/shoot.c | 134 ++++++++ games/undertale/src/shoot.h | 10 + games/undertale/src/text.c | 2 + games/undertale/src/wf3.c | 11 - games/undertale/src/wfmon.c | 17 +- games/undertale/tests/check.py | 36 ++- games/undertale/tests/hotland.path | 145 +++++++++ games/undertale/tests/play.c | 23 ++ games/undertale/tests/waterfall.path | 4 +- games/undertale/tools/fetch.py | 9 +- games/undertale/tools/pack.py | 10 + games/undertale/tools/rooms.py | 56 +++- games/undertale/tools/sprites.py | 69 ++++- 41 files changed, 1731 insertions(+), 119 deletions(-) create mode 100644 games/undertale/docs/cooking.png create mode 100644 games/undertale/docs/jetpack.png create mode 100644 games/undertale/docs/lab.png create mode 100644 games/undertale/docs/lasers.png create mode 100644 games/undertale/docs/quiz.png create mode 100644 games/undertale/docs/shooting.png create mode 100644 games/undertale/src/hotland.h create mode 100644 games/undertale/src/ht1.c create mode 100644 games/undertale/src/htmon.c create mode 100644 games/undertale/src/htshows.c create mode 100644 games/undertale/src/shoot.c create mode 100644 games/undertale/src/shoot.h create mode 100644 games/undertale/tests/hotland.path diff --git a/README.md b/README.md index 36798a38..fe2d89d0 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins, Snowdin and Waterfall, from the golden flowers to Hotland's edge
Download + Undertale
Undertale

The Ruins, Snowdin, Waterfall and Hotland's first floor, from the golden flowers to the CORE's view
Download More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins, Snowdin and Waterfall are out, Hotland, the CORE and New Home are next +- [ ] Undertale: the Ruins, Snowdin, Waterfall and Hotland's first floor are out, the rest of Hotland, the CORE and New Home are next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index 7b94c10a..820d0a50 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins, Snowdin and Waterfall. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. For now the game ends in Hotland's first room. +Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall and Hotland. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. For now the game ends at the elevator by the CORE's view.
diff --git a/games/undertale/README.md b/games/undertale/README.md index c5d04f00..761d703e 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins, Snowdin and Waterfall, from the bed of golden flowers to Hotland's edge. The rest of the Underground is on the way. + The Ruins, Snowdin, Waterfall and Hotland's first floor, from the bed of golden flowers to the elevator by the CORE. The rest of the Underground is on the way.

@@ -26,7 +26,8 @@ * **Its people, with all they have to say:** Flowey, Toriel and her phone calls, Napstablook, the talking rock, the Froggits who give advice, the spider bake sale, the snail facts, and every sign, bookshelf and mirror. * **Snowdin:** Sans and Papyrus, and every one of Papyrus's puzzles: the invisible electricity maze, the X and O tiles, the one on ice, the multicolor tiles and the Gauntlet. Then Snowdin Town, with its shop, inn, library and Papyrus's house. * **Waterfall:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the marsh where the land is black and the water glows, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. Then the fall into the garbage dump, Mad Dummy, Napstablook's house and snail farm, the small bird back over the gap, Gerson's shop, the mushroom maze and Temmie Village with its Tem Shop. And at the end of Waterfall: the lantern maze, Undyne at the dead end (and Monster Kid in her way), the echo flowers' path, Monster Kid on the chasm's bridge, Undyne on her crag, her fight and her chase, and Hotland's edge, where the heat gets her and the water cooler helps. -* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall. +* **Hotland's first floor:** Alphys's Lab, where Mettaton bursts in with his quiz show, the conveyor belts, the Magma Chamber's steam vents and the burnt pan, the laser walkway, the two shooting puzzles that open the door, the vents over the lava and Mettaton's cooking show, with your phone's jetpack, up to the elevator. Alphys calls you as you go. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane and Pyrope in Hotland. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -99,6 +100,18 @@ The neon sign
Welcome to Hotland Undyne in Hotland's heat
Water for Undyne, in Hotland's heat + + Alphys in her Lab
Alphys, in her Lab + Mettaton's quiz show
Mettaton's quiz show + + + The laser walkway
Orange lasers: keep moving + A shooting puzzle
A shooting puzzle + + + Mettaton's cooking show
Cooking with a killer robot + The jetpack
Up the counter with the jetpack + ## How to play @@ -111,6 +124,8 @@ Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bo In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. The Tem Shop is the one shop that buys what you carry. When Undyne turns your SOUL green, it can't move: turn its shield with the arrows to block her spears. She can't be spared: run, and she'll chase you. +In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. + Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. ## Controls @@ -126,7 +141,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **The Ruins, Snowdin and Waterfall, for now:** Hotland's first room ends the game, on a screen that says the rest of the Underground is still to come. Hotland, the CORE and New Home come next, one at a time. +* **The Ruins, Snowdin, Waterfall and Hotland's first floor, for now:** the elevator by the CORE's view ends the game, on a screen that says the rest of the Underground is still to come. The rest of Hotland, the CORE and New Home come next, one at a time. * **No music or sound:** the calculator has no speaker. * **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. diff --git a/games/undertale/docs/cooking.png b/games/undertale/docs/cooking.png new file mode 100644 index 0000000000000000000000000000000000000000..38d7c59fd75ae35b84327f22ca1652cfd996e650 GIT binary patch literal 7187 zcmYLObwHHQ(?3E&8kBBO>JSh_x}+N{isDQxH-JEd55r@(sDJ9+A z-Mr`f&+ngop4sQw+1Z)-%+Bma>uRfzJf?pP002nTR2B6B04zDo`yl}~roGqUl>z`5 zrqvYX4g9C~EHs>$y3;B}E&Y8G!#T8LX^d1AID4}5I+e)wJ)RCQMRmPYgoskB$;AsO zcH2-Z$H-66T3waLQojk(rjEvKRi2;HZ=-y?8o#T7*UL`CBoxMNAN!8hj);r%`EP}$ z%uazM_3=5M(x$SkjT^z^lFDEMEv z%YnE#4YTufRgdTY))e3Db9%J(OhQzc^7}%5)dl<{BNFqiFky~4L{2}Bv^NyDkmc0u zTZ@4b<@W;|07*pqmizLcA6orKz3zT)+^7ryfL){qPA(5BYNe11#0q6(Wf1kSZlVD| z{!?hw5TPXtYXJZViO;bC1iN4y901IafffKTwr?XEu8zaAj5 zygQb8kZ!6Tq%ErihfA?mC*PZM`>jQ{=Ve6n{Z=ym!tGRE9JeIrSwFYH@pe&=fN=sZ znY}=m%^#=wwf@Mq&)mLW;8SE$YK*HrG&sDMaCFJzIXyTegn#GGl0Fqu;P#0Xibp-^ zEm@FQ!YGxoyG%aCARHJiOzAb|P*l^WCUs|8W90d6-PT#>365^gI}-7bU7w`D+VloJ zZ_kS0fDm7sjAoTV)2{DTroDweqeDnv|LiwEpaF?uaM3$#T)f{5aP}0ZQ?LJA(UuZD zC}uH_OGJZkjy}kvzxh0ET3nG*WVsBeTy09ppch$enKH$pWq(1FE~p` z35f~eI){m1WE=@uk7i}%p2TQyH)nbOb9$9OR_oBcaDNe4Tbqo1)zGEBvYDHU@?$`laR0mqZE&1Wmjeqk zEOqyM9L6Q(=W0c)~nBcw-B#mSwg#GIqIKPFMSK!HDU~4mtB|`b98r>M`t;={ntrgTjd!02FIF3vD2W>Pn z<>V+2l@sSa^2w>97Z$W2eW~3n&VF=ZJKo%RU#IWYToQvWsQrwTyNw646JxAH2P^3 zE4t@b#3#eTqyKP!PmVqu526%XWoXG6J~m3cX@M_iY;G&fwcxnZ1^gL!QBFqYeb_K! zua%T}R4^;G+@5Mz)dAAN`u>y{?Hj6*J0o8H>tVR@ohoY$Fz&!-Q0qa;K&YtVbFI;# z#Gq7IbeT3GoPks_L$mhX^#&WqG!lC>{ZnP&{*-y=1`dQDN-5wdU`{^85|~joBwpqv z1sr5bm-KTr7M$oDmESpv329p0QD93qHJ*G`*$Qbgg@Yk;1lUD#?Tnk&u5;OL)LaVM zrcRHS^1|Ym)nD~m%Cj!$FC^yAYTpg7ZIFBgK$1TR1Zo411CD!Ry9i6T^2TCdv;NE| zuzrd*p*Ls)rL!;W;1J%1QJv{)GoFhL!x-w84og&R%JzF%wD6r*!(_qG9nr&En|Kjv zTSM2h#$|HiiO)^(TiYL5vVg?D+2)3DXeH>V;gLWj z-1tG|!hA7eke~aSYxG2T0&IjW8A8<^3!Bi$Z^{gE&qJ#M9qA=x7+|q6t;Uzt>jZlu3>|2w>jz7Vcu6jo&<# zv3Ga2SKpA<7nd|ZJ>~tD3-Rr-rtIzed;OV(d6RrnSaDTCUpJmW;u5v*TRiL;9y^1g zB7BT9TY z!pRi~www32y*Q*UR8>I7cX^KjZ{K&0eSEiml8aIP9)Cyfy`mhkQ$QK5@=XR>9C19* zH@c8aYq!=5(eJWUL<|?MRwv3Ulnu0Jb*S3CtfTMs2~xbnBKLj@w;=&PT!+iK<1~*hNv>6S-Ru1QC^{92NIK8uC%v`OW2n$@ zv8&Oq-Izx&ZQxd~opC0^Egq8s&s~dOcxnkI>e~Wy#zl=tm`t6JaTP%|Kd!CHnz}Y# z^L5M=p!v@pN@Ssvu;Tk+i(&J!OKd1NwM530Ih?g*FofLs%Bs_igg5MJifIqn!6-(z zo3vFs)G}&>>w)rq$dMd$OQGj*d84=zWt&6v;Floe`*2`Wkv}hc{<4exjy>E2vi`Mg zwJ*&AM3X{ZDEzZ((`QFUc6n!Ne8};#K_@+Y?v>@2CtI7gIe`yTH_M$PZIQ2E-O)2y zj5m+ZRv-*EPq~&^&r!$8Jv@eL3|o;OgYC~w=prg@?#}*VWd|jscw+O^75enZ==xIY5E+$ z3Ka5DIm9RJN%>HQ$Doq!6Nsft-Jdn8(7;MK*FoZB#5O6H#PAp=jN**< zE2S94{I+HpH0vvu0&nt&Dn*nF;W`|!AzayE#ub>_=-v0_@uDXG<^^O(w9Xt&#_gN! zogQpBJe})U3$Mwr+)I?mnUZPn%5~cI!m8kcs$`BSpdiNw5ijb<=ymq2E|_M8TkRDK z7@0RW>8$jr-mrzmwX4l7g^@z!X8%r=&Wx!d8ecc^9>Ena)FqqR@bVhWX;&IO!PYfF zF+J+9mF$qGMyiX}{lxJ5N0Z;|;3#`MFC~e;WUV8vabMY_8Oo>JGFwCz_!QuB$E7}C zHiB|*@s4}tMc&%tI?sq|H_rnP8kxl_vA$7wO>LphYGf>c<95 z*vB|YW;PO9rkKoGbuFWco0~SQ#dh4efy0`Qk*qU*f+wB^+F6o6(ZuXx7&s= zohp(<(W~IIm+DnDSJPd$J`TYXkqXZXLd@Gr-^(w$h8md+FC;-^1uDPYjCX1-An)#w z`49ogf&NUAy3xT8qU?>c8am7x52x>Q6uP0-{e+DYeM$DVCE5t@>rZ#L@#8^-l{C|x z*bm*zH&+>o5~Zj*i@0}TMSt*o>)%bA4B_3Zb@aA6{ayrU1IfiSzFUB*D#0gfu)K^% zced4Ml6uv~Co?n>y$P{=y_JjFkH54DfTdnA?+6ZBiXo1Pk2hm|sV^IfV9y6~)rE^x zo%^NN3~A3tQ*l6#&7%e9bxT1vR6|Pi@XAEk-AFH&;xOQr(R0DLP%s-$?Zl zx}U{<(+Gc4E-ZaNqt`U6zd5?%HRz)7VVs?kk8TsV8B&Mn%nRV*{`4y+`e`flae>Is zPS6;0D>EygDHH7K>}xHhTd(pfkqenYrNqH0b)1if-Q72jx`8*g1Z=bz(SOR_H@29e z#wj|DDap`zJS%7$GuelQz*(_(pGzVRB7QQ1FCN)m^ExP&mB5t}6V&E%JZ3bPBc(p} z8f|k=8YXv13fc#9?r!{e`2@}&BTh}=8qA$d1(^+t2FCU>hjqIHlVzon8h@tL2rT5_ zC@G$1q$ryYXRYHiDoLEhxXWa-yp{Ft^p#As^uAyJ?6s&o8TNCUDjfGe61Xz$5R2f@ z)Z)!onuQ>bqXGOQQ0Ho1+I7zR`*mEq|Eip%t^&vQ)P&_02?(tpQ#$AQYN>n>AE427 z-M?rPPz*ACHWalVlaAT(#M>FqS~y3;l*wZw9sX!oi?hv>{K3?yYnUyG!$z!_&w0PyF68GM}~N zFD*g$My?wo+pW)^MlY2@B5#XTO9>fo=a)&Wr`?OlCFx>QTc0ajmEt+-l|rP|JsTFD zKWd=4h-5(FyzzB*O%^oRG~j59+88_-fxQmH&h}W<8m!l2km0%6Y!#$TJ*~@$T@u5AZ zFMXbk_*nY|7b~Gx;g-m2MSA=lxz0>IZlkc2<5 zFjI@9;aN@2F=xDFnfIM~*EOwZy-m64k?XlgN?hakq$km!U2C6=vXn zZ8uy9aQ~0wELkPl9SKD9vQ%@tBEO5p`-+9Vd!j=#Ht_He)D*~t8~ZcrG07!1#1?Do zS4*mmw*omAHQ@7SZq>W{`PZdGbEd)f-w;}-MU}X|XMD$T#Yz2O$|Glhs8{gZyz9Mqfq2O2? zMn&Yrdal0oR@q>)moG1kGV`GB_O|4mNgeogEftX`fAM%p9KNERC$eyi_X{dkh_ab8 zEPz~fMJn%2r4E786P)TvYt~3ATj7R5;E#GC7HHt_v>wPe3GB1g&SGd%&l9M;+P4&OW z83sK;U$e(EpejRJJRWLF-^NOYG>GP5Z73q(g0e`LbM@S*$yD*MXW?E~S8rG7#Gg36 z=>j_Pvm+q-V~$l`j%c;&hMUPGyWF##vP~lYYkW>Yn2-5~yn)GkRQW4u#l#<$y67uo2^xIOGR@kl>H-^14n z0S~JSqI<2+gC7)b_dc*GrAK!KDbOZ@xC>i~)$Fbr78Me9-)V&YNfilr_f4!9X`9$? z@XgzyWRpn$b2RETFx7){&4cyQU9}a0}bHX=TpPgU&;4s=zU-* z^imA@t!{s+#Yt?plpnzq&UB<@Po1rF59Ldj*)9hOwj~4zb+5Zqh>d@eA7nd&t z?xl3O>`Z#|Knbwbi6>X25}7zVBD8#YlmUz}Nv49NYDn^GbrmhpY78P#d#NtR(JJI= zk@F2$lqUq4yQ{@(m&_f; zRTXQBu1fpB6ZLX|E;+|)(ZhTrJ2?u;MTPj<}bzU97kA^uccL(1(_LBG_6vcjr zRNY@H1*uz{&?$l82Ndjr;_W9AwiMAm*%L8s@OH(;(KYa(A=4@P?Q#DSre<-VnP?|o zm?o37MO?0jspT()#qXbRXz#1xdbyQo%*8x-YaxclLgF9gA$9`gKQbq_Vf-bI_(j-^ z`df1X4O^pJk*YH#pZLEKXMJ-!9jn%0X68fK?+q1NyMjM7a9mOz|M9VB!!p+gj|OLo z9;91kJ!o8Nh<3)2;8;y^5Y6QM3Z0$nu9Z~@pKG|#gdu^7Cx;$Mjsw)f0eEu`=Z0Jvi4JF!~{zk!4W!J`1x1pM$V&ZAO)W!XQ(Mt22 zMoNA3=ryyL_Fx&2ou%QlXb^tm(SP_7QSGPcjJUrOA_clR&a2m1-D*tHeBlO^+*xESh@8<@7D@?_s+kLqw4Rt0u}NPp!pFnSdbc7gUe5HNj}uGE?I+anwkM|YgRZ2+5s z*#+U&4qChVq3qX?V{Z9H<-o&DTvn=3svSA78}%s;qqv`~^p6lVnXS~ zx;O_?u2r0Iu175&16=^jCbSK6mW?@}eiD|^YUOG78|jiS$c16G`ig6U&GmZ1~M}pS6BER2%sO;z<~e&Fa@uVP$~vesn5P!uH&zy zN&{F;<|iuDUs7twD(bP<)ov@bSa|xhq8H8qa_X=aRUkQWkI*rBbi|_<0N9=?Pzge~ zK`GkWnOcH#fX#}}I0)iQEN3D_~zX#Wh# z5Caa@b~%iG^9la({C@%dQ5o(3$RNzM2>>HQXg&cZN&!^a{>_x?ScQuEM+snTXo4w4 zo)+QI}Z3Y$wL&YqZ!E&X97(CS(I(=;O vdjx=CfKAI@E%6VVwHnr+EwSXNj~=cQcu8#YwHh&(eE>BjZN*9j>rej&D%#|! literal 0 HcmV?d00001 diff --git a/games/undertale/docs/jetpack.png b/games/undertale/docs/jetpack.png new file mode 100644 index 0000000000000000000000000000000000000000..3883b9e0677ce024060eea1fd66953056fd13e2a GIT binary patch literal 2010 zcmZvddpr|*AIG=3Z*xh_+zydTxn$ai<65HA1&iZQP0gi*T%Ng=+lDiaFr5@)NU0QU zl*fH-au2y3q{Wnbn7Pa-wlh6FujlnVujlv2_x1f7+DR84Lgb zq)+{F!UX^T+6sM+BuHra&U%&rfJE`B6UTnN@nLDK;m%(UD&p8w%@t2uTeh~Aw<~7G zJ5~b&J)Cto^{D8qN=4MMgA#$x{*T$iURO)l!)t$C#(y$jN_U{Xrbf*9D+_a)C7VXJ zm-VU}{M6Ah*=__;EAWdB8-L=vIc`7+829+>NvjA-!bu?{5&IbgKoX#N#lYf1R#SsK z7M%bDiYwgo--9Mo7Qk_{K};|LqYc##j;iXzLZQ0>yCEVYlL&bjSgpdJX&Sj-H*#cv zncpKD{EYE{C@!ifhcyFRRFS3|bhf8pc0ca1x`VRdoFVG&2XrX|?I2-XJH2l{2Zo;+Oj%^PeZ-Wg z>Qyyyk;9ZIPxp&rYIr^$H(yU#sBiKKX0c=naXfA?zvFpSRI@Vs%hWAe|^ZTVB7G7AgR8 zmx+a{B4M{rvvJ3ldj|x^r?;sV-wjr;cuwHYNir=NK(~`=vql4EB}Vn4%(B zP22*WC!(z(m}Df`ozB8v5KB(1anwWj<_)ZvLnso-&n1Prhl*uA)m0L)Bh>|IB3&dA zTvM#~a%8*8{ib_Syu!+8=K1&$x5f3n?L10@b_!8W znj@?tr6)Y)sQ!ecaUl@sx|6fuT(w=)Ak_P5*p8& zk)ziuHX0o2m#4nJLPKqx-!q|!jJ>`7B!vnem9zf!- zcUdJk9V$VBW%TyAB>2y4_oh#p^+}#ptq@)G<88SCqO~3C zZ$k?&#qrU@LOLDHHRgE3i}rSDU6kZR9=6uaK2`1U!Y~jKDowT7QT@0&nRz)eb9?36 z<(>~?_nN#o4M$~kq;p&bQB=Wp&qKu<+nZO;6EY_^c9tfx8>msKLxB-f;!4@$X+~a# zsFB6U!XiVgi9MmKtAfZ7Gfx-YmFEZXcHMvT^1Ez^%q}T7k|)EvKufkKz!!dYpD6~32tN+t&<`J57x1fdNlUG(|NL^l zQ=({#U>{--=kqmWC_37Klb^T7ZDo7zBx0KLkd-sN=D)pN^o2d;t;5LtpBn!`h5Igm z$ubNq(h_e$^Z8xx((FKyer2~$moFD`=bRX+XXn1t@z3LN2dZ|8tPL4WHWXfV+nLSz z?4ds!HX$#=AXZ9m_%%%YRR8PM_?nlFu5yrz);7iOomi1N( zlK!n_&@WQL#6F78!~Lm!sHU~1&p`T~!@hqB@P91<54`E)?Fo1ki`d;iW$$!?avYoZ EH_Dl%SO5S3 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/lab.png b/games/undertale/docs/lab.png new file mode 100644 index 0000000000000000000000000000000000000000..1a02a3e54a23416a448de28c9aae2b9184301bd2 GIT binary patch literal 2610 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/quiz.png b/games/undertale/docs/quiz.png new file mode 100644 index 0000000000000000000000000000000000000000..0b7820c1c94909cf34880f67dc21113f325b613c GIT binary patch literal 2507 zcmZvdX;czu7smmY&@pnu+;uW_)N%}=;1&U{BZ6q?=ycBe>HTugeV%*Hea=14{r~>SzrvjlN-9eN0Dyz% z&pBQJ0DyLT`6?K+7k6CsPXhoF>E|8oucF77rY`kPG%AVzYSrN|K;TB_g1kZ`e;bE4 zrY*LrDVoVAlg_czNWCp;^PSZ;Uc*H>nZK>A?RCLn&~1L3y!ECxBB`6gIgggf+a+}i z$P0-aROG>$o5{6Xv!midS%fsg4hIB^14|soymp$(WkFJ4W2qU=l+7w})IT={ud8twlHeAMG3JS>)LeMkZ6&$2djIn~^zLtFHEOm;40 zxzt!7*GVv?(`|oeAEQgN zy@|dj@*}s~(Mk%8jV;(f0BONuLZLTqrCPbF%nj-9Da&w&C|E5AI-k-^dnEKz@>92K zUxs0+-Y7ONJuW7p)p=Sr7ttJZw{kSD@9b3MyHn*j0KNEQevqyQWuR|SSrj{{;*-IZ zteD0g6bc(TZ9Q-6WDr~C@G<47aM_AJ>iGWPPXJ+9>h1x^*LCLP8;>(Qm=`Hs2DHCEirT4!bY zL(%uD$R@n)a34!qMw8kRn2z6jYdjKr7F*qH)V29>@sg_W zj$?%_OsC?*W+@zsk8bG4i-8k;>N1SZ5F<|D*M_nwH?q7IP0V+edII)_J;)3e!w5*p&vo}C}}$aS{R6uf!?lo;=` z)QN)dsB=CDHmWW2Wxd?KE&$iaYEy$7RKnss@o}h-k^*^BI16xRf$4!+^~a z?mDO#&R80QjSD2K?e2J~s6Z8^_lUyPjON#2h3jJ^HIIw`(Pa+{`=GJM#dp@_&Ed!E z%KR^h2|VG>TG!ba|PzFRE=Ki6^% zE97KvytGjf2v-=61r0isun!B-oA$eu0cBNitmJAn;hk!vXi&L?@X?csV7$Wt=q6!k zwBJv~>Juwz-u6OhS2ATxF+huufe)pndZXKmY{}y0Z#U|&1{UP%w4LRLbn1XN`tGHf zdMKmQCJdhx&=@)IDs|HE=Jr^GL<__zM1G*1I5M5UgeXt`ok*O8X|LI5t3jRm`hOf7f03ZkWyS(3(KwFS-aK(ga=;_UgnR2=MuI{xhFWASBucHpif{1ai3~y0%)VIoks=vXMa-xA1pDiVjU`9jH z)sgd%SJEoUMM0|lLoz0?-EXB)+d>(-hGq6DBgnlaeJ4+GBBDh}U#HyA4c7;cs+90G zNe^0lRO#cevs#>JRuf3n^L<9Hh|7Kk3vcKiN*)yHWVc?P7@$Hz-@1fcpkpQ(FQ}9% z{z1FgNE@PARMf_qKWRA|56cqkJO+IOn?gk{BHbtyM!eP(l0Gds%qY6vA%KyX7oUhU z2E1tt`uWbHK{+a_ag<90N8=M$t`lQQACP)(3yxAV-iVm0VMq5diS zOZXgjs4-(gzh_K} z{Bl#5-nRP)KmAVALowUUTQ2n!ZEdRcHAZR{Q$|S-gK0~^-ptXC8GpU2`mQ7;)hx-- zOEd65{kO?BHh^dKG>nMGpg0K9x35^ErjYXuOYbEv1(%vS0{@%)|A$QtlM~n7A1q~^ P*{`2>f;*NwAQJusKZD?v literal 0 HcmV?d00001 diff --git a/games/undertale/docs/shooting.png b/games/undertale/docs/shooting.png new file mode 100644 index 0000000000000000000000000000000000000000..e094e6f0867d3bbf5b4f8b462ff3bcdd444bbd3e GIT binary patch literal 1131 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoKX5Ps$$$P@HVh0bMxHK?Ar-gY-ihtIWyR2N zabc44UH_$BHp*wC+)fo=@VM(g-9P$J9jydX_H&18akPt9XNU-SGtazjS%J-r@#o26W&Xbx#);DNw zP5jC=BS<<7JM(?tPwNkk>)Q>PnVHyFct99r7Q{S<0}2Ta2O1h2ftZmIr~rfsC=xu^ zmf(4H>8-zZX4{W7if#COTU%t>1%-qILbLu~k^lPQ{@#7@=D#gwG%^~0n7HIzqvdDa zG@vCAix?T3Ar`?b0l6lk=REWKmh<0d0ks$uF8d|7a;+^NM9%?JgV=rTlEwxz8YBDP z7a!xn?*T?T{yj$X-yh}SNlTdaw0f-pGuXOyjr~d4_qpFzuR06%C|J<=gWi{Uci-37 zTg>HYlLQAZ%#{xf{>WCG|MT-Y4>+t85(Er3n7wyepO$@J8EEPmkRjeLa#!h1b#yr3 znw8h-2!`?ti9{M|7@?1ZT#x=W1e!_ z<`ayOwc9fDe0R@PHrvO+{>$P2b0 zSbv;@>fF7j=QH1qb>cs(xVQbu&(wb#V_vR_X7b*BWh393W7YR}_thxMM-?1P=f|RS<@gK7=Q5)NIVz{}9|Qj`ql>0@j@<=Gc)I$ztaD0e F0svh_)e8Us literal 0 HcmV?d00001 diff --git a/games/undertale/src/battle.c b/games/undertale/src/battle.c index 0a2b4c3a..4ce2f1c1 100644 --- a/games/undertale/src/battle.c +++ b/games/undertale/src/battle.c @@ -12,9 +12,20 @@ #include "monsters.h" #include "world.h" -void flowey_battle_start(void); /* flowey.c */ -void flowey_battle_update(uint32_t keys, uint32_t pressed); -void flowey_battle_draw(void); +/* the battles that play their own way: Flowey's first (flowey.c), Mettaton's shows and a laser's alarm (htshows.c) */ +typedef struct { + int form; + void (*start)(void); + void (*update)(uint32_t keys, uint32_t pressed); + void (*draw)(void); +} Script; +static const Script scripts[] = { + {FORM_FLOWEY, flowey_battle_start, flowey_battle_update, flowey_battle_draw}, + {FORM_MTT_QUIZ, quiz_start, quiz_update, quiz_draw}, + {FORM_MTT_COOK, cook_start, cook_update, cook_draw}, + {FORM_LASERS, lasers_start, lasers_update, lasers_draw}, +}; +static const Script *script; Battle bt; static bool over = true; @@ -113,7 +124,9 @@ void battle_start(int form) { bt.t = 0; say(form_text(form)); bt.w.finished = true; /* (typed once the intro is over) */ - if (form == FORM_FLOWEY) flowey_battle_start(); + script = NULL; + for (unsigned i = 0; i < sizeof scripts / sizeof scripts[0]; i++) + if (scripts[i].form == form) script = &scripts[i], script->start(); over = false; bullets_clear(); } @@ -425,7 +438,7 @@ void battle_update(uint32_t keys, uint32_t pressed) { bt.t++; box_step(); if (bt.scripted && bt.phase != P_INTRO) { - flowey_battle_update(keys, pressed); + script->update(keys, pressed); if (bt.result == BR_SCRIPTED) battle_end(BR_SCRIPTED); return; } @@ -582,7 +595,7 @@ static void draw_monster(Monster *m, int i) { (void)i; } -static void draw_hud(void) { +void battle_draw_hud(void) { char s[40]; gfx_text(FONT_SMALL, 15, 201, sv.name, C_WHITE, 255); snprintf(s, sizeof s, "LV %d", sv.lv); @@ -596,7 +609,7 @@ static void draw_hud(void) { gfx_text(FONT_SMALL, 137 + w + 8, 201, s, C_WHITE, 255); } -static void draw_buttons(void) { +void battle_draw_buttons(void) { static const uint16_t spr[4] = {SPR_FIGHTBT, SPR_TALKBT, SPR_ITEMBT, SPR_SPAREBT}; bool menu = bt.phase >= P_MENU && bt.phase <= P_MERCY; for (int i = 0; i < 4; i++) { @@ -740,7 +753,7 @@ void battle_draw(void) { return; } if (bt.scripted) { - flowey_battle_draw(); + script->draw(); return; } gfx_sprite(SPR_BATTLEBG, 0, 0, 0, 0, 255); @@ -775,6 +788,6 @@ void battle_draw(void) { } draw_damage(); draw_bubble(); - draw_hud(); - draw_buttons(); + battle_draw_hud(); + battle_draw_buttons(); } diff --git a/games/undertale/src/battle.h b/games/undertale/src/battle.h index 97d1e857..006f93a9 100644 --- a/games/undertale/src/battle.h +++ b/games/undertale/src/battle.h @@ -132,6 +132,7 @@ typedef struct Battle { int result; int exp_won, gold_won; int kr; /* (for later) */ + int df_loss; /* DEFENSE lost this battle (Vulkin's hugs) */ int16_t state[8]; /* the formation's own */ int32_t as[16]; /* the attack's own */ int talk_i; /* whose bubble shows */ @@ -168,6 +169,23 @@ int board_cx(void), board_cy(void); /* its middle (pixels) */ int soul_x(void), soul_y(void); /* (pixels) */ int damage_to_player(int at); int count_alive(void); +/* for the battles that play their own way (their draw) */ +void battle_draw_hud(void); +void battle_draw_buttons(void); +/* those battles (flowey.c, htshows.c): set up, each frame (bt.result = BR_SCRIPTED ends it), drawn */ +void flowey_battle_start(void); +void flowey_battle_update(uint32_t keys, uint32_t pressed); +void flowey_battle_draw(void); +void quiz_start(void); +void quiz_update(uint32_t keys, uint32_t pressed); +void quiz_draw(void); +void cook_start(void); +void cook_update(uint32_t keys, uint32_t pressed); +void cook_draw(void); +int cook_won(void); /* the substitute reached in time */ +void lasers_start(void); +void lasers_update(uint32_t keys, uint32_t pressed); +void lasers_draw(void); /* the monsters and formations (monsters.c) */ const MonDef *mon_def(int id); diff --git a/games/undertale/src/bullets.c b/games/undertale/src/bullets.c index 9672fd3f..93af0b39 100644 --- a/games/undertale/src/bullets.c +++ b/games/undertale/src/bullets.c @@ -153,7 +153,7 @@ int damage_to_player(int at) { int dmg = at; for (int i = 0; i < 8; i++) if (sv.maxhp >= steps[i]) dmg++; - int df = sv.df - 10 + armor_df(); + int df = sv.df - 10 + armor_df() - bt.df_loss; dmg -= (df + 2) / 5; return dmg < 1 ? 1 : dmg; } diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index 814b33a81f556233f7f83f884c52d99a9b212eed..b23083dc2ef6323d5097578b45589f35de8b4c2b 100644 GIT binary patch delta 133091 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 eluBdgd2>%C=8Ie9Hxj#HScf} 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

8rX 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 H;MU4s<7qE0 delta 51304 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 0) return r; r = wf3_event(c); if (r >= 0) return r; + r = ht1_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index 6e1f82b0..8484ef7b 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -11,7 +11,9 @@ enum { ACTOR_TILE, ACTOR_DOG, ACTOR_BLOCK, ACTOR_TRIGGER3, /* Waterfall */ ACTOR_MK, ACTOR_UNDYNE, ACTOR_SEED, ACTOR_BLOOM, ACTOR_SPEAR, ACTOR_ONION, ACTOR_DEBRIS, ACTOR_SHYREN, - ACTOR_MADDUMMY, ACTOR_BIRD, ACTOR_TEMMIE + ACTOR_MADDUMMY, ACTOR_BIRD, ACTOR_TEMMIE, + /* Hotland */ + ACTOR_ALPHYS, ACTOR_METTATON, ACTOR_GUARDS, ACTOR_VENT, ACTOR_LASER }; enum { @@ -42,8 +44,9 @@ enum { /* wf2.c */ EV_DUMP_WAKE, EV_COOLER, EV_MAD_DUMMY, EV_NAPSTA_ROOM, EV_LOCKED_HOUSE, EV_SNAILS, EV_GERSON, EV_TEM_SHOP, EV_TEMMIE, /* wf3.c */ - EV_LANTERN, EV_DEADEND, EV_MK_CHASM, EV_ARENA, EV_UNDYNE_CATCH, EV_PAP_NEON, EV_HOT_UNDYNE, EV_HOT_COOLER, - EV_HOT_END, + EV_DEADEND, EV_MK_CHASM, EV_ARENA, EV_UNDYNE_CATCH, EV_PAP_NEON, EV_HOT_UNDYNE, EV_HOT_COOLER, + /* ht1.c */ + EV_HT_LAB, EV_HT_FRIDGE, EV_VENT, EV_HT_CALL, EV_SHOOT, EV_HT_COOK, EV_HT_ELEVATOR, EV_LASER_HIT, EV_HT_ITEM, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index ada941ab..6fbc4ead 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -123,7 +123,20 @@ enum { F_UNDYNE, /* her fight: 1 fled (she chases), 2 killed, 3 fallen in the heat, 4 given water */ F_WATER_CUP, /* a cup of the cooler's water: 1 carried, 2 poured */ F_PAP_NEON, /* Papyrus's call by the neon sign */ - F_HOTLAND, /* Hotland reached (where the game now ends) */ + F_HOTLAND, /* (unused: Hotland's first room once ended the game) */ + /* Hotland */ + F_HT_LAB, /* the Lab: 1 Alphys met (Mettaton's quiz), 2 the phone upgraded */ + F_HT_NOODLES, /* the Instant Noodles from Alphys's fridge */ + F_HT_PAN, /* the Burnt Pan taken */ + F_HT_CALL_LASER, /* Alphys's calls: the lasers, the puzzle hub, the vents past the door, the CORE */ + F_HT_CALL_HUB, + F_HT_CALL_ISLE, + F_HT_CALL_CORE, + F_HT_PUZ_R, /* the shooting puzzles solved: the right one, the left one */ + F_HT_PUZ_L, + F_HT_BLUE_OFF, /* the blue laser before the left puzzle switched off */ + F_HT_COOK, /* the cooking show: 1 the substitute reached, 2 out of time */ + F_HT_FLOOR1, /* the elevator up from Hotland's first floor reached (where the game now ends) */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/game.c b/games/undertale/src/game.c index 6133943c..cb0ac6a6 100644 --- a/games/undertale/src/game.c +++ b/games/undertale/src/game.c @@ -4,6 +4,7 @@ #include "battle.h" #include "event.h" #include "game.h" +#include "shoot.h" #include "shop.h" #include "gfx.h" #include "items.h" @@ -97,11 +98,13 @@ void game_frame(uint32_t keys) { prev_keys = keys; g_frame++; if (keys & K_HOME) { - if (g_mode == MODE_WORLD || g_mode == MODE_MENU || g_mode == MODE_BATTLE || g_mode == MODE_SHOP) game_quit_save(); + if (g_mode == MODE_WORLD || g_mode == MODE_MENU || g_mode == MODE_BATTLE || g_mode == MODE_SHOP || g_mode == MODE_SHOOT) + game_quit_save(); g_running = false; return; } - if (g_mode == MODE_WORLD || g_mode == MODE_BATTLE || g_mode == MODE_MENU || g_mode == MODE_SHOP) sv.time++; + if (g_mode == MODE_WORLD || g_mode == MODE_BATTLE || g_mode == MODE_MENU || g_mode == MODE_SHOP || g_mode == MODE_SHOOT) + sv.time++; switch (g_mode) { case MODE_WORLD: world_update(keys, pressed); @@ -116,6 +119,10 @@ void game_frame(uint32_t keys) { shop_update(keys, pressed); if (g_mode == MODE_WORLD) event_update(); break; + case MODE_SHOOT: + shoot_update(keys, pressed); + if (g_mode == MODE_WORLD) event_update(); + break; default: menu_update(keys, pressed); if (g_mode == MODE_WORLD) event_update(); @@ -140,6 +147,9 @@ void game_draw(void) { case MODE_SHOP: shop_draw(); break; + case MODE_SHOOT: + shoot_draw(); + break; default: menu_draw(); break; diff --git a/games/undertale/src/game.h b/games/undertale/src/game.h index cc9ec665..a9e180a4 100644 --- a/games/undertale/src/game.h +++ b/games/undertale/src/game.h @@ -14,7 +14,7 @@ static inline int min_i(int a, int b) { return a < b ? a : b; } static inline int max_i(int a, int b) { return a > b ? a : b; } enum { MODE_TITLE, MODE_NAME, MODE_WORLD, MODE_BATTLE, MODE_MENU, MODE_SAVE, MODE_GAMEOVER, MODE_INTRO, MODE_END, - MODE_SHOP }; + MODE_SHOP, MODE_SHOOT }; #define NUM_ITEMS 8 typedef struct { diff --git a/games/undertale/src/hotland.h b/games/undertale/src/hotland.h new file mode 100644 index 00000000..8b69b216 --- /dev/null +++ b/games/undertale/src/hotland.h @@ -0,0 +1,9 @@ +/* Undertale: Hotland (ht1.c: its first floor), its monsters (htmon.c), Mettaton's shows (htshows.c). */ +#ifndef UT_HOTLAND_H +#define UT_HOTLAND_H +#include "event.h" +void ht1_setup(int room, int from); +int ht1_event(Ev *c); /* -1: not one of its */ +void ht1_update(void); /* the belts, the lasers */ +void ht1_draw(void); /* under everything: the lasers, the turning vents' arrows */ +#endif diff --git a/games/undertale/src/ht1.c b/games/undertale/src/ht1.c new file mode 100644 index 00000000..2279de8f --- /dev/null +++ b/games/undertale/src/ht1.c @@ -0,0 +1,440 @@ +/* Hotland, its first floor: the crossroads before the Lab, Alphys and Mettaton's quiz, the conveyor belts, the + * Magma Chamber's steam vents and the burnt pan, the laser walkway, the shooting puzzles that open the door, the + * vents over the lava, Mettaton's cooking show and the elevator by the CORE's view. (As the Undertale Wiki describes + * them; what they say is ours, in short.) */ +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "gfx.h" +#include "hotland.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "save.h" +#include "shoot.h" +#include "snowdin.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } +static Obj *thing(int x, int y, int w, int h, int event, int name, int arg) { + Obj *o = obj_trigger(x, y, w, h, event, name); + if (o) o->flags = OF_TALK | OF_SOLID, o->arg = (int16_t)arg; + return o; +} +static Obj *obj_alphys(int x, int y, int dir) { + static const uint16_t s[4] = {SPR_ALPHYS_OW, SPR_ALPHYS_OW, SPR_ALPHYS_OW, SPR_ALPHYS_OW}; + return obj_npc(ACTOR_ALPHYS, s, x, y, dir, 0); +} +static Obj *obj_mtt(int x, int y) { + static const uint16_t s[4] = {SPR_MTT_OW, SPR_MTT_OW, SPR_MTT_OW, SPR_MTT_OW}; + Obj *o = obj_npc(ACTOR_METTATON, s, x, y, DIR_DOWN, 0); + if (o) o->flags |= OF_ANIM, o->flags &= (uint16_t)~OF_SOLID, o->anim_speed = 5; + return o; +} + +/* ---------------------------------------------------------------- the conveyor belts */ +/* each pushes Frisk along it while Frisk's feet are on it, where there's floor */ +typedef struct { + int16_t room, x, y, w, h; + int8_t dx, dy; +} Belt; +static const Belt belts[] = { + /* the first room: up the left belt, down the right one */ + {ROOM_HT_BELT1, 2904, 5450, 36, 440, 0, -2}, {ROOM_HT_BELT1, 2980, 5450, 36, 440, 0, 2}, + /* the second: up the left side, down the right */ + {ROOM_HT_BELT2, 2840, 4730, 120, 450, 0, -1}, {ROOM_HT_BELT2, 2980, 4730, 120, 450, 0, 1}, +}; +static void belts_update(void) { + if (event_running()) return; + int fx = pl.x + 10, fy = pl.y + 24; + for (unsigned i = 0; i < sizeof belts / sizeof belts[0]; i++) { + const Belt *b = &belts[i]; + if (b->room != g_room || fx < b->x || fx >= b->x + b->w || fy < b->y || fy >= b->y + b->h) continue; + if (world_walkable(pl.x + 3 + b->dx, pl.y + 20 + b->dy, 14, 9, -1)) pl.x = (int16_t)(pl.x + b->dx), pl.y = (int16_t)(pl.y + b->dy); + } +} + +/* ---------------------------------------------------------------- the steam vents */ +/* stepping on a grate, Frisk is blown its way, over the lava, to (tx, ty) (Frisk's top-left: never on another + * vent's grate, but where a chain of them is meant); a vent that turns (dir -1: the hub's, a quarter clockwise each + * time it's used; -2: the pan's, left and right all the time) has a landing each way */ +typedef struct { + int16_t room, gx, gy; + int8_t dir; + int16_t t[4][2]; /* by DIR_*: down, up, left, right */ +} Vent; +static const Vent vents[] = { + {ROOM_HT_MAGMA, 3120, 4000, DIR_DOWN, {{3120, 4110}}}, + {ROOM_HT_MAGMA, 3362, 4000, DIR_LEFT, {[DIR_LEFT] = {3241, 3986}}}, + {ROOM_HT_MAGMA, 3503, 4060, DIR_RIGHT, {[DIR_RIGHT] = {3580, 4060}}}, + {ROOM_HT_MAGMA, 3420, 4180, DIR_UP, {[DIR_UP] = {3420, 4048}}}, + {ROOM_HT_MAGMA, 3225, 4240, DIR_RIGHT, {[DIR_RIGHT] = {3302, 4226}}}, + {ROOM_HT_MAGMA, 3325, 4240, DIR_LEFT, {[DIR_LEFT] = {3244, 4226}}}, + {ROOM_HT_MAGMA, 3525, 4240, DIR_LEFT, {[DIR_LEFT] = {3421, 4226}}}, + {ROOM_HT_PAN, 3620, 4480, -2, {[DIR_LEFT] = {3501, 4466}, [DIR_RIGHT] = {3739, 4466}}}, + {ROOM_HT_HUB, 4820, 3620, -1, {{4820, 3680}, {4820, 3490}, {4700, 3610}, {4945, 3610}}}, + {ROOM_HT_HUB, 4820, 3560, DIR_DOWN, {{4795, 3592}}}, + {ROOM_HT_HUB, 4740, 3620, DIR_RIGHT, {[DIR_RIGHT] = {4785, 3610}}}, + {ROOM_HT_HUB, 4900, 3620, DIR_LEFT, {[DIR_LEFT] = {4855, 3610}}}, + {ROOM_HT_VENTISLE, 4940, 3120, DIR_RIGHT, {[DIR_RIGHT] = {5051, 3106}}}, + {ROOM_HT_VENTISLE, 5060, 3120, DIR_RIGHT, {[DIR_RIGHT] = {5171, 3106}}}, + {ROOM_HT_VENTISLE, 5180, 3120, DIR_RIGHT, {[DIR_RIGHT] = {5312, 3106}}}, +}; +#define NVENTS ((int)(sizeof vents / sizeof vents[0])) +/* the way a vent blows now */ +static int hub_turns; +static int vent_dir(const Vent *v) { + static const uint8_t round[4] = {DIR_UP, DIR_RIGHT, DIR_DOWN, DIR_LEFT}; + if (v->dir == -1) return round[hub_turns % 4]; + if (v->dir == -2) return (g_frame / 20) % 2 ? DIR_RIGHT : DIR_LEFT; + return v->dir; +} +static void vents_setup(void) { + for (int i = 0; i < NVENTS; i++) { + const Vent *v = &vents[i]; + if (v->room != g_room) continue; + Obj *o = obj_trigger(v->gx + 4, v->gy + 4, 12, 12, EV_VENT, ACTOR_VENT); + if (o) o->arg = (int16_t)i; + } +} + +/* ---------------------------------------------------------------- the lasers */ +/* the walkway's sweep to and fro across it: an orange one hurts if Frisk stands in it, a blue one if Frisk moves */ +typedef struct { + int16_t room, x, y, h, swing; + uint8_t blue; +} Laser; +static const Laser lasers[] = { + {ROOM_HT_LASERS, 3258, 3796, 62, 30, 0}, {ROOM_HT_LASERS, 3425, 3796, 62, 40, 1}, + {ROOM_HT_LASERS, 3567, 3796, 62, 30, 0}, {ROOM_HT_LASERS, 3717, 3796, 62, 40, 1}, + {ROOM_HT_LASERS, 3840, 3796, 62, 30, 0}, {ROOM_HT_LASERS, 3958, 3796, 62, 40, 1}, +}; +static int laser_cool; +static int laser_x(int i) { + const Laser *l = &lasers[i]; + int ph = (int)((g_frame * (l->blue ? 3 : 4) + (uint32_t)i * 40) % 256); + return l->x + l->swing * gfx_sin(ph) / 1024; +} +static void lasers_watch(void) { + if (laser_cool) laser_cool--; + if (event_running() || laser_cool) return; + for (int i = 0; i < (int)(sizeof lasers / sizeof lasers[0]); i++) { + const Laser *l = &lasers[i]; + if (l->room != g_room) continue; + int x = laser_x(i); + if (pl.x + 3 > x + 1 || pl.x + 17 < x - 1 || pl.y + 29 < l->y || pl.y + 20 > l->y + l->h) continue; + if (l->blue ? pl.moving : !pl.moving) { + event_start(EV_LASER_HIT, NULL); + return; + } + } +} +/* the blue one in front of the left puzzle, that Alphys switches off */ +#define BLUE_X 4380 +#define BLUE_Y 3584 +#define BLUE_W 40 + +void ht1_draw(void) { + if (world_room_info()->area != AREA_HOTLAND) return; + for (int i = 0; i < (int)(sizeof lasers / sizeof lasers[0]); i++) { + const Laser *l = &lasers[i]; + if (l->room != g_room) continue; + uint16_t c = l->blue ? rgb565(0x14A9FF) : rgb565(0xFCA600); + gfx_rect(laser_x(i) - 1 - cam_x, l->y - cam_y, 3, l->h, c, (g_frame / 2) % 2 ? 255 : 200); + } + if (g_room == ROOM_HT_HUB && !flag(F_HT_BLUE_OFF)) + gfx_rect(BLUE_X - cam_x, BLUE_Y - cam_y, BLUE_W, 3, rgb565(0x14A9FF), (g_frame / 2) % 2 ? 255 : 200); + /* the turning vents' arrows, over the map's */ + static const uint16_t arrow[4] = {SPR_VENT_D, SPR_VENT_U, SPR_VENT_L, SPR_VENT_R}; + for (int i = 0; i < NVENTS; i++) { + const Vent *v = &vents[i]; + if (v->room == g_room && v->dir < 0) gfx_sprite(arrow[vent_dir(v)], 0, v->gx - cam_x, v->gy - cam_y, 0, 255); + } +} + +void ht1_update(void) { + if (world_room_info()->area != AREA_HOTLAND) return; + belts_update(); + lasers_watch(); +} + +/* ---------------------------------------------------------------- the rooms */ +void ht1_setup(int room, int from) { + (void)from; + if (room < ROOM_HT_LABFRONT || room > ROOM_HT_COREVIEW) return; + vents_setup(); + switch (room) { + case ROOM_HT_LABFRONT: { + obj_save(1045, 6243, "* (The heat of Hotland fills you with determination.)"); + Obj *g = obj_deco(SPR_RGUARDS_OW, 1012, 6146, true); + if (g) g->name = ACTOR_GUARDS, obj_set_box(g, 0, 30, 74, 24); + obj_sign(1010, 6176, 80, 30, "* (Two Royal Guards stand in front of the elevator.)|* Nobody goes up.\n* Not until the captain's back."); + obj_sign(1290, 6150, 60, 30, "* (The Lab. Its door is open.)"); + break; + } + case ROOM_HT_RIVER: + obj_sign(1010, 6440, 50, 60, "* (Someone in a hood waits by a boat, humming.)\n* (Maybe they'll give you a ride some other time.)"); + break; + case ROOM_HT_LAB: + if (!flag(F_HT_LAB)) obj_trigger(1450, 5860, 16, 460, EV_HT_LAB, ACTOR_TRIGGER); + thing(2025, 6175, 34, 64, EV_HT_FRIDGE, ACTOR_ITEM, 0); + obj_sign(1775, 6140, 108, 90, "* (A huge screen.)\n* (It shows you, standing right here.)"); + obj_sign(2317, 6150, 50, 75, "* (The door is locked.)\n* (Someone inside is humming.)"); + obj_sign(1880, 5920, 60, 40, "* (Shelves stuffed with comics.)\n* (Most of them are about magical girls.)"); + obj_sign(2050, 5920, 90, 50, "* (A bed, half buried in figurines.)"); + break; + case ROOM_HT_MAGMA: + obj_save(2968, 4226, "* (The bubbling magma fills you with determination.)"); + break; + case ROOM_HT_PAN: + if (!flag(F_HT_PAN)) { + Obj *p = obj_deco(SPR_BURNTPAN, 3476, 4468, false); + if (p) p->name = ACTOR_ITEM; + Obj *t = obj_trigger(3472, 4462, 26, 26, EV_HT_ITEM, ACTOR_ITEM); + if (t) t->flags = OF_TALK; + } + break; + case ROOM_HT_LASERS: + if (!flag(F_HT_CALL_LASER)) { + Obj *t = obj_trigger(3180, 3780, 12, 90, EV_HT_CALL, ACTOR_TRIGGER); + if (t) t->arg = 0; + } + break; + case ROOM_HT_HUB: + if (!flag(F_HT_CALL_HUB)) { + Obj *t = obj_trigger(4770, 3700, 120, 12, EV_HT_CALL, ACTOR_TRIGGER); + if (t) t->arg = 1; + } + if (!flag(F_HT_BLUE_OFF)) { + Obj *b = obj_trigger(BLUE_X, BLUE_Y - 6, BLUE_W, 12, EV_NONE, ACTOR_LASER); + if (b) b->flags = OF_SOLID; + Obj *t = obj_trigger(4380, 3560, 60, 100, EV_HT_CALL, ACTOR_TRIGGER2); + if (t) t->arg = 2; + } + thing(4372, 3410, 34, 34, EV_SHOOT, ACTOR_ITEM, SHOOT_LEFT); + thing(5250, 3410, 34, 34, EV_SHOOT, ACTOR_ITEM, SHOOT_RIGHT); + if (!(flag(F_HT_PUZ_L) && flag(F_HT_PUZ_R))) { + Obj *d = obj_trigger(4796, 3398, 68, 16, EV_NONE, ACTOR_DOOR); + if (d) d->flags = OF_SOLID; + obj_sign(4796, 3412, 68, 20, "* (The door is locked.)\n* (Both puzzles have to be solved.)"); + } + obj_sign(4278, 3570, 26, 110, "* Phew, the laser's off!\n* ...now what do I do?|* I guess I'll keep standing here."); + obj_sign(5236, 3666, 60, 40, "* Did you catch Mettaton's show?\n* That human looked so real!|* His fan club is HUGE, you know."); + obj_sign(5286, 3432, 24, 24, "* My co-workers won't help me\n with this puzzle.|* Do I even WANT to go to work?"); + break; + case ROOM_HT_VENTISLE: + if (!flag(F_HT_CALL_ISLE)) { + Obj *t = obj_trigger(4800, 3150, 60, 12, EV_HT_CALL, ACTOR_TRIGGER); + if (t) t->arg = 3; + } + break; + case ROOM_HT_COOKING: + if (!flag(F_HT_COOK)) { + obj_mtt(5662, 3138); + obj_trigger(5330, 3000, 12, 260, EV_HT_COOK, ACTOR_TRIGGER); + } + obj_sign(5500, 3005, 110, 85, "* (The set's kitchen: a fridge, an oven, a counter.)"); + break; + case ROOM_HT_COREVIEW: + if (!flag(F_HT_CALL_CORE)) { + Obj *t = obj_trigger(6300, 3080, 12, 120, EV_HT_CALL, ACTOR_TRIGGER); + if (t) t->arg = 4; + } + thing(6950, 3070, 76, 48, EV_HT_ELEVATOR, ACTOR_DOOR, 0); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_lab(Ev *c) { + Obj *a = obj_get(ACTOR_ALPHYS), *m = obj_get(ACTOR_METTATON); + EV_BEGIN; + if (c->self) gone(c->self); + /* the Lab is dark; then the lights come on, and its big screen shows Frisk, right here */ + NARRATE("* (It's dark in here.)"); + g_shake = 2; + WAIT(20); + NARRATE("* (The lights come on.)\n* (A huge screen shows... you.)"); + a = obj_alphys(2212, 6275, DIR_LEFT); + WALK(a, pl.x + 70, pl.y + 29, 2); + SAY(FACE_ALPHYS, "* Oh! Oh no, you're already here!|* Um. H-hi! I'm Dr. Alphys.\n* The Royal Scientist.|* I've been, um, watching you.\n* On my cameras.|* Ever since you left the Ruins.\n* Your fights, your friends...|* It's been kind of amazing?|* I was supposed to stop you.\n* But, um... I'd rather help."); + /* and through the wall comes Mettaton */ + g_shake = 10; + m = obj_mtt(2215, 6232); + WAIT(20); + NARRATE("* GOOD EVENING, BEAUTIES!\n* WELCOME TO TODAY'S QUIZ SHOW!"); + BATTLE(FORM_MTT_QUIZ); + m = obj_get(ACTOR_METTATON); + WALK(m, m->x, m->y - 200, 6); + gone(obj_get(ACTOR_METTATON)); + set_flag(F_HT_LAB, 1); + a = obj_get(ACTOR_ALPHYS); + SAY(FACE_ALPHYS, "* S-sorry about him.\n* I built him, a long time ago.|* He was meant to be an\n entertainment robot...|* Oh! Your phone is SO old.\n* Let me fix it up!"); + NARRATE("* (Alphys upgrades your phone.)\n* (Now it opens a Dimensional Box, too.)"); + set_flag(F_HT_LAB, 2); + SAY(FACE_ALPHYS, "* There! It has a few new...\n features.|* I'll, um, call you if I can help.|* Now I have to go to the...\n bathroom. Good luck!"); + a = obj_get(ACTOR_ALPHYS); + WALK(a, 2342, 6225, 3); + gone(obj_get(ACTOR_ALPHYS)); + EV_END; +} + +static int ev_fridge(Ev *c) { + EV_BEGIN; + if (!flag(F_HT_NOODLES)) { + NARRATE("* (The fridge is full of instant noodles.)\n* (Take a cup?)@Take@Leave"); + if (CHOICE() == 0) { + if (!item_add(ITEM_INSTANT_NOODLES)) { + NARRATE("* (You're carrying too much.)"); + } else { + set_flag(F_HT_NOODLES, 1); + NARRATE("* (You got the Instant Noodles.)"); + } + } + } else { + NARRATE("* (Noodles, as far as the eye can see.)"); + } + EV_END; +} + +static int ev_item(Ev *c) { + EV_BEGIN; + if (!item_add(ITEM_BURNT_PAN)) { + NARRATE("* (You're carrying too much.)"); + return 1; + } + set_flag(F_HT_PAN, 1); + NARRATE("* (You got the Burnt Pan.)"); + gone(obj_get(ACTOR_ITEM)); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_vent(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + c->v[1] = vent_dir(&vents[c->v[0]]); + /* the steam blows Frisk over the lava */ + pl.dir = (uint8_t)c->v[1]; + if (vents[c->v[0]].dir == -1) hub_turns++; + PL_WALK(vents[c->v[0]].t[c->v[1]][0], vents[c->v[0]].t[c->v[1]][1], 7); + EV_END; +} + +static int ev_laser_hit(Ev *c) { + EV_BEGIN; + g_exclaim = 20; + WAIT(15); + BATTLE(FORM_LASERS); + /* (out of the beam's way) */ + pl.x = (int16_t)(pl.x - 26); + laser_cool = 60; + EV_END; +} + +/* Alphys's calls: 0 the lasers, 1 the puzzle hub, 2 the blue laser off, 3 the door already open, 4 by the CORE */ +static int ev_call(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (c->self) gone(c->self); + switch (c->v[0]) { + case 0: + set_flag(F_HT_CALL_LASER, 1); + SAY(FACE_ALPHYS, "* Ring...|* H-hi! It's Alphys!|* Lasers up ahead!\n* Orange ones: keep moving!|* Blue ones: stand still.\n* Like the attacks, see?|* Okay! Bye!"); + break; + case 1: + set_flag(F_HT_CALL_HUB, 1); + SAY(FACE_ALPHYS, "* Ring...|* It's Alphys again!|* That door north stays shut until\n both puzzles are done.|* The one on the right is easier.\n* Try it first!"); + break; + case 2: + set_flag(F_HT_BLUE_OFF, 1); + SAY(FACE_ALPHYS, "* Ring...|* Oh! A laser's blocking you?|* Hang on, hang on..."); + gone(obj_get(ACTOR_LASER)); + NARRATE("* (The blue laser switches off.)"); + SAY(FACE_ALPHYS, "* There! Got it!"); + break; + case 3: + set_flag(F_HT_CALL_ISLE, 1); + SAY(FACE_ALPHYS, "* Ring...|* Hi! So, those puzzles by the door:\n shoot the blocks out of the way,\n then...|* ...|* Oh. You already did them.|* Ha ha... never mind!\n* Bye!"); + break; + case 4: + set_flag(F_HT_CALL_CORE, 1); + SAY(FACE_ALPHYS, "* Ring...|* See that, far off? The CORE.\n* It powers the whole underground.|* The king's castle is past it.\n* We're almost there!|* D-don't worry. I've got your back."); + break; + } + EV_END; +} + +static int ev_shoot(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (flag(c->v[0] == SHOOT_LEFT ? F_HT_PUZ_L : F_HT_PUZ_R)) { + NARRATE("* (This puzzle is solved.)"); + return 1; + } + shoot_open(c->v[0]); + WAIT_UNTIL(g_mode == MODE_WORLD); + if (shoot_result()) { + set_flag(c->v[0] == SHOOT_LEFT ? F_HT_PUZ_L : F_HT_PUZ_R, 1); + if (flag(F_HT_PUZ_L) && flag(F_HT_PUZ_R)) { + gone(obj_get(ACTOR_DOOR)); + NARRATE("* (Somewhere, a door unlocks.)"); + } else { + NARRATE("* (One down.)"); + } + } + EV_END; +} + +static int ev_cook(Ev *c) { + Obj *m = obj_get(ACTOR_METTATON); + EV_BEGIN; + if (c->self) gone(c->self); + /* the lights: Mettaton's cooking show */ + NARRATE("* (The lights come on.)"); + NARRATE("* GREETINGS, BEAUTIES!\n* WELCOME TO COOKING WITH A KILLER ROBOT!|* TODAY'S RECIPE: A CAKE!\n* MY LOVELY ASSISTANT WILL FETCH\n THE SUGAR, MILK AND EGGS!"); + PL_WALK(5600, 3114, 3); + NARRATE("* (You bring the sugar, the milk\n and the eggs.)"); + NARRATE("* PERFECT! AND THE LAST INGREDIENT...\n* A HUMAN SOUL!"); + g_shake = 6; + SAY(FACE_ALPHYS, "* Ring...|* W-wait! Mettaton!\n* What about a vegan option?\n* For the viewers at home?"); + NARRATE("* ...OH, VERY WELL.\n* THE SUBSTITUTE IS ON THE COUNTER,\n OVER THERE. GO GET IT!"); + PL_WALK(5900, 3114, 3); + NARRATE("* (The counter starts to grow, taller and taller...)"); + SAY(FACE_ALPHYS, "* Your phone has a JETPACK button!\n* I'm turning it on... now!"); + BATTLE(FORM_MTT_COOK); + set_flag(F_HT_COOK, cook_won() ? 1 : 2); + m = obj_get(ACTOR_METTATON); + WALK(m, m->x, m->y - 200, 6); + gone(obj_get(ACTOR_METTATON)); + SAY(FACE_ALPHYS, "* Ring...|* Phew... are you okay?\n* Keep going! Right, and up!"); + EV_END; +} + +static int ev_elevator(Ev *c) { + EV_BEGIN; + NARRATE("* (An elevator up to the next floor.)\n* (Get in?)@Yes@No"); + if (CHOICE() == 1) return 1; + set_flag(F_HT_FLOOR1, 1); + sv.room = (int16_t)g_room, sv.x = 6910, sv.y = 3110; + save_write_auto(); + menu_end_open(); + EV_END; +} + +int ht1_event(Ev *c) { + switch (c->id) { + case EV_HT_LAB: return ev_lab(c); + case EV_HT_FRIDGE: return ev_fridge(c); + case EV_HT_ITEM: return ev_item(c); + case EV_VENT: return ev_vent(c); + case EV_LASER_HIT: return ev_laser_hit(c); + case EV_HT_CALL: return ev_call(c); + case EV_SHOOT: return ev_shoot(c); + case EV_HT_COOK: return ev_cook(c); + case EV_HT_ELEVATOR: return ev_elevator(c); + } + return -1; +} diff --git a/games/undertale/src/htmon.c b/games/undertale/src/htmon.c new file mode 100644 index 00000000..a29d5293 --- /dev/null +++ b/games/undertale/src/htmon.c @@ -0,0 +1,289 @@ +/* Hotland's monsters: stats and ACTs (from the Undertale Wiki's records of the game), their formations, where they + * come out and their attacks. Their words are short ones of our own. */ +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "monsters.h" +#include "res.h" +#include "world.h" + +/* ---------------------------------------------------------------- Vulkin: it means well (its lava doesn't heal) */ +static void act_vulkin(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { /* Criticize */ + snprintf(t, (size_t)cap, "* You tell Vulkin its lava isn't helping.\n* Vulkin looks crushed. It stops attacking."); + m->state = 2; + } else if (act == 1) { /* Encourage */ + snprintf(t, (size_t)cap, "* You tell Vulkin it's doing great.\n* Vulkin glows with pride... and heat."); + m->at = (int16_t)(m->at + 2), m->spare = true; + if (m->state != 2) m->state = 1; + } else { /* Hug */ + snprintf(t, (size_t)cap, "* You hug Vulkin.\n* It's very, very warm.\n* Your DEFENSE dropped."); + m->spare = true; + if (m->state != 2) m->state = 1; + b->df_loss += 5; + } +} +static const char *talk_vulkin(Battle *b, Monster *m) { + (void)b; + if (m->state == 2) return "(sniff)"; + if (m->state == 1) return "Feeling\nbetter?"; + static const char *const lines[] = {"I'll heal\nyou!", "Lava\nhelps!", "Warm\nhugs!", "Here, take\nsome lava!"}; + return lines[rnd_n(4)]; +} +static int attack_vulkin(Battle *b, Monster *m) { + (void)b; + if (m->state == 2) return ATK_NONE; + return rnd_n(2) ? ATK_VULKIN_THUNDER : ATK_VULKIN_FIRE; +} + +/* ---------------------------------------------------------------- Tsunderplane: come closer, through its green */ +static void act_tsunder(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { /* Flirt */ + snprintf(t, (size_t)cap, "* You flirt with Tsunderplane.\n* It turns away, blushing."); + } else { /* Approach */ + snprintf(t, (size_t)cap, "* You move a little closer.\n* Tsunderplane pretends not to notice."); + m->state = 1; + } +} +static const char *talk_tsunder(Battle *b, Monster *m) { + (void)b; + if (m->spare) return "I-it's not\nlike I like\nyou!!"; + if (m->state) return "Don't get\nthe wrong\nidea!"; + static const char *const lines[] = {"Hmph!", "Baka!", "Wh-what are\nyou looking\nat?", "As if!"}; + return lines[rnd_n(4)]; +} +static const char *flavor_tsunder(Battle *b, Monster *m) { + /* its green zones touched enough (four times, three with Vulkin by it): it can be spared */ + int need = 4; + for (int i = 0; i < b->nmon; i++) + if (b->mon[i].def == mon_def(MON_VULKIN) && !b->mon[i].gone) need = 3; + if (m->state && b->greens >= need) m->spare = true; + if (m->spare) return "* Tsunderplane is pretending it doesn't want to be spared."; + return NULL; +} +static int attack_tsunder(Battle *b, Monster *m) { + (void)b, (void)m; + return rnd_n(2) ? ATK_TSUNDER_BOMBS : ATK_TSUNDER_DIVE; +} + +/* ---------------------------------------------------------------- Pyrope: turn up the heat */ +static void act_pyrope(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { /* Heat Up */ + m->state++; + if (m->state >= 2) snprintf(t, (size_t)cap, "* You rub your hands together.\n* The room is sweltering!"), m->spare = true; + else snprintf(t, (size_t)cap, "* You rub your hands together.\n* It's getting warmer..."); + } else if (act == 1) { /* Cool Down */ + snprintf(t, (size_t)cap, "* You blow on Pyrope.\n* Its flame shrinks. Its ATTACK dropped!"); + m->at = (int16_t)max_i(1, m->at - 2); + } else { /* Invite */ + snprintf(t, (size_t)cap, "* You invite Pyrope to hang out.\n* It just wants to be warmer."); + } +} +static const char *talk_pyrope(Battle *b, Monster *m) { + (void)b; + if (m->spare) return "Toasty!"; + static const char *const lines[] = {"Brr...", "Hotter!", "I'm all\nfired up!", "Got a\nlight?"}; + return lines[rnd_n(4)]; +} +static int attack_pyrope(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_PYROPE_BOMBS : ATK_PYROPE_ROPE; } + +static const MonDef ht_defs[MON_COUNT - MON_WF_COUNT] = { + [MON_VULKIN - MON_WF_COUNT] = { + .name = "Vulkin", .spare_gold = 40, .hp = 20, .at = 8, .df = 0, .exp = 70, .gold = 40, .spr_idle = SPR_VULKIN_B, + .spr_hurt = SPR_VULKIN_HURT, .idle_speed = 6, .check = "Thinks its lava makes people feel better.", + .acts = {"Criticize", "Encourage", "Hug"}, .nacts = 3, + .neutral = {"* Vulkin is making coffee in its crater.", "* Vulkin hums a warm little song.", "* Smells like a campfire."}, + .low_hp = "* Vulkin's lava is cooling.", .act = act_vulkin, .talk = talk_vulkin, .attack = attack_vulkin}, + [MON_TSUNDERPLANE - MON_WF_COUNT] = { + .name = "Tsunderplane", .spare_gold = 60, .hp = 80, .at = 8, .df = 6, .exp = 95, .gold = 60, .spr_idle = SPR_TSUNDER_B, + .spr_hurt = SPR_TSUNDER_B, .idle_speed = 6, .check = "Acts mean, but maybe it secretly likes you?", + .acts = {"Flirt", "Approach"}, .nacts = 2, + .neutral = {"* Tsunderplane shakes its nose at you.", "* Tsunderplane is looking the other way.", + "* Smells like jet fuel and perfume."}, + .low_hp = "* Tsunderplane's engine is smoking.", .act = act_tsunder, .talk = talk_tsunder, .attack = attack_tsunder, + .flavor = flavor_tsunder}, + [MON_PYROPE - MON_WF_COUNT] = { + .name = "Pyrope", .spare_gold = 45, .hp = 110, .at = 8, .df = 1, .exp = 80, .gold = 30, .spr_idle = SPR_PYROPE_B, + .spr_hurt = SPR_PYROPE_HURT, .idle_speed = 5, .dy = 18, .check = "A troublemaker who's never warm enough.", + .acts = {"Heat Up", "Cool Down", "Invite"}, .nacts = 3, + .neutral = {"* Pyrope is protected by its winning smile.", "* Pyrope crackles.", "* Smells like a burnt rope."}, + .act = act_pyrope, .talk = talk_pyrope, .attack = attack_pyrope}, + [MON_METTATON - MON_WF_COUNT] = { + .name = "Mettaton", .hp = 9999, .at = 0, .df = 0, .spr_idle = SPR_MTT_B, .spr_hurt = SPR_MTT_B, .idle_speed = 6, + .check = "A robot with a TV show.", .flags = MF_BOSS | MF_NOT_KILLABLE}, +}; +const MonDef *ht_mon_def(int id) { return &ht_defs[id - MON_WF_COUNT]; } + +static const Form ht_forms[FORM_COUNT - FORM_WF_COUNT] = { + [FORM_VULKIN - FORM_WF_COUNT] = {{MON_VULKIN}, 1, "* Vulkin strolls in, happy as can be."}, + [FORM_TSUNDERPLANE - FORM_WF_COUNT] = {{MON_TSUNDERPLANE}, 1, "* Tsunderplane gets in the way!\n* Not on purpose or anything."}, + [FORM_TSUNDER_VULKIN - FORM_WF_COUNT] = {{MON_VULKIN, MON_TSUNDERPLANE}, 2, + "* Tsunderplane and Vulkin show up.\n* (Not that Tsunderplane cares.)"}, + [FORM_PYROPE - FORM_WF_COUNT] = {{MON_PYROPE}, 1, "* Pyrope bounces in, burning bright!"}, + [FORM_PYROPE2 - FORM_WF_COUNT] = {{MON_PYROPE, MON_PYROPE}, 2, "* Two Pyropes hop in.\n* They're up to something."}, + [FORM_MTT_QUIZ - FORM_WF_COUNT] = {{MON_METTATON}, 1, ""}, + [FORM_MTT_COOK - FORM_WF_COUNT] = {{MON_METTATON}, 1, ""}, + [FORM_LASERS - FORM_WF_COUNT] = {{MON_METTATON}, 1, ""}, +}; +const Form *ht_form(int form) { return &ht_forms[form - FORM_WF_COUNT]; } + +/* random encounters: past the Lab (the belts and the Magma Chamber) */ +int ht_encounter(int room) { + switch (room) { + case ROOM_HT_BELT1: case ROOM_HT_BELT2: case ROOM_HT_MAGMA: { + static const uint8_t pool[] = {FORM_VULKIN, FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2}; + return pool[rnd_n(5)]; + } + } + return -1; +} + +/* ---------------------------------------------------------------- the attacks */ +static int bx0(void) { return bt.x0 + 3; } +static int bx1(void) { return bt.x1 - 3; } +static int by0(void) { return bt.y0 + 3; } +static int by1(void) { return bt.y1 - 3; } +#define P(v) ((v) * FX) +static Bullet *shot(uint16_t spr, int x, int y, int vx, int vy) { return bullet_new(spr, P(x), P(y), vx, vy); } + +/* Vulkin: a thundercloud over the board drops bolts that spread as they fall (it drifts, sometimes) */ +static void atk_vulkin_thunder(int t) { + static Bullet *cloud; + if (t == 0) { + cloud = shot(SPR_CLOUD, board_cx(), by0() + 8, rnd_n(2) ? P(1) / 2 : 0, 0); + if (cloud) cloud->flags |= BF_HARMLESS | BF_NOCLIP, cloud->life = 150; + } + if (cloud && cloud->kind != BK_NONE && (cloud->x < P(bx0() + 14) || cloud->x > P(bx1() - 14))) cloud->vx = -cloud->vx; + if (cloud && cloud->kind != BK_NONE && t < 130 && t % 20 == 10) { + for (int k = -1; k <= 1; k++) { + Bullet *b = bullet_new(SPR_BOLT, cloud->x, cloud->y + P(6), k * P(1) / 2, P(2)); + if (b) b->r = 2, b->flags |= BF_NOCLIP; + } + } +} +/* and fire: two columns at the sides throw fireballs at the middle, and they fall back */ +static void atk_vulkin_fire(int t) { + if (t < 130 && t % 16 == 0) { + bool left = (t / 16) % 2; + int y = by0() + 8 + rnd_n(by1() - by0() - 16); + Bullet *b = shot(SPR_FIREBULLET, left ? bx0() + 2 : bx1() - 2, y, (left ? 1 : -1) * P(3), 0); + if (b) b->r = 4, b->ax = (left ? -1 : 1) * 3, b->anim = 3, b->flags |= BF_NOCLIP, b->life = 120; + } +} + +/* Tsunderplane: little planes cross the board dropping bombs (a bomb at the bottom sends smoke all the way up); + * approached, its planes come wrapped in green: touch it */ +static int tsunder_approached(void) { + for (int i = 0; i < bt.nmon; i++) + if (bt.mon[i].def == mon_def(MON_TSUNDERPLANE) && bt.mon[i].state && !bt.mon[i].gone) return 1; + return 0; +} +static void green_wrap(Bullet *p) { + Bullet *g = bullet_new(SPR_ORB, p->x, p->y - P(9), p->vx, p->vy); + if (g) g->color = BC_GREEN, g->dmg = 0, g->r = 4, g->flags |= BF_NOCLIP, g->life = p->life; +} +static void atk_tsunder_bombs(int t) { + if (t < 120 && t % 30 == 0) { + bool left = (t / 30) % 2; + int y = by0() + 6; + Bullet *p = shot(SPR_PLANE, left ? bx0() - 10 : bx1() + 10, y, (left ? 1 : -1) * P(2), 0); + if (p) p->r = 4, p->flags |= BF_NOCLIP, p->life = 110, p->angle = left ? 0 : 128; + if (p && tsunder_approached()) green_wrap(p); + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind == BK_NONE) continue; + if (b->spr == SPR_PLANE && b->t % 24 == 12 && b->x > P(bx0()) && b->x < P(bx1())) { + Bullet *d = bullet_new(SPR_BOMB, b->x, b->y + P(6), 0, P(1)); + if (d) d->kind = BK_GRAVITY, d->ay = 2, d->r = 3, d->a = 1; + } + if (b->spr == SPR_BOMB && b->a == 1 && b->y > P(by1() - 4)) { + /* the smoke: a column up through the whole board, a moment */ + int x = b->x / FX; + b->kind = BK_NONE; + for (int y = by1() - 4; y > by0(); y -= 9) { + Bullet *s = shot(SPR_ORB, x, y, 0, 0); + if (s) s->r = 3, s->life = 18, s->alpha = 170; + } + } + } +} +/* or big planes dive from the top, a trail of smoke behind (it moves across, unless approached) */ +static void atk_tsunder_dive(int t) { + if (t < 120 && t % 40 == 0) { + int x = bx0() + 10 + rnd_n(bx1() - bx0() - 20); + Bullet *p = shot(SPR_PLANE, x, by0() - 10, 0, P(2)); + if (p) p->r = 5, p->flags |= BF_NOCLIP, p->life = 80, p->angle = 64; + if (p && tsunder_approached()) green_wrap(p); + } + bool still = tsunder_approached(); + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind == BK_NONE || b->spr != SPR_PLANE || b->angle != 64 || b->t % 8) continue; + Bullet *s = bullet_new(SPR_ORB, b->x, b->y - P(8), still ? 0 : (b->t % 16 ? P(1) : -P(1)), 0); + if (s) s->r = 2, s->life = 50, s->alpha = 150; + } +} + +/* Pyrope: bombs come from every side, bounce about and burst at the board's edges; or its rope of fire runs across + * (orange: run through it) */ +static void atk_pyrope_bombs(int t) { + if (t < 110 && t % 22 == 0) { + int side = rnd_n(4); + int x = side < 2 ? bx0() + 8 + rnd_n(bx1() - bx0() - 16) : side == 2 ? bx0() : bx1(); + int y = side >= 2 ? by0() + 8 + rnd_n(by1() - by0() - 16) : side == 0 ? by0() : by1(); + int vx = side == 2 ? P(2) : side == 3 ? -P(2) : (rnd_n(2) ? P(1) : -P(1)); + int vy = side == 0 ? P(2) : side == 1 ? -P(2) : (rnd_n(2) ? P(1) : -P(1)); + Bullet *b = shot(SPR_BOMB, x, y, vx, vy); + if (b) b->kind = BK_SCRIPT, b->r = 3, b->a = 3, b->flags |= BF_NOCLIP; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_BOMB) continue; + b->x += b->vx, b->y += b->vy, b->t++; + bool hit_x = b->x < P(bx0() + 2) || b->x > P(bx1() - 2), hit_y = b->y < P(by0() + 2) || b->y > P(by1() - 2); + if (b->t > 8 && (hit_x || hit_y)) { + if (--b->a > 0) { + if (hit_x) b->vx = -b->vx; + if (hit_y) b->vy = -b->vy; + continue; + } + /* it bursts: sparks */ + b->kind = BK_NONE; + for (int k = 0; k < 4; k++) { + static const int8_t sx[4] = {1, -1, 1, -1}, sy[4] = {1, 1, -1, -1}; + Bullet *s = bullet_new(SPR_ORB, b->x, b->y, sx[k] * P(1), sy[k] * P(1)); + if (s) s->r = 2, s->life = 30; + } + } + } +} +static void atk_pyrope_rope(int t) { + if (t < 120 && t % 40 == 0) { + Bullet *f = shot(SPR_FIREBULLET, bx1() + 6, board_cy(), -P(2) - P(t / 40) / 2, 0); + if (f) f->color = BC_ORANGE, f->flags |= BF_BOX | BF_NOCLIP, f->w = 8, f->h = (int16_t)(by1() - by0()), f->life = 120, f->anim = 3; + } +} + +int ht_attack_length(int atk) { (void)atk; return 160; } + +void ht_attack_run(Battle *b, int atk, int t) { + (void)b; + if (t < 0) { + board_set(atk == ATK_TSUNDER_BOMBS || atk == ATK_PYROPE_ROPE ? 150 : 120, 100); + soul_set_mode(SOUL_RED); + return; + } + switch (atk) { + case ATK_VULKIN_THUNDER: atk_vulkin_thunder(t); break; + case ATK_VULKIN_FIRE: atk_vulkin_fire(t); break; + case ATK_TSUNDER_BOMBS: atk_tsunder_bombs(t); break; + case ATK_TSUNDER_DIVE: atk_tsunder_dive(t); break; + case ATK_PYROPE_BOMBS: atk_pyrope_bombs(t); break; + case ATK_PYROPE_ROPE: atk_pyrope_rope(t); break; + } +} diff --git a/games/undertale/src/htshows.c b/games/undertale/src/htshows.c new file mode 100644 index 00000000..bee69ab7 --- /dev/null +++ b/games/undertale/src/htshows.c @@ -0,0 +1,256 @@ +/* Mettaton's shows, and a laser's alarm: battles that play their own way (battle.c's scripts). + * + * The quiz: Mettaton asks, four answers wait in the box, and the SOUL picks one (Z over it) before the time runs + * out; Alphys, beside the stage, signals the right one. A wrong answer halves Frisk's HP (never below 1). + * The cooking show's jetpack: Frisk flies up the counter as it grows, dodging what Mettaton throws, before a minute + * is up. The alarm: three lasers, orange or blue, sweep through the SOUL. (As the Undertale Wiki describes them; + * the questions and what's said are ours.) */ +#include +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "monsters.h" +#include "res.h" +#include "text.h" + +#define P(v) ((v) * FX) + +static void bubble(const char *s) { + writer_start(&bt.bw, s, 0, 0, FONT_SMALL); + bt.bw.line_h = 9; +} +static void draw_bubble_at(int bx, int by, int w, int h) { + gfx_rect(bx, by, w, h, C_WHITE, 255); + gfx_rect(bx - 6, by + 16, 6, 5, C_WHITE, 255); + bt.bw.x = bx + 5, bt.bw.y = by + 5; + writer_draw(&bt.bw, C_BLACK); +} +static void draw_box(void) { + gfx_rect(bt.x0, bt.y0, bt.x1 - bt.x0, bt.y1 - bt.y0, C_WHITE, 255); + gfx_rect(bt.x0 + 2, bt.y0 + 2, bt.x1 - bt.x0 - 4, bt.y1 - bt.y0 - 4, C_BLACK, 255); +} +static void draw_soul(void) { + if (!bt.inv || (bt.inv / 2) % 2) gfx_sprite(SPR_HEART, 0, soul_x(), soul_y(), 0, 255); +} +static void draw_mettaton(int x, int y) { + gfx_sprite(SPR_MTT_B, (int)(g_frame / 6), x, y, 0, 255); +} +static void tick(uint32_t keys) { + if (bt.inv) bt.inv--; + soul_update(keys); + bullets_update(); + soul_hit_test(); + if (sv.hp < 1) sv.hp = 1; /* (these never kill) */ +} + +/* ---------------------------------------------------------------- the quiz */ +typedef struct { + const char *q; + const char *a[4]; + int right; +} Question; +static const Question quiz[] = { + {"First, an\neasy one!\nWhat color\nis a human\nSOUL?", {"Blue", "Red", "Green", "Plaid"}, 1}, + {"Who leads\nthe Royal\nGuard?", {"Papyrus", "Sans", "Undyne", "A dog"}, 2}, + {"How many\nhuman SOULs\ndoes the king\nneed?", {"Five", "Six", "Seven", "A dozen"}, 2}, + {"Quick math!\n7 x 6 - 24.5\nis...?", {"17.5", "16.5", "18", "42"}, 0}, + {"Which did\nyou NOT see\nin Waterfall?", {"Echo flowers", "Temmies", "Snowmen", "Bridge seeds"}, 2}, + {"And who's\nthe star of\nthis show?", {"You", "Alphys", "The crowd", "Mettaton"}, 3}, +}; +#define NQ ((int)(sizeof quiz / sizeof quiz[0])) +enum { QZ_HELLO, QZ_ASK, QZ_SAY, QZ_BYE }; +/* bt.state: [0] step, [1] the question, [2] frames left to answer, [3] wrong answers */ +#define QZ_TIME 450 + +static void quiz_ask(void) { + bt.state[0] = QZ_ASK, bt.state[2] = QZ_TIME; + bubble(quiz[bt.state[1]].q); + bt.sx = P(board_cx()), bt.sy = P(board_cy()); +} +static int zone_at(int x, int y) { + /* the four answers, two by two in the box */ + int col = x >= board_cx(), row = y >= board_cy(); + return row * 2 + col; +} +void quiz_start(void) { + bt.scripted = true; + bt.state[0] = QZ_HELLO, bt.state[1] = 0, bt.state[3] = 0; + board_set_rect(40, 128, 280, 194); + bt.x0 = bt.tx0, bt.y0 = bt.ty0, bt.x1 = bt.tx1, bt.y1 = bt.ty1; + bt.sx = P(board_cx()), bt.sy = P(board_cy()); + bubble("Welcome,\nbeauties, to\nthe quiz show\nof the\nunderground!|Answer right,\nand you win!\nAnswer wrong,\nand...|Well! Let's\nnot spoil the\nsurprise!"); +} +void quiz_update(uint32_t keys, uint32_t pressed) { + switch (bt.state[0]) { + case QZ_HELLO: + case QZ_SAY: + if (!writer_update(&bt.bw, pressed)) { + if (bt.state[0] == QZ_SAY && bt.state[1] >= NQ) { + bt.state[0] = QZ_BYE; + bubble("Hmph! Too\neasy, with a\ncertain doctor\nwaving the\nanswers!|Oh well. That\nwas only our\nfirst episode!|Until next\ntime, darlings!"); + } else { + quiz_ask(); + } + } + break; + case QZ_ASK: { + writer_update(&bt.bw, 0); + tick(keys); + /* (a Z left over from the talk doesn't answer: the question first) */ + bool chose = ((pressed & K_Z) && bt.state[2] < QZ_TIME - 20) || --bt.state[2] <= 0; + if (!chose) break; + int z = bt.state[2] <= 0 ? -1 : zone_at(soul_x(), soul_y()); + const Question *q = &quiz[bt.state[1]]; + if (z == q->right) { + static const char *const yes[] = {"Correct!\nHow\nthrilling!", "Right\nagain!", "Ooh, you're\ngood!"}; + bubble(yes[bt.state[1] % 3]); + } else { + sv.hp = (int16_t)max_i(1, sv.hp / 2); + bt.inv = 30, bt.state[3]++; + bubble(z < 0 ? "Time's up!\nThat's a\nshock for\nyou!" : "Wrong!\nThat's a\nshock for\nyou!"); + /* (worn out: straight to the end) */ + if (sv.hp <= 1) bt.state[1] = NQ - 1; + } + bt.state[1]++; + bt.state[0] = QZ_SAY; + break; + } + case QZ_BYE: + if (!writer_update(&bt.bw, pressed)) bt.result = BR_SCRIPTED; + break; + } +} +void quiz_draw(void) { + gfx_sprite(SPR_BATTLEBG, 0, 0, 0, 0, 255); + draw_mettaton(120, 118); + draw_bubble_at(182, 18, 104, 76); + draw_box(); + if (bt.state[0] == QZ_ASK) { + const Question *q = &quiz[bt.state[1]]; + static const char *const letter[4] = {"A", "B", "C", "D"}; + for (int i = 0; i < 4; i++) { + int x = (i % 2 ? board_cx() + 6 : bt.x0 + 8), y = (i / 2 ? board_cy() + 6 : bt.y0 + 8); + char s[32]; + snprintf(s, sizeof s, "%s %s", letter[i], q->a[i]); + bool on = zone_at(soul_x(), soul_y()) == i; + gfx_text(FONT_SMALL, x, y, s, on ? C_YELLOW : C_WHITE, 255); + } + gfx_rect(board_cx(), bt.y0 + 2, 1, bt.y1 - bt.y0 - 4, rgb565(0x404040), 255); + gfx_rect(bt.x0 + 2, board_cy(), bt.x1 - bt.x0 - 4, 1, rgb565(0x404040), 255); + char s[8]; + snprintf(s, sizeof s, "%d", (bt.state[2] + 14) / 15); + gfx_text(FONT_SMALL, bt.x0 - 22, bt.y0 + 2, s, C_WHITE, 255); + /* Alphys, off to the side, signals the answer */ + if (bt.state[2] < QZ_TIME - 60) { + gfx_sprite(SPR_FACE_ALPHYS, 0, 282, 104, 0, 255); + gfx_text(FONT_MAIN, 300, 92, letter[q->right], C_YELLOW, 255); + } + draw_soul(); + } + battle_draw_hud(); +} + +/* ---------------------------------------------------------------- the cooking show: the jetpack */ +/* bt.state: [0] step, [1] how high (0..CK_TOP), [2] frames left */ +enum { CK_HELLO, CK_FLY, CK_BYE }; +#define CK_TOP 600 +#define CK_TIME 1800 +void cook_start(void) { + bt.scripted = true; + bt.state[0] = CK_HELLO, bt.state[1] = 0, bt.state[2] = CK_TIME; + board_set_rect(100, 40, 220, 194); + bt.x0 = bt.tx0, bt.y0 = bt.ty0, bt.x1 = bt.tx1, bt.y1 = bt.ty1; + bt.sx = P(board_cx()), bt.sy = P(bt.y1 - 14); + bubble("The counter's\ngrowing! Get\nthe substitute\nin under a\nminute!|Use your\nphone's\nJETPACK!\nUp, up and\naway!"); +} +void cook_update(uint32_t keys, uint32_t pressed) { + switch (bt.state[0]) { + case CK_HELLO: + if (!writer_update(&bt.bw, pressed)) bt.state[0] = CK_FLY, bt.t = 0; + break; + case CK_FLY: { + int hp = sv.hp; + tick(keys); + /* what Mettaton throws down (faster as the counter goes up) */ + if (bt.t % max_i(8, 22 - bt.state[1] / 50) == 0) { + Bullet *b = bullet_new(rnd_n(3) ? SPR_ORB : SPR_BOMB, P(bt.x0 + 8 + rnd_n(bt.x1 - bt.x0 - 16)), P(bt.y0 + 2), 0, + P(2) + P(bt.state[1]) / 300); + if (b) b->r = 4, b->dmg = 3, b->flags |= BF_NOCLIP; + } + /* up the jetpack goes, set back by every hit */ + bt.state[1] = (int16_t)min_i(CK_TOP, bt.state[1] + 1 - (sv.hp < hp ? 60 : 0)); + if (bt.state[1] < 0) bt.state[1] = 0; + if (bt.state[1] >= CK_TOP) { + bt.state[0] = CK_BYE, bt.state[3] = 1; + bullets_clear(); + bubble("You made it!\nThe vegan\nsubstitute!|...and I'd\nalready baked\nthe cake.\nTa-da!|That's our\nshow! Ciao!"); + } else if (--bt.state[2] <= 0) { + bt.state[0] = CK_BYE, bt.state[3] = 0; + bullets_clear(); + bubble("Oh dear,\nout of time!|...but we're\nat the break.\nNo killing\nwithout an\naudience!|Ciao for now!"); + } + break; + } + case CK_BYE: + if (!writer_update(&bt.bw, pressed)) bt.result = BR_SCRIPTED; + break; + } +} +int cook_won(void) { return bt.state[3]; } +void cook_draw(void) { + gfx_sprite(SPR_BATTLEBG, 0, 0, 0, 0, 255); + draw_mettaton(272, 118); + draw_box(); + gfx_clip(bt.x0 + 2, bt.y0 + 2, bt.x1 - bt.x0 - 4, bt.y1 - bt.y0 - 4); + /* the counter's side scrolling past: lines going down as Frisk goes up */ + for (int k = 0; k < 8; k++) { + int y = bt.y0 + ((k * 20 + bt.state[1]) % 160); + gfx_rect(bt.x0 + 2, y, bt.x1 - bt.x0 - 4, 1, rgb565(0x303030), 255); + } + bullets_draw(); + if (bt.state[0] == CK_FLY) draw_soul(); + gfx_clip_all(); + /* how far up, and the time */ + int h = (bt.y1 - bt.y0) * bt.state[1] / CK_TOP; + gfx_rect(bt.x0 - 14, bt.y0, 6, bt.y1 - bt.y0, rgb565(0x404040), 255); + gfx_rect(bt.x0 - 14, bt.y1 - h, 6, h, C_YELLOW, 255); + char s[8]; + snprintf(s, sizeof s, "%d", (bt.state[2] + 29) / 30); + gfx_text(FONT_MAIN, bt.x0 - 34, bt.y0 - 2, s, C_WHITE, 255); + if (bt.state[0] != CK_FLY) draw_bubble_at(182, 18, 104, 76); + battle_draw_hud(); +} + +/* ---------------------------------------------------------------- the lasers' alarm */ +void lasers_start(void) { + bt.scripted = true; + bt.state[0] = 0; + board_set(120, 60); + bt.x0 = bt.tx0, bt.y0 = bt.ty0, bt.x1 = bt.tx1, bt.y1 = bt.ty1; + bt.sx = P(board_cx()), bt.sy = P(board_cy()); + bt.t = 0; +} +void lasers_update(uint32_t keys, uint32_t pressed) { + (void)pressed; + tick(keys); + if (bt.t % 40 == 10 && bt.t < 100) { + Bullet *b = bullet_new(SPR_ORB, P(bt.x1 + 4), P(board_cy()), -P(4), 0); + if (b) b->color = rnd_n(2) ? BC_ORANGE : BC_BLUE, b->flags |= BF_BOX | BF_NOCLIP, b->w = 3, + b->h = (int16_t)(bt.y1 - bt.y0), b->dmg = 3, b->life = 60; + } + if (bt.t > 170) bt.result = BR_SCRIPTED; +} +void lasers_draw(void) { + gfx_rect(0, 0, SCREEN_W, SCREEN_H, C_BLACK, 255); + draw_box(); + for (int i = 0; i < MAX_BULLETS; i++) { + const Bullet *b = &bullets[i]; + if (b->kind == BK_NONE || !(b->flags & BF_BOX)) continue; + int x = b->x / FX; + if (x < bt.x0 + 2 || x > bt.x1 - 2) continue; + gfx_rect(x - 1, bt.y0 + 2, 3, bt.y1 - bt.y0 - 4, b->color == BC_ORANGE ? rgb565(0xFCA600) : rgb565(0x14A9FF), 255); + } + draw_soul(); + battle_draw_hud(); +} diff --git a/games/undertale/src/items.c b/games/undertale/src/items.c index 2da369ea..db8d48d6 100644 --- a/games/undertale/src/items.c +++ b/games/undertale/src/items.c @@ -52,6 +52,10 @@ static const ItemInfo items[ITEM_COUNT] = { [ITEM_TORN_NOTEBOOK] = {"Torn Notebook", "TornNotbo", IT_WEAPON, 0, 2, 0, "An old notebook, torn up.\n* It doesn't hit very hard.", "", 50}, [ITEM_TEMMIE_FLAKES] = {"Temmie Flakes", "TemFlakes", IT_FOOD, 2, 0, 0, "Bits of paper, sold as\n food.", "* You eat the Temmie Flakes.", 2}, + [ITEM_BURNT_PAN] = {"Burnt Pan", "BurntPan", IT_WEAPON, 0, 10, 0, + "A pan, burnt black. Hits\n hard, every time.\n* Food heals 4 HP more with it.", "", 50}, + [ITEM_INSTANT_NOODLES] = {"Instant Noodles", "InstaNood", IT_FOOD, 15, 0, 0, "A cup of noodles, quick to\n make.", + "* You eat the Instant Noodles.\n* They're a little crunchy.", 2}, }; const ItemInfo *item_info(int id) { return &items[id >= 0 && id < ITEM_COUNT ? id : 0]; } @@ -130,7 +134,7 @@ void item_use(int slot, char *out, int cap, int in_battle) { } else if (it->heal == 998) { if (sv.hp < sv.maxhp - 1) sv.hp = (int16_t)(sv.maxhp - 1); } else { - heal(it->heal, out + n, cap - n); + heal(it->heal + (sv.weapon == ITEM_BURNT_PAN ? 4 : 0), out + n, cap - n); } (void)in_battle; return; diff --git a/games/undertale/src/items.h b/games/undertale/src/items.h index d2851666..a9b5ec8c 100644 --- a/games/undertale/src/items.h +++ b/games/undertale/src/items.h @@ -34,6 +34,9 @@ enum { ITEM_CLOUDY_GLASSES, ITEM_TORN_NOTEBOOK, ITEM_TEMMIE_FLAKES, + /* Hotland */ + ITEM_BURNT_PAN, + ITEM_INSTANT_NOODLES, ITEM_COUNT }; enum { IT_FOOD, IT_WEAPON, IT_ARMOR, IT_SPECIAL }; diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index 67855c4e..f02971c1 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -11,6 +11,7 @@ #include "menu.h" #include "res.h" #include "save.h" +#include "shop.h" #include "text.h" #include "world.h" @@ -146,6 +147,15 @@ static void name_input(uint32_t pressed) { /* ---------------------------------------------------------------- the C menu */ enum { M_MAIN, M_ITEMS, M_ITEM_ACT, M_STAT, M_CELL }; +/* the CELL's list: Toriel's phone (0); Papyrus's (1) once he gave his number; the Dimensional Box (2) once Alphys + * upgraded the phone */ +static int cell_entries(int *calls) { + int n = 0; + calls[n++] = 0; + if (flag(F_PAP_DATE) == 2) calls[n++] = 1; + if (flag(F_HT_LAB) >= 2) calls[n++] = 2; + return n; +} void menu_open(void) { g_mode = MODE_MENU; @@ -219,14 +229,18 @@ static void c_menu_input(uint32_t pressed) { if (pressed & (K_X | K_Z)) st = M_MAIN; break; case M_CELL: { - int n = flag(F_PAP_DATE) == 2 ? 2 : 1; /* Toriel's phone; Papyrus's once he gave it */ + int calls[3], n = cell_entries(calls); if (pressed & K_UP) sub = (sub + n - 1) % n; if (pressed & K_DOWN) sub = (sub + 1) % n; if (pressed & K_X) st = M_MAIN; if (pressed & K_Z) { menu_close(); - event_start(EV_PHONE_MENU, NULL); - event_cur_arg(sub); + if (calls[sub] == 2) { + box_open(); + } else { + event_start(EV_PHONE_MENU, NULL); + event_cur_arg(calls[sub]); + } } break; } @@ -301,9 +315,10 @@ static void draw_c_menu(void) { } } if (st == M_CELL) { - panel(94, 26, 173, 60); - gfx_text(FONT_MENU, 116, 38, "Toriel's Phone", C_WHITE, 255); - if (flag(F_PAP_DATE) == 2) gfx_text(FONT_MENU, 116, 56, "Papyrus's Phone", C_WHITE, 255); + static const char *const names[3] = {"Toriel's Phone", "Papyrus's Phone", "Dimensional Box"}; + int calls[3], n = cell_entries(calls); + panel(94, 26, 173, 24 + 18 * n); + for (int i = 0; i < n; i++) gfx_text(FONT_MENU, 116, 38 + 18 * i, names[calls[i]], C_WHITE, 255); gfx_sprite(SPR_HEART, 0, 107, 44 + sub * 18, 0, 255); } } @@ -368,7 +383,7 @@ void menu_gameover_open(void) { void menu_end_open(void) { g_mode = MODE_END; t = 0; - writer_start(&w, "Out of Waterfall at last,\ninto the heat of Hotland...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); + writer_start(&w, "Up the elevator, on through\nthe heat of Hotland...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h index 8fd40598..d45eb19e 100644 --- a/games/undertale/src/monsters.h +++ b/games/undertale/src/monsters.h @@ -10,7 +10,9 @@ enum { MON_SNOWDRAKE = MON_RUINS_COUNT, MON_ICECAP, MON_GYFTROT, MON_DOGGO, MON_LESSERDOG, MON_DOGAMY, MON_DOGARESSA, MON_GREATERDOG, MON_JERRY, MON_CHILLDRAKE, MON_GLYDE, MON_PAPYRUS, MON_SNOW_COUNT, /* Waterfall (wfmon.c) */ - MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_MAD_DUMMY, MON_TEMMIE, MON_UNDYNE, MON_COUNT + MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_MAD_DUMMY, MON_TEMMIE, MON_UNDYNE, MON_WF_COUNT, + /* Hotland (htmon.c) */ + MON_VULKIN = MON_WF_COUNT, MON_TSUNDERPLANE, MON_PYROPE, MON_METTATON, MON_COUNT }; /* formations: who is fought */ @@ -24,7 +26,10 @@ enum { FORM_GREATERDOG, FORM_PAPYRUS, FORM_SNOW_COUNT, /* Waterfall */ FORM_AARON = FORM_SNOW_COUNT, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, - FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE, FORM_COUNT + FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE, FORM_WF_COUNT, + /* Hotland (Mettaton's shows and a laser's alarm play their own way: htshows.c) */ + FORM_VULKIN = FORM_WF_COUNT, FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2, FORM_MTT_QUIZ, + FORM_MTT_COOK, FORM_LASERS, FORM_COUNT }; enum { @@ -39,7 +44,10 @@ enum { /* Waterfall */ ATK_AARON_ARMS = ATK_SNOW_COUNT, ATK_AARON_SWEAT, ATK_WOSHUA_DROPS, ATK_WOSHUA_BUBBLES, ATK_MOLDBYGG_HOPS, ATK_MOLDBYGG_RAIN, ATK_SHYREN_NOTES, ATK_DUMMY_MINIONS, ATK_DUMMY_MISSILES, ATK_TEMMIE_HOPS, - ATK_UNDYNE_ARROWS, ATK_UNDYNE_SPEARS, ATK_COUNT + ATK_UNDYNE_ARROWS, ATK_UNDYNE_SPEARS, ATK_WF_COUNT, + /* Hotland */ + ATK_VULKIN_THUNDER = ATK_WF_COUNT, ATK_VULKIN_FIRE, ATK_TSUNDER_BOMBS, ATK_TSUNDER_DIVE, ATK_PYROPE_BOMBS, + ATK_PYROPE_ROPE, ATK_COUNT }; /* a formation: up to three monsters, and what the first turn says */ @@ -60,4 +68,9 @@ const struct MonDef *wf_mon_def(int id); void wf_attack_run(struct Battle *b, int atk, int t); int wf_attack_length(int atk); int wf_encounter(int room); +const Form *ht_form(int form); /* htmon.c */ +const struct MonDef *ht_mon_def(int id); +void ht_attack_run(struct Battle *b, int atk, int t); +int ht_attack_length(int atk); +int ht_encounter(int room); #endif diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index 4f6c279e..16c1498c 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -4,6 +4,7 @@ #include "event.h" #include "events.h" #include "game.h" +#include "hotland.h" #include "monsters.h" #include "ruins.h" #include "snowdin.h" @@ -20,6 +21,7 @@ void room_setup(int room, int from) { wf1_setup(room, from); wf2_setup(room, from); wf3_setup(room, from); + ht1_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ @@ -29,12 +31,14 @@ void room_update(void) { snow2_update(); wf1_update(); wf3_update(); + ht1_update(); } /* what a room draws on its floor, under everything (world.c) */ void room_draw_floor(void) { snow1_draw(); snow2_draw(); + ht1_draw(); } /* a pushed rock that may go where Frisk can't (a bridge seed into the water), and what happens once it has */ diff --git a/games/undertale/src/shoot.c b/games/undertale/src/shoot.c new file mode 100644 index 00000000..1a336f0b --- /dev/null +++ b/games/undertale/src/shoot.c @@ -0,0 +1,134 @@ +/* Hotland's shooting puzzles (the Reactivated Door Puzzles), on their own screen (MODE_SHOOT). + * + * A grid of blocks stands between Frisk's ship, below, and the target, above. Each arrow pushes every dark block one + * cell that way, where there's room inside the grid; the light blocks never move. Z shoots straight up: a shot + * breaks the first dark block it meets, a light one stops it, and a clear way hits the target. Two shots a try: + * out of them, it starts over. (The rules are worked out from the solutions the Undertale Wiki gives for them; the + * grids are the game's, as its screenshots show them.) */ +#include +#include "game.h" +#include "gfx.h" +#include "plat.h" +#include "res.h" +#include "shoot.h" + +typedef struct { + uint8_t w, h, ship; + const char *rows[6]; /* '#' a light block, 'o' a dark one, ' ' nothing */ +} Puzzle; +static const Puzzle puzzles[SHOOT_COUNT] = { + [SHOOT_RIGHT] = {3, 3, 1, {"#o#", " ", "#o#"}}, + [SHOOT_LEFT] = {4, 4, 2, {"# #", "ooo ", " #o#", "#oo "}}, +}; +#define CELL 24 +#define SHOTS 2 + +static int id, shots, result, t, shot_y, fail_t; +static char grid[6][6]; +static bool won; + +static void reset(void) { + const Puzzle *p = &puzzles[id]; + for (int y = 0; y < p->h; y++) + for (int x = 0; x < p->w; x++) grid[y][x] = p->rows[y][x]; + shots = SHOTS, shot_y = -1, fail_t = 0, won = false; +} + +void shoot_open(int which) { + id = which, result = 0, t = 0; + reset(); + g_mode = MODE_SHOOT; +} +int shoot_result(void) { return result; } + +static void push(int dx, int dy) { + const Puzzle *p = &puzzles[id]; + /* one cell a press; the dark blocks nearest the way they go move first, so a line of them moves together */ + for (int y = 0; y < p->h; y++) + for (int x = 0; x < p->w; x++) { + int sx = dx > 0 ? p->w - 1 - x : x, sy = dy > 0 ? p->h - 1 - y : y; + if (grid[sy][sx] != 'o') continue; + int nx = sx + dx, ny = sy + dy; + if (nx < 0 || ny < 0 || nx >= p->w || ny >= p->h || grid[ny][nx] != ' ') continue; + grid[ny][nx] = 'm', grid[sy][sx] = ' '; /* (marked: moved once) */ + } + for (int y = 0; y < p->h; y++) + for (int x = 0; x < p->w; x++) + if (grid[y][x] == 'm') grid[y][x] = 'o'; +} + +void shoot_update(uint32_t keys, uint32_t pressed) { + (void)keys; + const Puzzle *p = &puzzles[id]; + t++; + if (won) { + if (++fail_t > 40) result = 1, g_mode = MODE_WORLD; + return; + } + if (fail_t) { + if (++fail_t > 45) reset(); + return; + } + if (shot_y >= 0) { + /* the shot flies up its column, a cell every few frames */ + if (t % 3) return; + shot_y--; + if (shot_y < 0) { + won = true, fail_t = 1; + return; + } + char *c = &grid[shot_y][p->ship]; + if (*c == ' ') return; + if (*c == 'o') *c = ' '; + shot_y = -1; + if (!shots) fail_t = 1; + return; + } + if (pressed & K_X) { + result = 0, g_mode = MODE_WORLD; + return; + } + if (pressed & K_UP) push(0, -1); + else if (pressed & K_DOWN) push(0, 1); + else if (pressed & K_LEFT) push(-1, 0); + else if (pressed & K_RIGHT) push(1, 0); + else if ((pressed & K_Z) && shots) shots--, shot_y = p->h, t = 0; +} + +void shoot_draw(void) { + const Puzzle *p = &puzzles[id]; + gfx_rect(0, 0, SCREEN_W, SCREEN_H, C_BLACK, 255); + int gw = p->w * CELL, gh = p->h * CELL; + int gx = (SCREEN_W - gw) / 2, gy = 104 - gh / 2; + uint16_t grey = rgb565(0x909090), dim = rgb565(0x606060); + /* the frame, the target, the ship */ + gfx_rect(gx - 40, 16, gw + 80, 1, grey, 255); + gfx_rect(gx - 40, 190, gw + 80, 1, grey, 255); + gfx_rect(gx - 40, 16, 1, 175, grey, 255); + gfx_rect(gx + gw + 39, 16, 1, 175, grey, 255); + int cx = gx + p->ship * CELL + CELL / 2; + if (!won || (t / 3) % 2) + for (int k = 0; k < 8; k++) gfx_rect(cx - 8 + k, 22 + k, 16 - 2 * k, 1, grey, 255); + for (int k = 0; k < 9; k++) gfx_rect(cx - k, 172 + k, 2 * k + 1, 1, rgb565(0xA0A030), 255); + /* the grid */ + gfx_rect(gx - 2, gy - 2, gw + 4, 1, dim, 255); + gfx_rect(gx - 2, gy + gh + 1, gw + 4, 1, dim, 255); + gfx_rect(gx - 2, gy - 2, 1, gh + 4, dim, 255); + gfx_rect(gx + gw + 1, gy - 2, 1, gh + 4, dim, 255); + for (int y = 0; y < p->h; y++) + for (int x = 0; x < p->w; x++) { + int bx = gx + x * CELL + 2, by = gy + y * CELL + 2; + if (grid[y][x] == '#') { + gfx_rect(bx, by, CELL - 4, CELL - 4, grey, 255); + } else if (grid[y][x] == 'o') { + gfx_rect(bx, by, CELL - 4, CELL - 4, grey, 255); + gfx_rect(bx + 2, by + 2, CELL - 8, CELL - 8, C_BLACK, 255); + } + } + if (shot_y >= 0) gfx_rect(cx - 1, gy + shot_y * CELL + CELL / 2 - 4, 3, 8, C_YELLOW, 255); + /* the shots left, and how it plays */ + for (int k = 0; k < shots; k++) gfx_rect(gx + gw + 50 + k * 8, 176, 4, 8, C_YELLOW, 255); + if (fail_t && !won) gfx_text(FONT_MAIN, 120, 200, "RESTART...", C_WHITE, 255); + else if (won) gfx_text(FONT_MAIN, 128, 200, "SUCCESS!", C_YELLOW, 255); + else gfx_text(FONT_SMALL, 40, 204, "ARROWS: MOVE BLOCKS Z: SHOOT X: LEAVE", dim, 255); +} diff --git a/games/undertale/src/shoot.h b/games/undertale/src/shoot.h new file mode 100644 index 00000000..87256481 --- /dev/null +++ b/games/undertale/src/shoot.h @@ -0,0 +1,10 @@ +/* Undertale: Hotland's shooting puzzles (shoot.c), on their own screen. */ +#ifndef UT_SHOOT_H +#define UT_SHOOT_H +#include +enum { SHOOT_RIGHT, SHOOT_LEFT, SHOOT_COUNT }; +void shoot_open(int id); /* MODE_SHOOT until solved or left */ +int shoot_result(void); /* 1 solved, 0 left */ +void shoot_update(uint32_t keys, uint32_t pressed); +void shoot_draw(void); +#endif diff --git a/games/undertale/src/text.c b/games/undertale/src/text.c index 7d5f91b0..983664d8 100644 --- a/games/undertale/src/text.c +++ b/games/undertale/src/text.c @@ -30,6 +30,7 @@ static const Expr flowey_faces[] = { {SPR_FLOWEYSIDESHOCK, 4, -2}, }; static const Expr sans_faces[] = {{SPR_FACE_SANS, 4, 0}, {SPR_FACE_SANSCHUCKLE, 4, 0}, {SPR_FACE_SANSWINK, 4, 0}}; +static const Expr alphys_faces[] = {{SPR_FACE_ALPHYS, 4, 0}}; static const Expr papyrus_faces[] = { {SPR_FACE_PAPYRUS, 4, -4}, {SPR_FACE_PAPYRUSEVIL, 4, -4}, {SPR_FACE_PAPYRUSLAUGH, 4, -4}, {SPR_FACE_PAPYRUSMAD, 4, -4}, {SPR_FACE_PAPYRUSSIDE, 4, -4}, @@ -42,6 +43,7 @@ static const struct { [FACE_FLOWEY] = {flowey_faces, sizeof flowey_faces / sizeof flowey_faces[0]}, [FACE_SANS] = {sans_faces, sizeof sans_faces / sizeof sans_faces[0]}, [FACE_PAPYRUS] = {papyrus_faces, sizeof papyrus_faces / sizeof papyrus_faces[0]}, + [FACE_ALPHYS] = {alphys_faces, 1}, }; /* ---------------------------------------------------------------- the writer */ diff --git a/games/undertale/src/wf3.c b/games/undertale/src/wf3.c index bc291534..d6cce480 100644 --- a/games/undertale/src/wf3.c +++ b/games/undertale/src/wf3.c @@ -132,7 +132,6 @@ void wf3_setup(int room, int from) { Obj *f = obj_deco(SPR_UNDYNE_FALLEN, 534, 6213, false); if (f) f->name = ACTOR_UNDYNE, f->event = EV_HOT_UNDYNE, f->flags |= OF_TALK, obj_set_box(f, 0, 6, 50, 20); } - if (!flag(F_HOTLAND)) obj_trigger(1000, 6100, 16, 300, EV_HOT_END, ACTOR_TRIGGER2); break; } } @@ -356,15 +355,6 @@ static int ev_hot_cooler(Ev *c) { EV_END; } -static int ev_hot_end(Ev *c) { - EV_BEGIN; - set_flag(F_HOTLAND, 1); - sv.room = (int16_t)g_room, sv.x = (int16_t)(pl.x - 30), sv.y = pl.y; - save_write_auto(); - menu_end_open(); - EV_END; -} - int wf3_event(Ev *c) { switch (c->id) { case EV_DEADEND: return ev_deadend(c); @@ -374,7 +364,6 @@ int wf3_event(Ev *c) { case EV_PAP_NEON: return ev_pap_neon(c); case EV_HOT_UNDYNE: return ev_hot_undyne(c); case EV_HOT_COOLER: return ev_hot_cooler(c); - case EV_HOT_END: return ev_hot_end(c); } return -1; } diff --git a/games/undertale/src/wfmon.c b/games/undertale/src/wfmon.c index ec500afd..507f2bb1 100644 --- a/games/undertale/src/wfmon.c +++ b/games/undertale/src/wfmon.c @@ -197,7 +197,7 @@ static const char *flavor_undyne(Battle *b, Monster *m) { } static int attack_undyne(Battle *b, Monster *m) { (void)m; return b->turn % 2 ? ATK_UNDYNE_ARROWS : ATK_UNDYNE_SPEARS; } -static const MonDef wf_defs[MON_COUNT - MON_SNOW_COUNT] = { +static const MonDef wf_defs[MON_WF_COUNT - MON_SNOW_COUNT] = { [MON_AARON - MON_SNOW_COUNT] = { .name = "Aaron", .spare_gold = 30, .hp = 98, .at = 7, .df = 2, .exp = 52, .gold = 30, .spr_idle = SPR_AARON_B, .spr_hurt = SPR_AARON_HURT, .check = "All muscle, and he knows it.", .acts = {"Flex", "Shoo"}, .nacts = 2, @@ -240,7 +240,7 @@ static const MonDef wf_defs[MON_COUNT - MON_SNOW_COUNT] = { .acts = {"Plead", "Challenge"}, .nacts = 2, .act = act_undyne, .talk = talk_undyne, .attack = attack_undyne, .flavor = flavor_undyne}, }; -const MonDef *wf_mon_def(int id) { return &wf_defs[id - MON_SNOW_COUNT]; } +const MonDef *wf_mon_def(int id) { return id >= MON_WF_COUNT ? ht_mon_def(id) : &wf_defs[id - MON_SNOW_COUNT]; } /* Woshua's clean green caught: then it can be spared (battle.c asks each turn, through its flavour) */ static void woshua_check(Battle *b) { @@ -250,7 +250,7 @@ static void woshua_check(Battle *b) { } } -static const Form wf_forms[FORM_COUNT - FORM_SNOW_COUNT] = { +static const Form wf_forms[FORM_WF_COUNT - FORM_SNOW_COUNT] = { [FORM_AARON - FORM_SNOW_COUNT] = {{MON_AARON}, 1, "* Aaron flexes in."}, [FORM_WOSHUA - FORM_SNOW_COUNT] = {{MON_WOSHUA}, 1, "* Woshua sloshes up."}, [FORM_WOSHUA_AARON - FORM_SNOW_COUNT] = {{MON_WOSHUA, MON_AARON}, 2, "* Woshua and Aaron show up."}, @@ -263,7 +263,7 @@ static const Form wf_forms[FORM_COUNT - FORM_SNOW_COUNT] = { [FORM_TEMMIE_MOLDBYGG - FORM_SNOW_COUNT] = {{MON_TEMMIE, MON_MOLDBYGG}, 2, "* Temmie and Moldbygg come along."}, [FORM_UNDYNE - FORM_SNOW_COUNT] = {{MON_UNDYNE}, 1, "* Undyne attacks!"}, }; -const Form *wf_form(int form) { return &wf_forms[form - FORM_SNOW_COUNT]; } +const Form *wf_form(int form) { return form >= FORM_WF_COUNT ? ht_form(form) : &wf_forms[form - FORM_SNOW_COUNT]; } /* random encounters: the wiki's pools, room by room */ int wf_encounter(int room) { @@ -279,7 +279,7 @@ int wf_encounter(int room) { return pool[rnd_n(5)]; } } - return -1; + return ht_encounter(room); } /* ---------------------------------------------------------------- the attacks */ @@ -374,7 +374,7 @@ static void atk_shyren_notes(int t) { } } -int wf_attack_length(int atk) { (void)atk; return 160; } +int wf_attack_length(int atk) { return atk >= ATK_WF_COUNT ? ht_attack_length(atk) : 160; } /* Mad Dummy: its dummies fly in from the sides and fire; later its magic missiles home in on the SOUL, and one that * flies into Mad Dummy (up at the board's top middle, where it shows) hurts it */ @@ -458,7 +458,10 @@ static void atk_undyne_spears(int t) { } void wf_attack_run(Battle *b, int atk, int t) { - (void)b; + if (atk >= ATK_WF_COUNT) { + ht_attack_run(b, atk, t); + return; + } if (t < 0) { if (atk == ATK_UNDYNE_ARROWS) { board_set(80, 80); diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index 4a504611..0aba194a 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -33,7 +33,10 @@ FORM_SNOWDRAKE, FORM_PAPYRUS = 19, 31 (FORM_AARON, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE) = range(32, 43) +(FORM_VULKIN, FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2, FORM_MTT_QUIZ, FORM_MTT_COOK, + FORM_LASERS) = range(43, 51) ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD = range(17, 23) +ITEM_BURNT_PAN, ITEM_INSTANT_NOODLES = 28, 29 def run(args, frames, saves=None, what=""): @@ -120,6 +123,22 @@ def check(cond, msg): s = run(["--god", "--battle", str(FORM_MAD_DUMMY), "--path", "act:1"], 9000, what="Mad Dummy") check(s and s["mode"] == MODE_WORLD and s["kills"] == 0, f"Mad Dummy's fight did not end: {s}") +# Hotland's battles: fled from, fought, spared (Vulkin encouraged, Pyrope heated up twice); Mettaton's quiz, his +# cooking show's jetpack and a laser's alarm play their own way to their end +for form in range(FORM_VULKIN, FORM_PYROPE2 + 1): + s = run(["--god", "--battle", str(form), "--path", "flee"], 1500, what=f"battle {form}, fleeing") + check(s and s["mode"] == MODE_WORLD, f"battle {form}: fleeing did not end it: {s}") +for form in (FORM_VULKIN, FORM_TSUNDERPLANE, FORM_PYROPE): + s = run(["--god", "--battle", str(form), "--path", "fight"], 4000, what=f"battle {form}, fighting") + check(s and s["mode"] == MODE_WORLD and s["kills"] >= 1, f"battle {form}: FIGHT did not win it: {s}") +for form, seq, gold in ((FORM_VULKIN, "2", 40), (FORM_PYROPE, "1,1", 45), (FORM_PYROPE2, "1,1,1@2,1@2", 90)): + s = run(["--god", "--battle", str(form), "--path", "seq:" + seq], 9000, what=f"battle {form}, sparing") + check(s and s["mode"] == MODE_WORLD and s["kills"] == 0 and s["gold"] == gold, + f"battle {form}: the friendly way did not spare it: {s}") +for form in (FORM_MTT_QUIZ, FORM_MTT_COOK, FORM_LASERS): + s = run(["--god", "--battle", str(form), "--path", "talk"], 3000, what=f"show {form}") + check(s and s["mode"] == MODE_WORLD, f"show {form} did not end: {s}") + # the shop in Snowdin: a Cinnamon Bunny for 25G; Papyrus's date: his phone number s = run(["--name", "Frisk", "--noenc", "--room", str(ROOMS["SNOWTOWN"]), "--at", "446,1092", "--gold", "100", "--keys", "2-24:up,60:z,90:down,100:down,110:down,120:z,140:z,170:x,190:down,200:down,210:down,220:z"], 400, what="the shop") @@ -180,19 +199,32 @@ def check(cond, msg): if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["WF1"]), "--at", "30,1480", "--path-file", os.path.join(HERE, "waterfall.path")], 60000, what="Waterfall") - check(s and s["mode"] == MODE_END and s["room"] == ROOMS["HT_ENTRANCE"], f"Waterfall did not end in Hotland: {s}") + check(s and s["mode"] == MODE_WORLD and s["room"] == ROOMS["HT_LABFRONT"], f"Waterfall did not end in Hotland: {s}") if s: for name, v in (("WF_MK", 1), ("GRILLBYS", 1), ("WF_TUTU", 1), ("WF_UNDYNE1", 1), ("SEEDS1", 1), ("SEEDS2", 1), ("SEEDS3", 1), ("WF_QUICHE", 1), ("CHASE1", 1), ("WF_TELESCOPE", 1), ("WF_PUNCH", 1), ("WF_BALLET", 1), ("WF_ONION", 2), ("PIANO", 1), ("WF_ARTIFACT", 1), ("SHYREN", 1), ("UMBRELLA", 3), ("MK_RAIN", 2), ("WF_BRIDGE", 1), ("WF_DUMP", 1), ("WF_COOLER", 2), ("MAD_DUMMY", 1), ("NAPSTA_HOME", 2), ("TEM_VILLAGE", 1), ("DEADEND", 1), ("MK_CHASM", 2), - ("UNDYNE", 4), ("WATER_CUP", 2), ("PAP_NEON", 1), ("HOTLAND", 1)): + ("UNDYNE", 4), ("WATER_CUP", 2), ("PAP_NEON", 1)): check(flag(s, name) == v, f"Waterfall: F_{name} is {flag(s, name)}, not {v}") check(s["kills"] == 0, f"Waterfall: {s['kills']} killed on the friendly way") for item in (ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD): check(item in s["items"], f"Waterfall: item {item} not picked up: {s['items']}") +# Hotland's first floor: Alphys and the quiz, the noodles, the belts, the vents, the lasers, both shooting puzzles, the +# cooking show, up to the elevator +if not QUICK: + s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["HT_LABFRONT"]), "--at", "1000,6230", + "--path-file", os.path.join(HERE, "hotland.path")], 16000, what="Hotland") + check(s and s["mode"] == MODE_END and s["room"] == ROOMS["HT_COREVIEW"], f"Hotland did not end at the elevator: {s}") + if s: + for name, v in (("HT_LAB", 2), ("HT_NOODLES", 1), ("HT_CALL_LASER", 1), ("HT_CALL_HUB", 1), ("HT_CALL_ISLE", 1), + ("HT_CALL_CORE", 1), ("HT_PUZ_R", 1), ("HT_PUZ_L", 1), ("HT_BLUE_OFF", 1), ("HT_COOK", 1), + ("HT_FLOOR1", 1)): + check(flag(s, name) == v, f"Hotland: F_{name} is {flag(s, name)}, not {v}") + check(ITEM_INSTANT_NOODLES in s["items"], f"Hotland: the noodles not taken: {s['items']}") + if failures: print("\n".join("FAIL " + f for f in failures)) sys.exit(1) diff --git a/games/undertale/tests/hotland.path b/games/undertale/tests/hotland.path new file mode 100644 index 00000000..cdea25e9 --- /dev/null +++ b/games/undertale/tests/hotland.path @@ -0,0 +1,145 @@ +# Hotland's first floor, from the crossroads before the Lab (play it with --room 127 --at 1000,6230 --name Frisk +# --noenc --god): Alphys and Mettaton's quiz, the phone's upgrade and the noodles in the fridge +go:1300,6262 +1350,6250 +w30 +talk +w30 +talk +go:2050,6232 +u +z +pick:0 +talk +# out the Lab's east door, up the conveyor belts +go:2500,6255 +2545,6255 +w20 +go:2958,6250 +go:2958,6010 +2958,5960 +w20 +go:2915,5880 +go:2915,5470 +go:2958,5420 +go:2958,5260 +2958,5200 +w20 +go:2860,5150 +go:2860,4740 +go:2958,4700 +go:2958,4400 +2958,4340 +w20 +# the Magma Chamber: the vents east, up and west, to the way north (the burnt pan's room left aside) +go:2968,4250 +go:3190,4226 +vent:3240,4226 +w20 +3302,4198 +3380,4198 +go:3405,4170 +vent:3422,4168 +w20 +go:3340,4048 +vent:3366,3990 +w20 +go:3185,3960 +3185,3900 +w20 +# the laser walkway (its alarm, when a laser catches Frisk), Alphys's call +go:3185,3830 +talk +go:3400,3820 +go:4150,3820 +4215,3820 +w20 +# the puzzle hub: its vent turns a quarter each time (north: the locked door, east: the right puzzle, south, west: the +# left one, its blue laser switched off by Alphys), both puzzles solved, then north through the door +go:4820,3800 +go:4820,3690 +talk +vent:4820,3600 +w20 +u +z +talk +vent:4820,3600 +w20 +vent:4826,3612 +w20 +go:5262,3610 +5262,3560 +w20 +go:5258,3424 +u +z +w10 +u +w4 +l +w4 +z +w30 +z +w80 +talk +go:5260,3480 +5260,3520 +w20 +go:4960,3610 +vent:4890,3610 +w20 +vent:4810,3610 +w20 +vent:4820,3600 +w20 +go:4500,3610 +go:4392,3610 +talk +4392,3560 +w20 +go:4389,3424 +u +z +w10 +u +w4 +l +w4 +d +w4 +l +w4 +z +w30 +z +w80 +talk +go:4390,3480 +4390,3520 +w20 +go:4700,3610 +vent:4770,3610 +w20 +vent:4840,3610 +w20 +4820,3420 +w30 +# over the vents to Mettaton's cooking show (the jetpack), the CORE far off, and the elevator up, where the game +# now ends +go:4818,3150 +go:4900,3110 +vent:4960,3110 +w60 +w60 +go:5330,3110 +talk +w30 +talk +go:6300,3120 +talk +go:6960,3110 +u +z +pick:0 diff --git a/games/undertale/tests/play.c b/games/undertale/tests/play.c index 6a7cbe45..ac74cd90 100644 --- a/games/undertale/tests/play.c +++ b/games/undertale/tests/play.c @@ -230,6 +230,23 @@ static uint32_t path_keys(int f) { } return (f & 1) ? K_Z : 0; } + /* "vent:x,y": toward (x, y), straight, until something starts on the way (a steam vent blows Frisk off) */ + if (!strncmp(tok, "vent:", 5)) { + if (event_running()) { + path_at = next; + return 0; + } + if (g_mode != MODE_WORLD || text_active() || world_fading()) return 0; + int vx, vy; + sscanf(tok + 5, "%d,%d", &vx, &vy); + int dx = vx - pl.x, dy = vy - pl.y; + if (abs(dx) <= 1 && abs(dy) <= 1) { + path_at = next; + return 0; + } + if (abs(dx) > 1) return dx > 0 ? K_RIGHT : K_LEFT; + return dy > 0 ? K_DOWN : K_UP; + } if (!strncmp(tok, "go:", 3)) { static char *planned; if (g_mode != MODE_WORLD || text_active() || event_blocking() || world_fading()) return 0; @@ -286,6 +303,12 @@ static uint32_t path_keys(int f) { return 0; } path_room = g_room; + /* or a door inside the room did (he's far from where he just was) */ + if (abs(pl.x - path_last_x) > 40 || abs(pl.y - path_last_y) > 40) { + path_last_x = pl.x, path_last_y = pl.y; + path_at = next; + return 0; + } int dx = x - pl.x, dy = y - pl.y; if (abs(dx) <= 1 && abs(dy) <= 1) { path_at = next; diff --git a/games/undertale/tests/waterfall.path b/games/undertale/tests/waterfall.path index 69d69bd2..a601d5cf 100644 --- a/games/undertale/tests/waterfall.path +++ b/games/undertale/tests/waterfall.path @@ -321,7 +321,7 @@ go:22190,2110 22190,2030 # the chasm: Monster Kid on the bridge, then hanging off it, helped up; Undyne on her crag, her fight (fled), her # chase by the river and the neon sign (Papyrus calls); Hotland: she falls in the heat, the cooler's water for her, -# and on, where the game now ends +# and on to the crossroads before the Lab (hotland.path goes on from there) go:22390,2030 talk go:22626,2022 @@ -355,4 +355,4 @@ z pick:0 talk w20 -go:1010,6220 +go:1000,6230 diff --git a/games/undertale/tools/fetch.py b/games/undertale/tools/fetch.py index c5f52ffd..a865132b 100644 --- a/games/undertale/tools/fetch.py +++ b/games/undertale/tools/fetch.py @@ -56,7 +56,14 @@ "Nice_Cream_(item)", "Snowman_Piece", "Snowman_Piece", "Punch_Card", "Dog_Residue", "Abandoned_Quiche", "Astronaut_Food", "Hot_Dog...?", "Hot_Cat", "Spaghetti", "Glamburger", "Sea_Tea", "Temmie_Flakes", "Junk_Food", "Annoying_Dog/In_battle", "Lesser_Dog/In_battle", "Greater_Dog/In_battle", "Doggo/In_battle", - "Dogamy_and_Dogaressa/In_battle"] + "Dogamy_and_Dogaressa/In_battle", + # Hotland and the CORE + "Hotland", "Hotland/Puzzles", "Alphys", "Alphys's_Lab", "Mettaton", "Mettaton/In_battle", "Mettaton_EX", + "Muffet", "Muffet/In_battle", "Royal_Guard/In_battle", "Vulkin", "Tsunderplane", "Pyrope", "So_Sorry", + "Madjick", "Knight_Knight", "Final_Froggit", "Whimsalot", "Astigmatism", "CORE", "MTT_Resort", "Burgerpants", + "Heats_Flamesman", "Bratty_and_Catty", "Spider_Bake_Sale", "Elevator", "Sans/Hotland", "Hot_Dog...?", + "Cell_Phone/Alphys", "Steam_Vent", "Conveyor_belt", "Mettaton_quiz_show", "Laser", "Royal_Guards", "Bomb", + "Stained_Apron", "Hot_Dog_Harpy", "Art_Club_room", "Spider_Entrance", "Multicolor_Tile_Puzzle", "Lab"] # files the categories leave out, as their wiki names FILES = ["QC sprite.png", "QC screenshot shop.png", "Gerson screenshot shop.png", "Tem Shop screenshot Temmie Armor.png"] DEMO = { diff --git a/games/undertale/tools/pack.py b/games/undertale/tools/pack.py index d44839a8..2bcc6572 100644 --- a/games/undertale/tools/pack.py +++ b/games/undertale/tools/pack.py @@ -665,6 +665,16 @@ def main(): a[(a[:, :, 0] == c[0]) & (a[:, :, 1] == c[1]) & (a[:, :, 2] == c[2])] = 0 out.append(Image.fromarray(a, "RGBA")) imgs = out + if "only" in opts: # only these colours kept (a thing cut from a map that shares the map's colours) + out = [] + for im in imgs: + a = np.array(im) + keep = np.zeros(a.shape[:2], bool) + for c in opts["only"]: + keep |= (a[:, :, 0] == c[0]) & (a[:, :, 1] == c[1]) & (a[:, :, 2] == c[2]) + a[~keep] = 0 + out.append(Image.fromarray(a, "RGBA")) + imgs = out if opts.get("mirror"): imgs = [im.transpose(Image.FLIP_LEFT_RIGHT) for im in imgs] if "tints" in opts: # the first frame, then it again in each colour (the SOUL's modes) diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index 2dde8162..c6be23f2 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -140,9 +140,25 @@ ("erase", 2380, 1500, 80, 20, "ring"), ("erase", 2850, 1240, 30, 80, "ring"), ("erase", 3040, 1540, 80, 20, "ring"), ])) -# Hotland: its orange rock floors (its black is nothing) +# Hotland: its orange rock floors (its black is nothing); the striped bridges, the conveyor belts, the Lab's tiles HT_FLOOR = [(181, 85, 21), (169, 124, 41), (178, 83, 19), (91, 65, 0)] +HT_STRIPE = [(239, 153, 104), (81, 34, 33), (198, 104, 80), (156, 62, 61), (114, 39, 38)] +HT_BELT = [(112, 83, 71), (52, 50, 78), (107, 67, 78)] +LAB_FLOOR = [(186, 233, 233), (220, 255, 186), (198, 232, 234), (52, 50, 78), (128, 169, 202)] +HT_DOCK = [(54, 47, 121), (27, 33, 90), (27, 21, 72), (23, 13, 43), (45, 49, 96)] +HT_HUB = [(131, 44, 66), (70, 32, 58)] +HT_KITCHEN = [] +# the steam vents' grates (their platforms 60 pixels square around them) +HT_VENTS_MAGMA = [(3120, 4000), (3362, 4000), (3503, 4060), (3420, 4180), (3225, 4240), (3325, 4240), (3525, 4240)] +HT_VENTS_HUB = [(4820, 3620), (4820, 3560), (4740, 3620), (4900, 3620)] +HT_VENTS_ISLE = [(4940, 3120), (5060, 3120), (5180, 3120)] AREAS.append(dict(name="hotland", map="Hotland_map.png", floor=HT_FLOOR, margin=0, close=True, patches=[ + # who the game moves about: the Royal Guards at the elevator (and by the vents, later), the clam by the cooler, + # Alphys and Mettaton (through the wall) in the Lab, the Vulkin on the belts, the Pyrope by the pan, the pan + *[("copy", 1006, 6120, 88, 20, 1006, y) for y in (6140, 6160, 6180)], ("erase", 726, 6216, 52, 56, "ring"), + ("copy", 2100, 6152, 82, 82, 2181, 6152), ("erase", 2198, 6241, 30, 36, "ring"), + ("erase", 2993, 5170, 30, 32, "ring"), ("erase", 3762, 4424, 34, 42, "ring"), ("erase", 3476, 4468, 18, 18, "ring"), + ("erase", 4805, 3098, 70, 56, "ring"), # Undyne, fallen on the bridge in the heat (an object here, there only if she chased Frisk): the planks repeat # every 40 pixels ("copy", 454, 6219, 50, 21, 534, 6219), @@ -471,8 +487,44 @@ doors=[((23498, 775, 8, 47), "wf_north", (23449, 910), "down"), ((24210, 775, 10, 47), "ht_entrance", (24, 6206), "right")]), # Hotland's first room: Sans's station, the bridge over the lava, the water cooler - dict(name="ht_entrance", area="hotland", rect=(0, 6080, 1460, 320), title="Hotland", + dict(name="ht_entrance", area="hotland", rect=(0, 6080, 800, 320), title="Hotland", doors=[((0, 6215, 6, 45), "wf_hotgate", (24180, 776), "left")]), + # the crossroads before the Lab: the elevator up north (the Royal Guards in the way), the River Person's dock + # south, the Lab east + dict(name="ht_labfront", area="hotland", rect=(800, 5880, 640, 480), title="Hotland", + doors=[((1322, 6240, 40, 44), "ht_lab", (1462, 6250), "right")]), + dict(name="ht_river", area="hotland", rect=(900, 6360, 320, 240), title="Hotland", floor_colors=HT_DOCK), + # Alphys's Lab, both its floors (the escalators between them) + dict(name="ht_lab", area="hotland", rect=(1440, 5860, 1100, 460), title="Lab", floor_colors=LAB_FLOOR, + doors=[((1440, 6200, 6, 100), "ht_labfront", (1300, 6262), "left"), + ((2534, 6220, 6, 80), "ht_labexit", (2615, 6250), "right")]), + # out of the Lab: the conveyor belts north, two rooms of them, then the striped bridge up + dict(name="ht_labexit", area="hotland", rect=(2540, 5990, 440, 350), title="Hotland", + doors=[((2580, 6236, 34, 44), "ht_lab", (2500, 6255), "left")]), + dict(name="ht_belt1", area="hotland", rect=(2800, 5240, 320, 800), title="Hotland", floor_colors=HT_STRIPE + HT_BELT), + dict(name="ht_belt2", area="hotland", rect=(2800, 4380, 320, 860), title="Hotland", floor_colors=HT_STRIPE + HT_BELT, + fix=[("walk", 2944, 4674, 52, 14)]), + # the Magma Chamber's islands and steam vents; the burnt pan's room below it; the laser walkway north + dict(name="ht_magma", area="hotland", rect=(2860, 3940, 860, 440), title="Hotland", floor_colors=HT_STRIPE, + fix=[("walk", x - 24, y - 24, 68, 68) for x, y in HT_VENTS_MAGMA]), + dict(name="ht_pan", area="hotland", rect=(3340, 4380, 640, 260), title="Hotland", floor_colors=HT_STRIPE + HT_BELT, + fix=[("walk", 3600, 4460, 60, 60)]), + dict(name="ht_lasers", area="hotland", rect=(3040, 3700, 1180, 240), title="Hotland", floor_colors=HT_STRIPE, + doors=[((4206, 3800, 14, 54), "ht_hub", (4600, 3792), "right")]), + # the puzzle hub: its turning vent, the shooting puzzles left and right, the door north they open + dict(name="ht_hub", area="hotland", rect=(4220, 3250, 1220, 690), title="Hotland", floor_colors=HT_STRIPE + HT_HUB, + fix=[("walk", x - 2, y - 2, 24, 24) for x, y in HT_VENTS_HUB] + [("walk", 4798, 3616, 72, 48), ("walk", 4804, 3396, 52, 86)], + doors=[((4583, 3795, 8, 50), "ht_lasers", (4176, 3800), "left"), + ((4800, 3400, 60, 8), "ht_ventisle", (4818, 3236), "up"), + # (the puzzles' doorways, and back out of them) + ((5257, 3596, 25, 12), "ht_hub", (5258, 3462), "up"), ((5250, 3500, 40, 4), "ht_hub", (5259, 3608), "down"), + ((4387, 3596, 25, 12), "ht_hub", (4389, 3462), "up"), ((4380, 3500, 40, 4), "ht_hub", (4389, 3608), "down")]), + # past the door: the vents over the lava, Mettaton's cooking show, the CORE far off and the elevator + dict(name="ht_ventisle", area="hotland", rect=(4660, 3000, 640, 300), title="Hotland", floor_colors=HT_STRIPE, + fix=[("walk", x - 24, y - 24, 68, 68) for x, y in HT_VENTS_ISLE], + doors=[((4800, 3292, 60, 8), "ht_hub", (4818, 3488), "down")]), + dict(name="ht_cooking", area="hotland", rect=(5300, 3000, 680, 260), title="Hotland", floor_colors=LAB_FLOOR + HT_KITCHEN), + dict(name="ht_coreview", area="hotland", rect=(5980, 2900, 1080, 340), title="Hotland", floor_colors=LAB_FLOOR), ] # rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index e3bea48c..c5a7e815 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -7,7 +7,8 @@ halved here (wiki1: as it is) Options: origin (x, y) in the source's pixels, center (its middle), feet (the middle of its bottom), frames (which of them), keep (no crop to the opaque pixels), every (one frame in n), clear (colours made -see-through), mirror (flipped left to right), box (x, y, w, h: a part of the source, after halving). +see-through), only (all colours but these made see-through), mirror (flipped left to right), box (x, y, w, h: a +part of the source, after halving). More sources: move:File.gif:x0,y0,x1,y1:frames (what moves in a wiki screenshot GIF), map:Map.png:x,y,w,h (a piece of an area's map), gen:name (drawn here, GEN).""" from PIL import Image, ImageDraw @@ -122,6 +123,45 @@ def gen_arrow(): return [im] +def gen_plane(): + # Tsunderplane's little planes, pointing right + im = _img(16, 9) + d = ImageDraw.Draw(im) + w = (255, 255, 255, 255) + d.polygon([(15, 4), (12, 2), (1, 2), (0, 4), (1, 6), (12, 6)], fill=w) + d.polygon([(6, 2), (9, 2), (5, 0), (3, 0)], fill=w) + d.polygon([(6, 6), (9, 6), (5, 8), (3, 8)], fill=w) + d.polygon([(1, 2), (3, 2), (1, 0), (0, 0)], fill=w) + return [im] + + +def gen_bomb(): + # a round bomb with its fuse (Tsunderplane's, Pyrope's) + im = _img(9, 10) + d = ImageDraw.Draw(im) + d.ellipse([0, 1, 8, 9], fill=(255, 255, 255, 255)) + d.line([(6, 1), (8, 0)], fill=(255, 255, 255, 255)) + return [im] + + +def gen_cloud(): + # Vulkin's thundercloud + im = _img(26, 13) + d = ImageDraw.Draw(im) + w = (255, 255, 255, 255) + for box in ([0, 4, 10, 12], [6, 0, 17, 10], [14, 3, 25, 12], [4, 6, 22, 12]): + d.ellipse(box, fill=w) + return [im] + + +def gen_bolt(): + # a bolt of Vulkin's thunder, falling + im = _img(5, 9) + d = ImageDraw.Draw(im) + d.line([(3, 0), (1, 4), (3, 4), (1, 8)], fill=(255, 255, 255, 255), width=1) + return [im] + + def gen_note(): im = _img(9, 11) d = ImageDraw.Draw(im) @@ -161,7 +201,8 @@ def gen_debris(): GEN = {"otile": gen_otile, "snowball": gen_snowball, "bone": gen_bone, "orb": gen_orb, "snowflake": gen_snowflake, "iceshard": gen_iceshard, "present": gen_present, "knife": gen_knife, "dogpaw": gen_dogpaw, "heartbullet": gen_heartbullet, "spear": gen_spear, "note": gen_note, "drop": gen_drop, "arm": gen_arm, - "debris": gen_debris, "arrow": gen_arrow} + "debris": gen_debris, "arrow": gen_arrow, "plane": gen_plane, "bomb": gen_bomb, "cloud": gen_cloud, + "bolt": gen_bolt} SNOW_CLEAR = [(133, 163, 216), (114, 129, 177), (139, 163, 186), (180, 192, 201), (195, 207, 216)] PAP_GIF = "move:Papyrus_screenshot_back_and_forth.gif:0,280,640,450:" @@ -322,12 +363,33 @@ def gen_debris(): ("artifact", "map:Waterfall_map.png:10156,150,12,11", {"keep": True, "clear": [(27, 21, 72), (27, 33, 90), (54, 47, 121), (99, 102, 135)]}), ("echo_ow", "wiki:Echo_Flower_overworld.png", {"feet": True}), + # Hotland: Alphys, Mettaton (his box), the Royal Guards at the elevator (cut from the map), the steam vents' + # grates each way (cut from the map: the turning ones are drawn over theirs), the burnt pan; its monsters + ("alphys_ow", "wiki:Alphys_overworld.png", {"feet": True}), + ("mtt_ow", "wiki:Mettaton_overworld_talking.gif", {"feet": True, "dedupe": True, "every": 4}), + ("mtt_b", "wiki:Mettaton_battle_box.gif", {"feet": True, "dedupe": True, "every": 10}), + ("rguards_ow", "map:Hotland_map.png:1012,6146,74,54", + {"keep": True, "only": [(0, 0, 0), (14, 31, 36), (22, 40, 50), (23, 40, 51), (74, 79, 108), (128, 129, 170)]}), + ("vent_d", "map:Hotland_map.png:3120,4000,20,20", {"keep": True}), + ("vent_u", "map:Hotland_map.png:3420,4180,20,20", {"keep": True}), + ("vent_l", "map:Hotland_map.png:3362,4000,20,20", {"keep": True}), + ("vent_r", "map:Hotland_map.png:3225,4240,20,20", {"keep": True}), + ("burntpan", "map:Hotland_map.png:3476,4468,18,18", {"keep": True, "clear": [(181, 85, 21), (178, 83, 19)]}), + ("vulkin_b", "wiki:Vulkin_battle_idle.gif", {"feet": True, "dedupe": True, "every": 10}), + ("vulkin_hurt", "wiki:Vulkin_battle_hurt.png", {"feet": True}), + ("tsunder_b", "wiki:Tsunderplane_battle_idle.gif", {"feet": True, "dedupe": True, "every": 14}), + ("pyrope_b", "wiki:Pyrope_battle_idle.gif", {"feet": True, "dedupe": True, "every": 6}), + ("pyrope_hurt", "wiki:Pyrope_battle_hurt.png", {"feet": True}), # Undyne fallen in Hotland's heat, on its bridge (cut from the map, the bridge and the rock behind see-through) ("undyne_fallen", "map:Hotland_map.png:534,6213,50,27", {"keep": True, "clear": [(169, 124, 41), (91, 65, 0), (62, 35, 0), (19, 35, 45), (18, 34, 44), (19, 35, 44), (23, 37, 53), (20, 37, 47), (20, 36, 46), (12, 29, 33), (19, 36, 46), (23, 36, 52)]}), ("spear", "gen:spear", {"center": True}), ("arrow", "gen:arrow", {"center": True}), + ("plane", "gen:plane", {"center": True}), + ("bomb", "gen:bomb", {"center": True}), + ("cloud", "gen:cloud", {"center": True}), + ("bolt", "gen:bolt", {"center": True}), ("undyne_b", "wiki:Undyne_battle_armor.gif", {"feet": True, "every": 6}), ("note", "gen:note", {"center": True}), ("drop", "gen:drop", {"center": True}), @@ -354,6 +416,9 @@ def gen_debris(): "torielsurprised", "torielembarrassed", "torielglasses", "torielrevengetalk", "torielscared", "torielblink", "torielhappyblink", "torielbody", "sans", "sanschuckle", "sanswink", "papyrus", "papyrusevil", "papyruslaugh", "papyrusmad", "papyrusside"] +] + [ + # Alphys's face (the wiki's), for her calls and talks + ("face_alphys", "wiki:Alphys_face.png", {"keep": True}), ] + [ # Flowey's faces (his talks and his battle) (n, "demo:spr_" + n, {"keep": True}) for n in [ From feebf6baefa3863235979240f0e75597deac86fa Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 10:55:52 +0000 Subject: [PATCH 13/19] Undertale: Hotland's second floor, up to the elevator past the news The elevator from the first floor now goes up to the second, as the Undertale Wiki describes it (what's said is short and in our own words): - Out of the elevator: Heats Flamesman, who wants his name remembered, and Sans's hot dog stand (a Hot Dog...? for 30G). - The crossroads: the invisible path up to the Art Club's room, and the Stained Apron to the south (armor that heals 1 HP every other turn). - The conveyor belt puzzle: the top belt runs left as fast as Frisk walks, past three switches to press one after another; Alphys calls, makes Frisk miss the third, and switches the force field off anyway. - The vent puzzle: each panel landed on turns every vent around, the top platform turns them back, and falling off lands on the belts that carry Frisk back round; out by the top-left platform's vent, turned. - The Bad Opinion Zone (a SAVE, the safe, the mouse hole, Alphys on her favorite anime's sequel), and the Royal Guards at the bend: clean 02's armor, catch its green stars (they fall right over the SOUL) until it comes off, whisper to 01, and both can be spared; kill one and the other attacks twice as hard. No running from them. - Mettaton's news report: the lights, the six things to report on, and everything is a bomb. Two minutes on the clock: touch each bomb and defuse it (Defuse or FIGHT) while it crosses the DEFUSE ZONE, each moving its own way. The script rides the belt, the basketball bounces, the glass of water darts about; lasers guard the bottom, a vent leads up to the present. Alphys switches the big one off either way. - The CORE again, and the elevator up, where the game now ends. Engine: a clock drawn over the room (room_draw_top); force fields; the bombs share one monster with a look and a pattern for each. Tests: the first floor's route now ends up the elevator; a second-floor route goes from the hot dog stand to the elevator, sparing the guards and letting the news report's clock run out after one bomb; the guards are fought and spared, a bomb defused both ways. Docs and screenshots. --- README.md | 4 +- docs/play.md | 2 +- games/undertale/README.md | 21 +- games/undertale/docs/defuse.png | Bin 0 -> 2217 bytes games/undertale/docs/guards.png | Bin 0 -> 4898 bytes games/undertale/docs/hotdog.png | Bin 0 -> 5374 bytes games/undertale/docs/news.png | Bin 0 -> 7897 bytes games/undertale/docs/rguards.png | Bin 0 -> 3720 bytes games/undertale/docs/ventpuzzle.png | Bin 0 -> 11445 bytes games/undertale/src/battle.c | 2 + games/undertale/src/data.bin | Bin 961349 -> 1013678 bytes games/undertale/src/data.h | 151 +++++---- games/undertale/src/events.c | 2 + games/undertale/src/events.h | 4 +- games/undertale/src/flags.h | 12 +- games/undertale/src/hotland.h | 8 +- games/undertale/src/ht1.c | 20 +- games/undertale/src/ht2.c | 501 ++++++++++++++++++++++++++++ games/undertale/src/htmon.c | 214 +++++++++++- games/undertale/src/items.c | 4 + games/undertale/src/items.h | 2 + games/undertale/src/menu.c | 2 +- games/undertale/src/monsters.c | 4 +- games/undertale/src/monsters.h | 8 +- games/undertale/src/rooms.c | 6 + games/undertale/src/world.c | 2 + games/undertale/tests/check.py | 39 ++- games/undertale/tests/hotland2.path | 114 +++++++ games/undertale/tools/rooms.py | 29 ++ games/undertale/tools/sprites.py | 27 +- 30 files changed, 1086 insertions(+), 92 deletions(-) create mode 100644 games/undertale/docs/defuse.png create mode 100644 games/undertale/docs/guards.png create mode 100644 games/undertale/docs/hotdog.png create mode 100644 games/undertale/docs/news.png create mode 100644 games/undertale/docs/rguards.png create mode 100644 games/undertale/docs/ventpuzzle.png create mode 100644 games/undertale/src/ht2.c create mode 100644 games/undertale/tests/hotland2.path diff --git a/README.md b/README.md index fe2d89d0..6197bb02 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins, Snowdin, Waterfall and Hotland's first floor, from the golden flowers to the CORE's view
Download + Undertale
Undertale

The Ruins, Snowdin, Waterfall and Hotland's first two floors, from the golden flowers to Mettaton's news report
Download More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins, Snowdin, Waterfall and Hotland's first floor are out, the rest of Hotland, the CORE and New Home are next +- [ ] Undertale: the Ruins, Snowdin, Waterfall and Hotland's first two floors are out, the rest of Hotland, the CORE and New Home are next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index 820d0a50..4e5f6393 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall and Hotland. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. For now the game ends at the elevator by the CORE's view. +Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall and Hotland. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. On the second floor, press the switches as the top conveyor belt carries you past them, and in Mettaton's news report, touch each bomb and defuse it while it's in the DEFUSE ZONE. For now the game ends at the elevator past the news report.
diff --git a/games/undertale/README.md b/games/undertale/README.md index 761d703e..2194c430 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins, Snowdin, Waterfall and Hotland's first floor, from the bed of golden flowers to the elevator by the CORE. The rest of the Underground is on the way. + The Ruins, Snowdin, Waterfall and Hotland's first two floors, from the bed of golden flowers to the elevator past Mettaton's news report. The rest of the Underground is on the way.

@@ -27,7 +27,8 @@ * **Snowdin:** Sans and Papyrus, and every one of Papyrus's puzzles: the invisible electricity maze, the X and O tiles, the one on ice, the multicolor tiles and the Gauntlet. Then Snowdin Town, with its shop, inn, library and Papyrus's house. * **Waterfall:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the marsh where the land is black and the water glows, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. Then the fall into the garbage dump, Mad Dummy, Napstablook's house and snail farm, the small bird back over the gap, Gerson's shop, the mushroom maze and Temmie Village with its Tem Shop. And at the end of Waterfall: the lantern maze, Undyne at the dead end (and Monster Kid in her way), the echo flowers' path, Monster Kid on the chasm's bridge, Undyne on her crag, her fight and her chase, and Hotland's edge, where the heat gets her and the water cooler helps. * **Hotland's first floor:** Alphys's Lab, where Mettaton bursts in with his quiz show, the conveyor belts, the Magma Chamber's steam vents and the burnt pan, the laser walkway, the two shooting puzzles that open the door, the vents over the lava and Mettaton's cooking show, with your phone's jetpack, up to the elevator. Alphys calls you as you go. -* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane and Pyrope in Hotland. +* **Hotland's second floor:** Sans's hot dog stand and Heats Flamesman, the invisible path to the Art Club's room, the Stained Apron, the conveyor belt puzzle and its three switches, the vent puzzle, the Bad Opinion Zone, the Royal Guards, and Mettaton's news report, where everything is a bomb and the clock is running. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane, Pyrope and the Royal Guards in Hotland, and the news report's bombs, defused in the DEFUSE ZONE. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -112,6 +113,18 @@ Mettaton's cooking show
Cooking with a killer robot The jetpack
Up the counter with the jetpack + + Sans's hot dog stand
A hot dog from Sans + The vent puzzle
The vent puzzle + + + The Royal Guards
The Royal Guards got a tip + The Royal Guards' team attack
Their team attack + + + Mettaton's news report
MTT News: two minutes to go + Defusing a bomb
Defuse it in the DEFUSE ZONE + ## How to play @@ -124,7 +137,7 @@ Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bo In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. The Tem Shop is the one shop that buys what you carry. When Undyne turns your SOUL green, it can't move: turn its shield with the arrows to block her spears. She can't be spared: run, and she'll chase you. -In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. +In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. On the second floor, the top conveyor belt carries you past three switches: press them one after another as you go by. In the vent puzzle, every panel you land on turns all the vents around, and the one at the top turns them back. To spare the Royal Guards, clean 02's armor, catch its green stars, then whisper to 01. In the news report, touch a bomb to face it, and Defuse it (or FIGHT it) while it's in the DEFUSE ZONE. Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. @@ -141,7 +154,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **The Ruins, Snowdin, Waterfall and Hotland's first floor, for now:** the elevator by the CORE's view ends the game, on a screen that says the rest of the Underground is still to come. The rest of Hotland, the CORE and New Home come next, one at a time. +* **The Ruins, Snowdin, Waterfall and Hotland's first two floors, for now:** the elevator past Mettaton's news report ends the game, on a screen that says the rest of the Underground is still to come. The rest of Hotland, the CORE and New Home come next, one at a time. * **No music or sound:** the calculator has no speaker. * **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. diff --git a/games/undertale/docs/defuse.png b/games/undertale/docs/defuse.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d6c305acb4e2214987e8753fc5f58b6fe71fa7 GIT binary patch literal 2217 zcmcJQeNYm38ppv@e94!x-1WV^_N=ko$k)WT%G|UR3liTpL(Rq0Kob=e6AX2aEnnKy zR5Vi?G!@Y_^u&Bw_hL;%(-nL}DceN^!xoVX1kYygzni(cx!L{aH_vzGnP;AP=JWmj z$d{n!jSMUe004kdV8A&T002C_TW{!T?Y^222QL6XFD3BYnJbw!>wHhl+b<93Oj1u8 zR{r^@++O=sDA=?5M^D(JGypJ~1a}BpX%S{eR|dpnJq93 zzz+)R$?Kb)WD!hlPF=8Wc{})8od#F)a0`RBz=6VHc(k8saa9Owy&-4*nDLX~36HQ&r5%QiA6B^FAN_CyIC zHpAg0r=)?szyacR{jcGlJD~Tke%7Wovt$o<*$lKse|)SJYr^*yOj&GAwPBF@r+;yG}+0J()`lY z^8eaQm5~8F2jiuqE`%EG(1Wb~h!!&?;vc-e%Q5gvDE#?xkMqu=e|QMdqV&to^+>ET z+`^|4aKE)ZY31#d9vJ6Rn;05eyJ>*c*RE{mfP0PB7B5Z~PJ>L5eY$aTAuDM<6kL2} zvKE`@G9oH!*p!DW#4o1qX;%VC-YCdT3H4RmMQ)q$jIr)p7Tp&G@xQB}f_~S_?sTd! zOCg%=l7$74Ylk~uLwuhU-R(-NY-VAJv3mY+deY* zg3235LP zGS-6@To|MD7KdOFlJ&)icKRgAdWLNkaM35WpKhDe`rP1olz#_v<>3zwjz`VBovk`N zOfD-M%b5Ek8;&U)Tv8tVH|zh83Gw^3-HKv_U*#=ufyW<#baz7yKs?qWR_$mY%m9w7 z$_=KT;a7!mz^xr3@^qcN8OH!Au5jL2;c+)fl9*AFb!aHsNBB2eIVFsj&NQ6ok<2C% zOUoHqrHw|Xh2R=OjnB!mCfl`?XgV3~!w5Ea{}EcTIW(TTCLI%f9@LM=5F-0v=5CJmR&KK_}64n^ZPE>LW&3~Hwi z9UC{^XiKsZZ88np7ZqlAP{qdF93_I`co;Rv&c;QMB&-Sjk_uy^7fT;M4FKR2U!pQk zSF>!>Z?v}L(jxjbA5@5PNt040rB(NFl+mc*^W}B|`N4`oN)K%VB35N4t(`Ic7-t=P z0(;VK5-~&HCI=g?d!U^s1ni!frh%lOyE#+v>Y6zx3S8#I>_XKpEox@WQU#MgRpIcyq}M{@V4ydHjsEAc}U@}K>32!(sSb#xORR&f%BWzT3tg zfaKfuyIdWJ$2YJSj`U2>d4bwe_ z=?@WB)zA)nBKQt8Dh7EKr43e86=^YFdP{n$)fG61(oV5+wrQ%YBI9}DJc8NJUS!x8 z!%64s*yB%^pLGVaY3O%rlFsP~{S8EQ^Mfrg7r`;gQi==*sJOaB2anMYZ)ng_e%y#O zZvu@r$u;q!_F|ET>UQltrtwJ;HLl8E+9jdI5HY^iRR;i2YIMGdYAzCbWbr=26zC5< J*M1gx`=3B-03iSX literal 0 HcmV?d00001 diff --git a/games/undertale/docs/guards.png b/games/undertale/docs/guards.png new file mode 100644 index 0000000000000000000000000000000000000000..e6f017a7d7c647af6a3a95ef79bb69329aee546c GIT binary patch literal 4898 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/hotdog.png b/games/undertale/docs/hotdog.png new file mode 100644 index 0000000000000000000000000000000000000000..33cbfd58dfdf3083d08d6b471624203d5a4de9b1 GIT binary patch literal 5374 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/news.png b/games/undertale/docs/news.png new file mode 100644 index 0000000000000000000000000000000000000000..9ebd5161bd6c90671bc8bd8383d23675889b5efe GIT binary patch literal 7897 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/rguards.png b/games/undertale/docs/rguards.png new file mode 100644 index 0000000000000000000000000000000000000000..09d61535c4ec84875c4f99258d3cf567d8a5d511 GIT binary patch literal 3720 zcmb7{c{CK>`^N_(gN$uNBEm<=62)W<*@cp^4Pz_W$C7=CELkf1(ojOEj4j48mPVPZ zlP$(>$Uc_ABsB7^-{<_k-#@>f?{m)UeV*r>d+xdCIrlvGeUomP>a(%%vj6}9HbVm) za{z!&^LI`G(f`(8W>RVZ0NBh>N6R9lVDkl`cBY9_&yWZdk-Ny#jDAv&db0Rl!S{4s zy+RQ$^&4qE^*|r$YwGSNB*#qu^w%I;bgK&Z_ddTPTK(D$hlssP+y zyhS|6U^%U!F|aTWIP^JB%GY(ID47o6t%U<5|9AQ_eo(zctH?%&9!4|f9PnBW5TB;} z-|+9f?j;85DtNfj(n^2fr81r(-u`msK$J<2h&W4>T2LDxWA&80 zDVr8`fxvz6UXsg00*3$WSbek~=uUL25*p2sA`CiUanJ$xSVP*9_s;c35e1uWg_JnM z$GkFH)+2R;3?cRqjH{8t3nX7r0p1p^z{_|EI@|FGMC0AjB2Lon%Q_f4YG#{TR`$oY zEzs*POqw{ZV1-G%{jZ9O^~1Rf^_xBw9KytCrbG&rC94({9q!g&F@GfEaQjnCaqd$U z7|bI0bsZ{N)yaK4Lq1Q!zV?TuS=5OvCULZLdPn~nda1&w9I`OBJM*>p@r-tbpZE4~ z!KjGuc6{mm!}VWv2Z$H1;dX@$L3KEk-bW&6TBx71Mk4tZYag$d210?mX-P_)`ir=M@}@oWM_k_ znO>iC^DmGV$@RCoKmos|D>Qfj+ZAlLbKtZ-S+HLGNj(Nmpj_66jzwNwg%eLvw5EeqPrNIZSI=Ntf?KK`&@Z za}ZpVcAgb9zVYprxT|TSw12E`XDPa3+N6(Ych!nV5i$PB=U#VhzTN}Y@s?(X%Q-C} ziZok;s&mcUYt*o@ka@?JQoHOZ|I!&-*bPu}V|r_(tMXugsn(ozt_9ZMjq}b(uMgyU zQRB=o5~Ur`B9o~$=k^p={nkt3WoOFwDw&opZsQa?KEK?o5c7?AmyLbf$HahBQzmk@ zi~?O#xr7ye$@YcHgz=6jcuUe|y44tjGH=}W@>}dB3f3;mm?%~=>*J%8Kk88$lpnvP z>`RO57Fp**XAgH)EZiT1GPP93Er7h9QH#)W?{($lAE}h*PFI7QgFJnLn1eEtoauxL zg-%h<7d|7y6a#&-fzFLo&-fB^+<-ujnnc4Dk&5<#6*3mF^0YEzMLsA+j&whpLs{dq zPsY$i5?UV&TppM;8dK9r|3zX7s!R61^WiO!k+#%DO#cqrAy1j@4WPaIe-2a};Tsd; zqz=RU?{Ov0Oa}~a%j&S6?MC|<$x`no4fJR$NO&SY=M(g**wVwv2g>6n;+*R5CiIL3 zQmO`!jaf3Ls2>=OuaI2}$)(yND=s3kCO|wjQ#qCj?E2(avLm(~EuuC|T*I zeT;$+p*nSG&Jxj-IT%)G4Krc9V1T}0hb45>mk zm8$y{(ZMf6h3coPoUW2r20h137*#|l6-;?M@0_e`lJ3DTQnnJChDyXCU2?Sx*?KKD z>;?7j^F<&!Bq}&D+-brixtT9Be6vDodgATcGgsv?aqop0ZnF_jsBx*uMj7iGXH#~V z=j!CKnV7Q12QLn0Ny)p0;FdLAEg;x0DlO2^M#MGdltJl&IhR`Cm!~tQUTNag zRfHpJ9x90qN6JHcB3`8A5ax0k^Fy6h4<^^u7t05s)%N+LW;TcrK6)}reO3sCgvfY7 z>)iWT7308kLRV%v_pmRpp|;&V`p}U|C#cLDPKrqzw^-OP&%xQ`E1UYGTxQ{>rplEG zu+7g+uWsUmb5?rN41lsBVPapF*VQ>{`XKs12^TrKt}C*}IYkzf1GU;G(lN4`BqwOC z#JHXZzJeFq0#2QJ{_B3!Ifvy<>fo?rP5#|8yuQ7r2|vSL^laXgyr|QTkrEZ!D2va& zvw9Gr7)e&#iMti!Drh10c-(~Z66=BZ;v<6Kg5;o#L&=^Klm{(M8nloi%J>Tg)9Sdr zJA9I@ZE*Tm8E!5b&Z7D|EzDMWrRMf`Tx+Z&I9VON&!pnA^E@xAeUJx87xV>j=Bevh zCv5@?z;IsSLP5rx90~WvZ{s96qO=(QJnyPi+VJZKT*^;{1?azlob>60+|Tj!XKHDv zmJLcf!!q(d;s8MqN=$+ikCI6dJHouLOK?}^m|ymFU3E13)q~N9?XN#d7?T>^EURT@`Z_M>Pz$llZj3r=7~D-K|*WUA3nrH4Tg9V9k7cm>=V z=TQ20yM$>{r|1|Y{-1h{eeU7Huj7euU(1+VhWSj&=jp6J z`5s+Uzpc&s)2`K?Gyk!dxt;KXVln!;6(cuVr4WOy&=IT$Ly3HC?N4Bh zQ$UptR*PH>C#nTB%0lb1yOr4#1-SAH=!^1P2eiwnbB8f&EnDdcYJVZgPO}LgTt7BH z|N62a8`spBEPw(5_H$`rI^V%xpbTCog3fy?V-|z&tdyy{7cdvk_+nJatEUNyc(pxjXwy?C=dW!}jbx0sDnSWDbcskFYw-$J0QXaCpxjhpi zeR&*`n$R}i*maBSYONTXXh)ZSvoJ=?C^$?V?w2Y_&_DBhzgbbh!(Gf@$=&qc1@C2C z^)K%+1^mTn`j!1itWY0y$nL08T1R2e#@*oPk@4ary@Mk6!9v4;O{bKsR=e8bX%&24 zsD0|8_7wdJ7xIgz%eRi}@sp4vn>HYrfF@KdoDnvJ57oAWcm=Rg3G2bjdB~jN#f8!qek>ZF< z^T?`$DwAwQ8o9%^?3wD5JNgee`&5s_P`ZUj76DIlBL&u#^19jE1P}fwaO55?#zX0_H5?TNN literal 0 HcmV?d00001 diff --git a/games/undertale/docs/ventpuzzle.png b/games/undertale/docs/ventpuzzle.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4e8d2e5e5820b0be91ce9cf6d286874e8c9fc3 GIT binary patch literal 11445 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 QkTGgQ@c#3Z4Z=9`Kd>O5ng9R* delta 39958 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 diff --git a/games/undertale/src/data.h b/games/undertale/src/data.h index a8b2be0f..cd95eb3e 100644 --- a/games/undertale/src/data.h +++ b/games/undertale/src/data.h @@ -222,66 +222,83 @@ #define SPR_TSUNDER_B 208 #define SPR_PYROPE_B 209 #define SPR_PYROPE_HURT 210 -#define SPR_UNDYNE_FALLEN 211 -#define SPR_SPEAR 212 -#define SPR_ARROW 213 -#define SPR_PLANE 214 -#define SPR_BOMB 215 -#define SPR_CLOUD 216 -#define SPR_BOLT 217 -#define SPR_UNDYNE_B 218 -#define SPR_NOTE 219 -#define SPR_DROP 220 -#define SPR_ARM 221 -#define SPR_DEBRIS 222 -#define SPR_AARON_B 223 -#define SPR_AARON_HURT 224 -#define SPR_WOSHUA_B 225 -#define SPR_WOSHUA_HURT 226 -#define SPR_MOLDBYGG_B 227 -#define SPR_SHYREN_B 228 -#define SPR_SHYREN_TURNED 229 -#define SPR_INTROIMAGE 230 -#define SPR_INTROLAST 231 -#define SPR_UNDERTALETITLE 232 -#define SPR_GAMEOVERBG 233 -#define SPR_FACE_TORIELTALK 234 -#define SPR_FACE_TORIELTALKSIDE 235 -#define SPR_FACE_TORIELHAPPYTALK 236 -#define SPR_FACE_TORIELWHAT 237 -#define SPR_FACE_TORIELWHATSIDE 238 -#define SPR_FACE_TORIELMAD 239 -#define SPR_FACE_TORIELCOLD 240 -#define SPR_FACE_TORIELSURPRISED 241 -#define SPR_FACE_TORIELEMBARRASSED 242 -#define SPR_FACE_TORIELGLASSES 243 -#define SPR_FACE_TORIELREVENGETALK 244 -#define SPR_FACE_TORIELSCARED 245 -#define SPR_FACE_TORIELBLINK 246 -#define SPR_FACE_TORIELHAPPYBLINK 247 -#define SPR_FACE_TORIELBODY 248 -#define SPR_FACE_SANS 249 -#define SPR_FACE_SANSCHUCKLE 250 -#define SPR_FACE_SANSWINK 251 -#define SPR_FACE_PAPYRUS 252 -#define SPR_FACE_PAPYRUSEVIL 253 -#define SPR_FACE_PAPYRUSLAUGH 254 -#define SPR_FACE_PAPYRUSMAD 255 -#define SPR_FACE_PAPYRUSSIDE 256 -#define SPR_FACE_ALPHYS 257 -#define SPR_FLOWEYNICE 258 -#define SPR_FLOWEYNICESIDE 259 -#define SPR_FLOWEYSASSY 260 -#define SPR_FLOWEYEVIL 261 -#define SPR_FLOWEYGRIN 262 -#define SPR_FLOWEYPLAIN 263 -#define SPR_FLOWEYPISSED 264 -#define SPR_FLOWEYWINK 265 -#define SPR_FLOWEYLAUGH 266 -#define SPR_FLOWEYHURT 267 -#define SPR_FLOWEYTORIEL 268 -#define SPR_FLOWEYTORIEL2 269 -#define SPR_FLOWEYSIDESHOCK 270 +#define SPR_RG01_OW 211 +#define SPR_RG02_OW 212 +#define SPR_RG01_B 213 +#define SPR_RG02_B 214 +#define SPR_MTT_NEWS 215 +#define SPR_BOMB_BALL 216 +#define SPR_BOMB_DOG 217 +#define SPR_BOMB_PRESENT 218 +#define SPR_BOMB_WATER 219 +#define SPR_BOMB_SCRIPT 220 +#define SPR_BOMB_GAME 221 +#define SPR_NEWS_SCRIPT 222 +#define SPR_APRON 223 +#define SPR_BOMB_B 224 +#define SPR_DOGBOMB_B 225 +#define SPR_WATER_B 226 +#define SPR_UNDYNE_FALLEN 227 +#define SPR_SPEAR 228 +#define SPR_ARROW 229 +#define SPR_PLANE 230 +#define SPR_BOMB 231 +#define SPR_CLOUD 232 +#define SPR_BOLT 233 +#define SPR_UNDYNE_B 234 +#define SPR_NOTE 235 +#define SPR_DROP 236 +#define SPR_ARM 237 +#define SPR_DEBRIS 238 +#define SPR_STAR 239 +#define SPR_AARON_B 240 +#define SPR_AARON_HURT 241 +#define SPR_WOSHUA_B 242 +#define SPR_WOSHUA_HURT 243 +#define SPR_MOLDBYGG_B 244 +#define SPR_SHYREN_B 245 +#define SPR_SHYREN_TURNED 246 +#define SPR_INTROIMAGE 247 +#define SPR_INTROLAST 248 +#define SPR_UNDERTALETITLE 249 +#define SPR_GAMEOVERBG 250 +#define SPR_FACE_TORIELTALK 251 +#define SPR_FACE_TORIELTALKSIDE 252 +#define SPR_FACE_TORIELHAPPYTALK 253 +#define SPR_FACE_TORIELWHAT 254 +#define SPR_FACE_TORIELWHATSIDE 255 +#define SPR_FACE_TORIELMAD 256 +#define SPR_FACE_TORIELCOLD 257 +#define SPR_FACE_TORIELSURPRISED 258 +#define SPR_FACE_TORIELEMBARRASSED 259 +#define SPR_FACE_TORIELGLASSES 260 +#define SPR_FACE_TORIELREVENGETALK 261 +#define SPR_FACE_TORIELSCARED 262 +#define SPR_FACE_TORIELBLINK 263 +#define SPR_FACE_TORIELHAPPYBLINK 264 +#define SPR_FACE_TORIELBODY 265 +#define SPR_FACE_SANS 266 +#define SPR_FACE_SANSCHUCKLE 267 +#define SPR_FACE_SANSWINK 268 +#define SPR_FACE_PAPYRUS 269 +#define SPR_FACE_PAPYRUSEVIL 270 +#define SPR_FACE_PAPYRUSLAUGH 271 +#define SPR_FACE_PAPYRUSMAD 272 +#define SPR_FACE_PAPYRUSSIDE 273 +#define SPR_FACE_ALPHYS 274 +#define SPR_FLOWEYNICE 275 +#define SPR_FLOWEYNICESIDE 276 +#define SPR_FLOWEYSASSY 277 +#define SPR_FLOWEYEVIL 278 +#define SPR_FLOWEYGRIN 279 +#define SPR_FLOWEYPLAIN 280 +#define SPR_FLOWEYPISSED 281 +#define SPR_FLOWEYWINK 282 +#define SPR_FLOWEYLAUGH 283 +#define SPR_FLOWEYHURT 284 +#define SPR_FLOWEYTORIEL 285 +#define SPR_FLOWEYTORIEL2 286 +#define SPR_FLOWEYSIDESHOCK 287 #define AREA_RUINS 0 #define AREA_SNOWDIN 1 #define AREA_SNOWTOWN 2 @@ -427,10 +444,20 @@ #define ROOM_HT_VENTISLE 137 #define ROOM_HT_COOKING 138 #define ROOM_HT_COREVIEW 139 +#define ROOM_HT_HOTDOG 140 +#define ROOM_HT_CROSS2 141 +#define ROOM_HT_ARTCLUB 142 +#define ROOM_HT_APRON 143 +#define ROOM_HT_BELTPUZ 144 +#define ROOM_HT_VENTPUZ 145 +#define ROOM_HT_BOZ 146 +#define ROOM_HT_GUARDS 147 +#define ROOM_HT_NEWS 148 +#define ROOM_HT_COREVIEW2 149 #define FONT_MAIN 0 #define FONT_MENU 1 #define FONT_SMALL 2 -#define NUM_SPRITES 271 -#define NUM_ROOMS 140 +#define NUM_SPRITES 288 +#define NUM_ROOMS 150 #define NUM_FONTS 3 #endif diff --git a/games/undertale/src/events.c b/games/undertale/src/events.c index 8ab2f0ce..8a326c3f 100644 --- a/games/undertale/src/events.c +++ b/games/undertale/src/events.c @@ -120,5 +120,7 @@ int event_run(Ev *c) { if (r >= 0) return r; r = ht1_event(c); if (r >= 0) return r; + r = ht2_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index 8484ef7b..e25ae925 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -13,7 +13,7 @@ enum { ACTOR_MK, ACTOR_UNDYNE, ACTOR_SEED, ACTOR_BLOOM, ACTOR_SPEAR, ACTOR_ONION, ACTOR_DEBRIS, ACTOR_SHYREN, ACTOR_MADDUMMY, ACTOR_BIRD, ACTOR_TEMMIE, /* Hotland */ - ACTOR_ALPHYS, ACTOR_METTATON, ACTOR_GUARDS, ACTOR_VENT, ACTOR_LASER + ACTOR_ALPHYS, ACTOR_METTATON, ACTOR_GUARDS, ACTOR_VENT, ACTOR_LASER, ACTOR_RG01, ACTOR_RG02, ACTOR_BOMB, ACTOR_FIELD }; enum { @@ -47,6 +47,8 @@ enum { EV_DEADEND, EV_MK_CHASM, EV_ARENA, EV_UNDYNE_CATCH, EV_PAP_NEON, EV_HOT_UNDYNE, EV_HOT_COOLER, /* ht1.c */ EV_HT_LAB, EV_HT_FRIDGE, EV_VENT, EV_HT_CALL, EV_SHOOT, EV_HT_COOK, EV_HT_ELEVATOR, EV_LASER_HIT, EV_HT_ITEM, + /* ht2.c */ + EV_HOTDOG, EV_HEATS, EV_APRON, EV_BELT_SWITCH, EV_HT2_CALL, EV_VENTPUZ, EV_GUARDS, EV_NEWS, EV_BOMB, EV_HT2_ELEVATOR, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index 6fbc4ead..fc129954 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -136,7 +136,17 @@ enum { F_HT_PUZ_L, F_HT_BLUE_OFF, /* the blue laser before the left puzzle switched off */ F_HT_COOK, /* the cooking show: 1 the substitute reached, 2 out of time */ - F_HT_FLOOR1, /* the elevator up from Hotland's first floor reached (where the game now ends) */ + F_HT_FLOOR1, /* the elevator up from Hotland's first floor taken */ + F_HT_HEATS, /* Heats Flamesman's name heard */ + F_HT_APRON, /* the Stained Apron taken */ + F_HT_CALL_BELT, /* Alphys's calls: the belt puzzle, by the CORE again */ + F_HT_CALL_CORE2, + F_HT_CALL_BOZ, + F_HT_BELT, /* the belt puzzle's force field off */ + F_HT_VENTPUZ, /* the vent puzzle crossed */ + F_HT_GUARDS, /* the Royal Guards: 1 spared, 2 killed */ + F_HT_NEWS, /* Mettaton's news report: 1 every bomb defused, 2 out of time */ + F_HT_FLOOR2, /* the elevator up from the second floor reached (where the game now ends) */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/hotland.h b/games/undertale/src/hotland.h index 8b69b216..546d273a 100644 --- a/games/undertale/src/hotland.h +++ b/games/undertale/src/hotland.h @@ -1,4 +1,5 @@ -/* Undertale: Hotland (ht1.c: its first floor), its monsters (htmon.c), Mettaton's shows (htshows.c). */ +/* Undertale: Hotland (ht1.c, ht2.c: its first and second floors), its monsters (htmon.c), Mettaton's shows + * (htshows.c). */ #ifndef UT_HOTLAND_H #define UT_HOTLAND_H #include "event.h" @@ -6,4 +7,9 @@ void ht1_setup(int room, int from); int ht1_event(Ev *c); /* -1: not one of its */ void ht1_update(void); /* the belts, the lasers */ void ht1_draw(void); /* under everything: the lasers, the turning vents' arrows */ +void ht2_setup(int room, int from); +int ht2_event(Ev *c); +void ht2_update(void); /* the belt puzzle's switches, the news report's bombs and clock */ +void ht2_draw(void); /* under everything: force fields, the switches, the vent puzzle's arrows */ +void ht2_draw_top(void); /* over everything: the news report's clock */ #endif diff --git a/games/undertale/src/ht1.c b/games/undertale/src/ht1.c index 2279de8f..3d322098 100644 --- a/games/undertale/src/ht1.c +++ b/games/undertale/src/ht1.c @@ -45,6 +45,13 @@ static const Belt belts[] = { {ROOM_HT_BELT1, 2904, 5450, 36, 440, 0, -2}, {ROOM_HT_BELT1, 2980, 5450, 36, 440, 0, 2}, /* the second: up the left side, down the right */ {ROOM_HT_BELT2, 2840, 4730, 120, 450, 0, -1}, {ROOM_HT_BELT2, 2980, 4730, 120, 450, 0, 1}, + /* the second floor: the belt puzzle's (the top one runs left, the bottom right: as fast as Frisk walks, so + * walking against one stands still); round the vent puzzle (down, along, up: back to its start); the news + * room's, up to its vent */ + {ROOM_HT_BELTPUZ, 5130, 2340, 300, 50, -3, 0}, {ROOM_HT_BELTPUZ, 5130, 2440, 300, 50, 3, 0}, + {ROOM_HT_VENTPUZ, 4420, 2310, 60, 290, 0, 3}, {ROOM_HT_VENTPUZ, 4420, 2560, 360, 40, 3, 0}, + {ROOM_HT_VENTPUZ, 4720, 2430, 60, 170, 0, -3}, + {ROOM_HT_NEWS, 4300, 1790, 100, 160, 0, -2}, }; static void belts_update(void) { if (event_running()) return; @@ -81,6 +88,9 @@ static const Vent vents[] = { {ROOM_HT_VENTISLE, 4940, 3120, DIR_RIGHT, {[DIR_RIGHT] = {5051, 3106}}}, {ROOM_HT_VENTISLE, 5060, 3120, DIR_RIGHT, {[DIR_RIGHT] = {5171, 3106}}}, {ROOM_HT_VENTISLE, 5180, 3120, DIR_RIGHT, {[DIR_RIGHT] = {5312, 3106}}}, + /* the news room's: up to the top room's corner, and from there over to the rest of it */ + {ROOM_HT_NEWS, 4350, 1722, DIR_UP, {[DIR_UP] = {4350, 1600}}}, + {ROOM_HT_NEWS, 4320, 1600, DIR_LEFT, {[DIR_LEFT] = {4200, 1590}}}, }; #define NVENTS ((int)(sizeof vents / sizeof vents[0])) /* the way a vent blows now */ @@ -110,6 +120,8 @@ static const Laser lasers[] = { {ROOM_HT_LASERS, 3258, 3796, 62, 30, 0}, {ROOM_HT_LASERS, 3425, 3796, 62, 40, 1}, {ROOM_HT_LASERS, 3567, 3796, 62, 30, 0}, {ROOM_HT_LASERS, 3717, 3796, 62, 40, 1}, {ROOM_HT_LASERS, 3840, 3796, 62, 30, 0}, {ROOM_HT_LASERS, 3958, 3796, 62, 40, 1}, + /* the news room's bottom: blue, orange, blue */ + {ROOM_HT_NEWS, 3965, 1946, 56, 16, 1}, {ROOM_HT_NEWS, 4025, 1946, 56, 16, 0}, {ROOM_HT_NEWS, 4085, 1946, 56, 16, 1}, }; static int laser_cool; static int laser_x(int i) { @@ -163,8 +175,8 @@ void ht1_update(void) { /* ---------------------------------------------------------------- the rooms */ void ht1_setup(int room, int from) { (void)from; - if (room < ROOM_HT_LABFRONT || room > ROOM_HT_COREVIEW) return; vents_setup(); + if (room < ROOM_HT_LABFRONT || room > ROOM_HT_COREVIEW) return; switch (room) { case ROOM_HT_LABFRONT: { obj_save(1045, 6243, "* (The heat of Hotland fills you with determination.)"); @@ -415,12 +427,10 @@ static int ev_cook(Ev *c) { static int ev_elevator(Ev *c) { EV_BEGIN; - NARRATE("* (An elevator up to the next floor.)\n* (Get in?)@Yes@No"); + NARRATE("* (The elevator up.)\n* (Get in?)@Yes@No"); if (CHOICE() == 1) return 1; set_flag(F_HT_FLOOR1, 1); - sv.room = (int16_t)g_room, sv.x = 6910, sv.y = 3110; - save_write_auto(); - menu_end_open(); + FADE_TO(ROOM_HT_HOTDOG, 6966, 2380, DIR_DOWN); EV_END; } diff --git a/games/undertale/src/ht2.c b/games/undertale/src/ht2.c new file mode 100644 index 00000000..a4744fe2 --- /dev/null +++ b/games/undertale/src/ht2.c @@ -0,0 +1,501 @@ +/* Hotland, its second floor: out of the elevator, Sans's hot dog stand and Heats Flamesman; the crossroads (the + * invisible path up to the Art Club's room, the Stained Apron down south); the conveyor belt puzzle and the vent + * puzzle; the Bad Opinion Zone; the Royal Guards at the bend; Mettaton's news report and its six bombs; the CORE + * again, and the elevator up. (As the Undertale Wiki describes them; what they say is ours, in short.) */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "gfx.h" +#include "hotland.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "res.h" +#include "save.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } +static Obj *thing(int x, int y, int w, int h, int event, int name, int arg) { + Obj *o = obj_trigger(x, y, w, h, event, name); + if (o) o->flags = OF_TALK | OF_SOLID, o->arg = (int16_t)arg; + return o; +} +static Obj *call_at(int x, int y, int w, int h, int arg) { + Obj *t = obj_trigger(x, y, w, h, EV_HT2_CALL, ACTOR_TRIGGER); + if (t) t->arg = (int16_t)arg; + return t; +} +/* a force field: a wall of light across the way */ +static void field(int x, int y, int w, int h) { + Obj *o = obj_trigger(x, y, w, h, EV_NONE, ACTOR_FIELD); + if (o) o->flags = OF_SOLID; +} +static void fields_down(void) { + for (Obj *o = obj_find(ACTOR_FIELD); o; o = obj_find(ACTOR_FIELD)) gone(o); +} +static void draw_fields(void) { + for (int i = 0; i < MAX_OBJS; i++) { + const Obj *o = &objs[i]; + if (o->kind == OBJ_NONE || o->name != ACTOR_FIELD) continue; + uint16_t c = (g_frame / 3) % 2 ? rgb565(0x30FF60) : rgb565(0x10A040); + gfx_rect(o->x - cam_x, o->y - cam_y, o->bw, o->bh, c, 200); + } +} + +/* ---------------------------------------------------------------- the conveyor belt puzzle */ +/* three switches over the top belt (it runs left): pressed right to left, each soon after the last */ +#define SW_Y 2322 +#define SW_WINDOW 45 +static const int16_t sw_x[3] = {5200, 5285, 5370}; +static int sw_lit, sw_t; /* lit: a bit each; t: frames since the last press */ + +/* ---------------------------------------------------------------- the vent puzzle */ +/* eight platforms, each with its vents (the ways they blow, by DIR_*); landing on a panel turns every vent the other + * way, landing on the top one turns them back; blown off where there's no platform, Frisk lands on the belts + * below, or back at the start */ +typedef struct { + int16_t x, y; + uint8_t vents, panel; /* panel: 1 turns the vents, 2 turns them back */ +} Plat; +#define VB(d) (1 << (d)) +static const Plat plats[] = { + {4620, 2160, VB(DIR_DOWN), 2}, /* the top one */ + {4520, 2260, VB(DIR_RIGHT), 1}, /* turned, it blows left: the way out */ + {4620, 2260, VB(DIR_UP) | VB(DIR_RIGHT), 1}, + {4720, 2260, VB(DIR_LEFT), 1}, /* the start */ + {4520, 2360, 15, 1}, + {4620, 2360, VB(DIR_UP) | VB(DIR_DOWN), 1}, + {4520, 2460, 15, 0}, + {4620, 2460, 15, 0}, +}; +#define NPLATS ((int)(sizeof plats / sizeof plats[0])) +#define VP_START_X 4740 +#define VP_START_Y 2340 +static const int8_t ddx[4] = {0, 0, -1, 1}, ddy[4] = {1, -1, 0, 0}; +static bool vp_turned; + +/* ---------------------------------------------------------------- Mettaton's news report */ +enum { NEWS_DARK, NEWS_PICK, NEWS_TIMER, NEWS_OVER }; +#define NEWS_TIME (120 * 30) +static int news, news_t, news_why; +static uint8_t defused; +/* where each bomb's feet are, t frames into the show (the dog, the game and the present stay put: the map shows + * them) */ +static void bomb_at(int k, int t, int *x, int *y) { + switch (k) { + case BOMB_DOG: *x = 4015, *y = 1730; break; + case BOMB_GAME: *x = 3918, *y = 1978; break; + case BOMB_PRESENT: *x = 4366, *y = 1588; break; + case BOMB_SCRIPT: *x = 4332, *y = 1946 - t % 150; break; /* riding the belt up */ + case BOMB_BALL: { /* bouncing along the top room */ + int p = t % 300, b = gfx_sin(t * 256 / 30 % 256); + *x = 3950 + 250 * (p < 150 ? p : 300 - p) / 150, *y = 1604 - 18 * (b < 0 ? -b : b) / 1024; + break; + } + default: /* the glass of water darts every way */ + *x = 4070 + 130 * gfx_sin(t * 3 % 256) / 1024, *y = 1626 + 24 * gfx_sin((t * 5 + 64) % 256) / 1024; + break; + } +} +static bool bomb_moves(int k) { return k == BOMB_SCRIPT || k == BOMB_BALL || k == BOMB_WATER; } +static uint16_t bomb_spr(int k) { + if (k == BOMB_SCRIPT) return news >= NEWS_TIMER ? SPR_BOMB_SCRIPT : SPR_NEWS_SCRIPT; + return k == BOMB_BALL ? SPR_BOMB_BALL : SPR_BOMB_WATER; +} +static int news_frame; +static void bombs_setup(void) { + for (int k = 0; k < BOMB_COUNT; k++) { + int x, y; + bomb_at(k, news_frame, &x, &y); + Obj *o; + if (bomb_moves(k)) { + o = obj_deco(bomb_spr(k), x, y, false); + if (o) o->name = ACTOR_BOMB, obj_set_box(o, -10, -16, 20, 16), o->event = EV_BOMB; + } else { + /* (the dog lies along the wall: its box reaches down to where Frisk can stand) */ + o = obj_trigger(x - 12, y - 18, 24, k == BOMB_DOG ? 26 : 18, EV_BOMB, ACTOR_BOMB); + } + if (!o) continue; + o->arg = (int16_t)k; + /* before the show: things to report on; during it, bombs to touch; defused, nothing */ + o->flags = (uint16_t)((o->flags & ~(OF_TOUCH | OF_TALK | OF_SOLID)) | + (defused & (1 << k) || news == NEWS_OVER || flag(F_HT_NEWS) ? 0 + : news == NEWS_TIMER ? OF_TOUCH : OF_TALK | (bomb_moves(k) ? 0 : OF_SOLID))); + } +} +static void bombs_arm(void) { + for (int i = 0; i < MAX_OBJS; i++) { + Obj *o = &objs[i]; + if (o->kind != OBJ_NONE && o->name == ACTOR_BOMB) o->flags = (uint16_t)((o->flags & ~(OF_TALK | OF_SOLID)) | OF_TOUCH); + } +} +static void bombs_move(void) { + if (news == NEWS_DARK) return; + news_frame++; + for (int i = 0; i < MAX_OBJS; i++) { + Obj *o = &objs[i]; + if (o->kind == OBJ_NONE || o->name != ACTOR_BOMB || !bomb_moves(o->arg) || (defused & (1 << o->arg))) continue; + int x, y; + bomb_at(o->arg, news_frame, &x, &y); + o->x = (int16_t)x, o->y = (int16_t)y, o->spr[0] = bomb_spr(o->arg); + } +} +static void news_fields(void) { + field(3796, 1756, 6, 48); /* back west */ + field(4580, 1700, 64, 6); /* on, up north */ +} + +/* ---------------------------------------------------------------- drawn, and watched */ +void ht2_draw(void) { + if (g_room < ROOM_HT_HOTDOG || g_room > ROOM_HT_COREVIEW2) return; + draw_fields(); + if (g_room == ROOM_HT_BELTPUZ) + for (int i = 0; i < 3; i++) { + bool on = flag(F_HT_BELT) || (sw_lit >> i & 1); + gfx_rect(sw_x[i] - 4 - cam_x, SW_Y + 4 - cam_y, 8, 6, on ? rgb565(0x40FF40) : rgb565(0x802020), 255); + } + if (g_room == ROOM_HT_VENTPUZ) { + static const uint16_t arrow[4] = {SPR_VENT_D, SPR_VENT_U, SPR_VENT_L, SPR_VENT_R}; + for (int p = 0; p < NPLATS; p++) + for (int g = 0; g < 4; g++) + if (plats[p].vents & VB(g)) + gfx_sprite(arrow[g ^ vp_turned], 0, plats[p].x + 20 + ddx[g] * 20 - cam_x, plats[p].y + 20 + ddy[g] * 20 - cam_y, 0, 255); + } +} + +/* over everything: the news report's clock */ +void ht2_draw_top(void) { + if (g_room != ROOM_HT_NEWS || news != NEWS_TIMER) return; + char s[16]; + int secs = (news_t + 29) / 30; + snprintf(s, sizeof s, "%d:%02d", secs / 60, secs % 60); + gfx_rect(4, 4, 52, 18, C_BLACK, 200); + gfx_text(FONT_MAIN, 10, 6, s, secs <= 20 ? C_RED : C_WHITE, 255); +} + +void ht2_update(void) { + if (g_room < ROOM_HT_HOTDOG || g_room > ROOM_HT_COREVIEW2) return; + if (sw_t < 1000) sw_t++; + if (sw_lit && sw_t > SW_WINDOW && !flag(F_HT_BELT)) sw_lit = 0; + if (g_room == ROOM_HT_NEWS) { + bombs_move(); + if (news == NEWS_TIMER && !event_running()) { + if (defused == (1 << BOMB_COUNT) - 1) news_why = 1, event_start(EV_NEWS, NULL); + else if (--news_t <= 0) news_why = 2, event_start(EV_NEWS, NULL); + } + } +} + +/* ---------------------------------------------------------------- the rooms */ +static Obj *obj_rg(int name, int x, int y) { + static const uint16_t s1[4] = {SPR_RG01_OW, SPR_RG01_OW, SPR_RG01_OW, SPR_RG01_OW}; + static const uint16_t s2[4] = {SPR_RG02_OW, SPR_RG02_OW, SPR_RG02_OW, SPR_RG02_OW}; + Obj *o = obj_npc(name, name == ACTOR_RG01 ? s1 : s2, x, y, DIR_RIGHT, 0); + if (o) o->flags &= (uint16_t)~OF_SOLID; + return o; +} + +void ht2_setup(int room, int from) { + if (room < ROOM_HT_HOTDOG || room > ROOM_HT_COREVIEW2) return; + switch (room) { + case ROOM_HT_HOTDOG: + thing(6585, 2346, 58, 36, EV_HOTDOG, ACTOR_ITEM, 0); + thing(7056, 2420, 28, 30, EV_HEATS, ACTOR_ITEM, 0); + thing(6940, 2330, 80, 64, EV_HT2_ELEVATOR, ACTOR_DOOR, 0); + obj_sign(6696, 2364, 30, 30, "* Snow on a hot dog stand?\n* Here, in Hotland?|* Guess somebody's too lazy\n to clean it off."); + obj_sign(6618, 2436, 28, 30, "* TOASTY BUN!"); + break; + case ROOM_HT_ARTCLUB: + obj_sign(5896, 2146, 30, 30, "* (ART CLUB ROOM.)\n* (It meets on one night a year,\n at one hour only.)"); + break; + case ROOM_HT_APRON: + if (!flag(F_HT_APRON)) { + Obj *p = obj_deco(SPR_APRON, 5836, 2618, false); + if (p) p->name = ACTOR_ITEM; + Obj *t = obj_trigger(5832, 2614, 30, 26, EV_APRON, ACTOR_ITEM); + if (t) t->flags = OF_TALK; + } + break; + case ROOM_HT_BELTPUZ: + if (!flag(F_HT_CALL_BELT)) call_at(5640, 2370, 12, 70, 0); + if (!flag(F_HT_BELT)) field(5066, 2370, 6, 70); + for (int i = 0; i < 3; i++) { + Obj *s = obj_trigger(sw_x[i] - 12, SW_Y, 24, 22, EV_BELT_SWITCH, ACTOR_ITEM); + if (s) s->flags = OF_TALK, s->arg = (int16_t)i; + } + sw_lit = 0; + break; + case ROOM_HT_VENTPUZ: + for (int p = 0; p < NPLATS; p++) + for (int g = 0; g < 4; g++) + if (plats[p].vents & VB(g)) { + Obj *o = obj_trigger(plats[p].x + 24 + ddx[g] * 20, plats[p].y + 24 + ddy[g] * 20, 12, 12, EV_VENTPUZ, ACTOR_VENT); + if (o) o->arg = (int16_t)(p * 4 + g); + } + break; + case ROOM_HT_BOZ: + obj_save(4005, 2252, "* (The smell of melted cheese fills you with determination.)"); + obj_sign(3918, 2240, 36, 32, "* (A safe on a little table.)\n* (The cheese inside has melted\n onto the table.)"); + obj_sign(3958, 2246, 16, 20, "* (A mouse hole.)\n* (Someone wants that cheese.)"); + if (!flag(F_HT_CALL_BOZ)) call_at(4300, 2250, 12, 80, 2); + break; + case ROOM_HT_GUARDS: + if (!flag(F_HT_GUARDS)) obj_trigger(3560, 2240, 10, 100, EV_GUARDS, ACTOR_TRIGGER); + break; + case ROOM_HT_NEWS: + if (!flag(F_HT_NEWS)) { + /* (come in from elsewhere mid-show: only a SAVE loaded, as its exits are shut; it starts over) */ + if (from != ROOM_HT_NEWS) news = NEWS_DARK; + if (news == NEWS_DARK) { + defused = 0, news_frame = 0; + obj_trigger(3880, 1750, 10, 60, EV_NEWS, ACTOR_TRIGGER); + } else news_fields(); + Obj *m = obj_deco(SPR_MTT_NEWS, 4186, 1781, true); + if (m) m->name = ACTOR_METTATON, m->flags |= OF_ANIM, m->anim_speed = 8, obj_set_box(m, -16, -10, 32, 10); + } + bombs_setup(); + break; + case ROOM_HT_COREVIEW2: + if (!flag(F_HT_CALL_CORE2)) call_at(4596, 1420, 48, 10, 3); + thing(3740, 1300, 80, 60, EV_HT2_ELEVATOR, ACTOR_DOOR, 1); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_hotdog(Ev *c) { + EV_BEGIN; + SAY(FACE_SANS, "* hey. hot dogs, 30G apiece.\n* want one?@Buy@No thanks"); + if (CHOICE() == 0) { + if (sv.gold < 30) { + SAY(FACE_SANS, "* you're a little short, kid."); + } else if (!item_add(ITEM_HOT_DOG)) { + SAY(FACE_SANS, "* hands full, huh?\n* come back when they aren't."); + } else { + sv.gold = (uint16_t)(sv.gold - 30); + SAY(FACE_SANS, "* here you go. enjoy."); + } + } + EV_END; +} + +static int ev_heats(Ev *c) { + EV_BEGIN; + if (!flag(F_HT_HEATS)) { + set_flag(F_HT_HEATS, 1); + NARRATE("* I'M HEATS FLAMESMAN!!!\n* REMEMBER MY NAME!!!"); + } else { + NARRATE("* DON'T YOU FORGET IT!!!\n* HEATS FLAMESMAN!!!"); + } + EV_END; +} + +static int ev_apron(Ev *c) { + EV_BEGIN; + if (!item_add(ITEM_STAINED_APRON)) { + NARRATE("* (You're carrying too much.)"); + return 1; + } + set_flag(F_HT_APRON, 1); + NARRATE("* (You got the Stained Apron.)"); + gone(obj_get(ACTOR_ITEM)); + if (c->self) gone(c->self); + EV_END; +} + +static int ev_belt_switch(Ev *c) { + int next = !sw_lit ? 2 : sw_lit == 4 ? 1 : 0; + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (flag(F_HT_BELT)) return 1; + /* right to left: the first restarts it, one out of turn spoils it */ + if (c->v[0] == next) sw_lit |= 1 << c->v[0]; + else sw_lit = c->v[0] == 2 ? 4 : 0; + sw_t = 0; + if (sw_lit != 6) return 1; + /* two of three: Alphys calls to cheer Frisk on, just as the last one goes by */ + SAY(FACE_ALPHYS, "* Ring...|* Now! Hit the last one now!|* ...|* Oh no. I made you miss it.|* Um! Actually, only the\n first two mattered!\n* Really!|* I'll just turn off the\n field."); + set_flag(F_HT_BELT, 1); + fields_down(); + NARRATE("* (The force field switches off.)"); + EV_END; +} + +static int ev_ventpuz(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg / 4 : 0; + c->v[1] = (c->self ? c->self->arg % 4 : 0) ^ vp_turned; + c->v[2] = -1; + for (int q = 0; q < NPLATS; q++) + if (plats[q].x == plats[c->v[0]].x + ddx[c->v[1]] * 100 && plats[q].y == plats[c->v[0]].y + ddy[c->v[1]] * 100) c->v[2] = q; + c->v[3] = plats[c->v[0]].x + 20 + ddx[c->v[1]] * 100, c->v[4] = plats[c->v[0]].y + 6 + ddy[c->v[1]] * 100; + pl.dir = (uint8_t)c->v[1]; + if (c->v[2] < 0 && !world_walkable(c->v[3] + 3, c->v[4] + 20, 14, 9, -1)) { + /* nowhere to land: off into the haze, and back at the start */ + PL_WALK(plats[c->v[0]].x + 20 + ddx[c->v[1]] * 40, plats[c->v[0]].y + 6 + ddy[c->v[1]] * 40, 7); + vp_turned = false; + FADE_TO(ROOM_HT_VENTPUZ, VP_START_X, VP_START_Y, DIR_UP); + return 1; + } + PL_WALK(c->v[3], c->v[4], 7); + if (c->v[2] >= 0) { + if (plats[c->v[2]].panel == 2) vp_turned = false; + else if (plats[c->v[2]].panel) vp_turned = !vp_turned; + } else if (c->v[3] < plats[1].x) { + set_flag(F_HT_VENTPUZ, 1); /* (out, west) */ + } + EV_END; +} + +/* Alphys's calls: 0 the belt puzzle ahead, 2 in the Bad Opinion Zone, 3 by the CORE again */ +static int ev_call(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (c->self) gone(c->self); + switch (c->v[0]) { + case 0: + set_flag(F_HT_CALL_BELT, 1); + SAY(FACE_ALPHYS, "* Ring...|* It's Alphys! There's a belt\n puzzle up ahead.|* Ride the top belt, and hit\n all three switches, one\n after another.|* Don't worry, I'll help you\n with the timing!"); + break; + case 2: + set_flag(F_HT_CALL_BOZ, 1); + SAY(FACE_ALPHYS, "* Ring...|* Oh! H-hi. Sorry, I'm in\n a bad mood.|* The sequel to my favorite\n anime came out, and... ugh.|* They got EVERYTHING wrong.\n* Don't get me started.|* ...|* I already started, huh.\n* Sorry! Bye!"); + break; + case 3: + set_flag(F_HT_CALL_CORE2, 1); + SAY(FACE_ALPHYS, "* Ring...|* Phew! You made it through\n the news.|* Mettaton's out of control.|* The elevator's just ahead.\n* Keep going!"); + break; + } + EV_END; +} + +static int ev_guards(Ev *c) { + Obj *a = obj_get(ACTOR_RG01), *b = obj_get(ACTOR_RG02); + EV_BEGIN; + if (c->self) gone(c->self); + /* two of the Royal Guard, from round the bend */ + a = obj_rg(ACTOR_RG01, 3300, pl.y + 29); + b = obj_rg(ACTOR_RG02, 3250, pl.y + 29); + WALK_TO(b, pl.x - 70, pl.y + 29, 3); + WALK(a, pl.x - 30, pl.y + 29, 3); + NARRATE("* Hey! You! Hold up!|* So, like, we got a tip about a\n human in a striped shirt.\n* Around here, right now.|* Scary, huh? But stay chill.\n* We'll get you somewhere safe."); + NARRATE("* ...|* Huh? What is it, bro?|* Their shirt? What about it?|* ...|* Oh. OH.|* Dude, this is, like, SO\n awkward.|* We totally have to fight\n you now."); + BATTLE(FORM_RGUARDS); + a = obj_get(ACTOR_RG01), b = obj_get(ACTOR_RG02); + if (bt.mon[0].killed || bt.mon[1].killed) { + set_flag(F_HT_GUARDS, 2); + if (bt.mon[0].killed) gone(a); + if (bt.mon[1].killed) gone(b); + return 1; + } + set_flag(F_HT_GUARDS, 1); + NARRATE("* So, uh... we're gonna go get\n some ice cream now.|* Later, dude!"); + WALK_TO(b, 3230, b->y, 3); + WALK(a, 3230, a->y, 3); + gone(obj_get(ACTOR_RG01)); + gone(obj_get(ACTOR_RG02)); + EV_END; +} + +static int ev_news(Ev *c) { + Obj *m = obj_get(ACTOR_METTATON); + EV_BEGIN; + if (c->self) gone(c->self); + c->v[0] = news_why; + if (c->v[0] == 0) { + /* the lights, and the show */ + NARRATE("* (It's pitch dark in here.)"); + SAY(FACE_ALPHYS, "* Ring...|* It's dark in there, huh?\n* Hang on, I'll get the\n lights..."); + NARRATE("* (The lights come on.)"); + NARRATE("* OHHH YES! GOOD EVENING, AND\n WELCOME TO... MTT NEWS!|* I'M YOUR ANCHOR, METTATON.|* TONIGHT, OUR BRAVE REPORTER\n FINDS THE STORY OF THE YEAR!|* GO ON, DARLING! FIND SOMETHING\n NEWSWORTHY TO REPORT ON!"); + news_fields(); + news = NEWS_PICK; + return 1; + } + /* the end: every bomb defused, or out of time */ + if (c->v[0] == 1) { + NARRATE("* WHAT?! YOU DEFUSED THEM ALL?!|* ...NO MATTER! THE BIG ONE GOES\n OFF IN TWO SECONDS!|* ONE... TWO..."); + SAY(FACE_ALPHYS, "* Ring...|* Got it! I hacked into it!\n* It's off!"); + } else { + NARRATE("* AND THAT'S TIME!!!|* ...|* ...HM? IT ISN'T GOING OFF."); + SAY(FACE_ALPHYS, "* Ring...|* Phew! I got into the big\n one. Just in time!"); + } + NARRATE("* ALPHYS HACKED MY BOMB?!|* UGH! THAT'S ALL FOR TONIGHT,\n FOLKS!"); + m = obj_get(ACTOR_METTATON); + WALK(m, m->x, m->y - 200, 6); + gone(obj_get(ACTOR_METTATON)); + fields_down(); + news = NEWS_OVER; + set_flag(F_HT_NEWS, c->v[0]); + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].kind != OBJ_NONE && objs[i].name == ACTOR_BOMB) objs[i].flags &= (uint16_t)~(OF_TOUCH | OF_TALK | OF_SOLID); + EV_END; +} + +static const char *const reports[BOMB_COUNT] = { + [BOMB_DOG] = "* A DOG! HOW... ORDINARY.", + [BOMB_WATER] = "* A GLASS OF WATER!\n* IT'S... VERY QUICK.", + [BOMB_SCRIPT] = "* THE SCRIPT OF MY NEXT FILM!\n* A FINE CHOICE, DARLING.", + [BOMB_BALL] = "* A BASKETBALL! NO, WAIT, A\n FASHION STATEMENT!", + [BOMB_PRESENT] = "* A PRESENT! FOR ME?\n* YOU SHOULDN'T HAVE!", + [BOMB_GAME] = "* A VIDEO GAME! I'M IN IT, YOU\n KNOW. NEAR THE END.", +}; +static int ev_bomb(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (news == NEWS_PICK) { + /* the story: it's a bomb, and so is everything else */ + NARRATE(reports[c->v[0]]); + NARRATE("* ...BUT WAIT!!!|* IT'S A BOMB!!!|* IN FACT, EVERYTHING IN HERE\n IS A BOMB! SURPRISE!|* AND THE BIG ONE UP NORTH GOES\n OFF IN TWO MINUTES!|* STAY TUNED, VIEWERS!\n* THIS IS GOING TO BE EXPLOSIVE!"); + SAY(FACE_ALPHYS, "* Ring...|* D-don't panic! I put a bomb\n defuser in your phone!|* Touch a bomb, then defuse\n it while it's in the\n DEFUSE ZONE!"); + news = NEWS_TIMER, news_t = NEWS_TIME; + bombs_arm(); + return 1; + } + if (news != NEWS_TIMER || (defused >> c->v[0] & 1)) return 1; + g_bomb_kind = c->v[0]; + BATTLE(FORM_BOMB); + if (battle_result() == BR_SPARED) { + defused = (uint8_t)(defused | 1 << c->v[0]); + for (int i = 0; i < MAX_OBJS; i++) + if (objs[i].kind != OBJ_NONE && objs[i].name == ACTOR_BOMB && objs[i].arg == c->v[0]) objs[i].flags &= (uint16_t)~OF_TOUCH; + } + EV_END; +} + +static int ev_elevator(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (c->v[0] == 0) { + NARRATE("* (The elevator back down.)\n* (Get in?)@Yes@No"); + if (CHOICE() == 1) return 1; + FADE_TO(ROOM_HT_COREVIEW, 6930, 3110, DIR_DOWN); + return 1; + } + NARRATE("* (The elevator up.)\n* (Get in?)@Yes@No"); + if (CHOICE() == 1) return 1; + set_flag(F_HT_FLOOR2, 1); + sv.room = (int16_t)g_room, sv.x = 3760, sv.y = 1340; + save_write_auto(); + menu_end_open(); + EV_END; +} + +int ht2_event(Ev *c) { + switch (c->id) { + case EV_HOTDOG: return ev_hotdog(c); + case EV_HEATS: return ev_heats(c); + case EV_APRON: return ev_apron(c); + case EV_BELT_SWITCH: return ev_belt_switch(c); + case EV_VENTPUZ: return ev_ventpuz(c); + case EV_HT2_CALL: return ev_call(c); + case EV_GUARDS: return ev_guards(c); + case EV_NEWS: return ev_news(c); + case EV_BOMB: return ev_bomb(c); + case EV_HT2_ELEVATOR: return ev_elevator(c); + } + return -1; +} diff --git a/games/undertale/src/htmon.c b/games/undertale/src/htmon.c index a29d5293..f2b1b060 100644 --- a/games/undertale/src/htmon.c +++ b/games/undertale/src/htmon.c @@ -91,6 +91,168 @@ static const char *talk_pyrope(Battle *b, Monster *m) { } static int attack_pyrope(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_PYROPE_BOMBS : ATK_PYROPE_ROPE; } +/* ---------------------------------------------------------------- the Royal Guards: 01 and 02, always a team. + * Clean 02's armor, and its green stars caught five times, 02 can't stand the heat and takes the armor off; then a + * whisper to 01 to say what he feels, and the two can be spared */ +enum { RG_CLEANED, RG_ARMOR_OFF, RG_TOLD }; /* (b->state[]) */ +static Monster *rg_other(Battle *b, Monster *m) { + for (int i = 0; i < b->nmon; i++) + if (&b->mon[i] != m) return &b->mon[i]; + return m; +} +static bool rg_alone(Battle *b, Monster *m) { return rg_other(b, m)->killed; } +static void act_rg(Battle *b, Monster *m, int act, char *t, int cap) { + bool one = m->def == mon_def(MON_RG01); + Monster *o = rg_other(b, m); + if (act == 0) { /* Clean Armor */ + if (one) snprintf(t, (size_t)cap, "* You try to polish 01's armor.\n* Your hands slide right off."); + else if (b->state[RG_ARMOR_OFF]) snprintf(t, (size_t)cap, "* You drum on 02's bare chest.\n* 01 can't look."); + else { + snprintf(t, (size_t)cap, "* You scrub 02's armor.\n* The grime starts to come off.\n* 01 looks bothered."); + b->state[RG_CLEANED] = 1; + } + } else { /* Whisper */ + if (!one) snprintf(t, (size_t)cap, "* You whisper a secret to 02.\n* 02 won't tell."); + else if (!b->state[RG_ARMOR_OFF] || o->gone) + snprintf(t, (size_t)cap, "* You tell 01 to be honest about his feelings.\n* 01 doesn't get it."); + else { + snprintf(t, (size_t)cap, "* You tell 01 to be honest about his feelings."); + if (!b->state[RG_TOLD]) b->state[RG_TOLD] = 1; + m->spare = o->spare = true; + } + } +} +static const char *talk_rg(Battle *b, Monster *m) { + bool one = m->def == mon_def(MON_RG01); + if (rg_alone(b, m)) return one ? "02...!\nThis one's\nfor you!" : "01...!\n...!!!"; + if (b->state[RG_TOLD] == 1) { + if (one) return "02... I...\nI like,\nLIKE you,\nbro."; + b->state[RG_TOLD] = 2; + return "... want ice\ncream... after\nthis?"; + } + if (b->state[RG_TOLD]) return one ? "Ice cream?\nSure, dude!" : "... heh."; + if (b->state[RG_ARMOR_OFF]) return one ? "D-dude..." : "... much\nbetter."; + if (b->state[RG_CLEANED]) return one ? "Hey! Hands\noff the\narmor!" : "... getting\n... hot."; + static const char *const l01[] = {"Like, hand\nover the\nSOUL, bro.", "Like, you're\ntoast and\nstuff.", "Team\nattack!"}; + static const char *const l02[] = {"... ... hm.", "... ... sigh.", "... team\nattack."}; + return one ? l01[rnd_n(3)] : l02[rnd_n(3)]; +} +static const char *flavor_rg(Battle *b, Monster *m) { + (void)m; + if (b->state[RG_CLEANED] && !b->state[RG_ARMOR_OFF] && b->greens >= 5) { + b->state[RG_ARMOR_OFF] = 1; + return "* 02 can't take the heat, and pulls the armor off!\n* 01 starts to sweat."; + } + if (b->state[RG_TOLD]) return "* 01 and 02 can't stop smiling at each other."; + if (b->state[RG_ARMOR_OFF]) return "* 01 is shaking. 02 looks a lot cooler."; + return NULL; +} +static int attack_rg(Battle *b, Monster *m) { (void)b, (void)m; return ATK_RG_TEAM; } + +/* ---------------------------------------------------------------- Mettaton's bombs: defuse each in the DEFUSE ZONE. + * Each moves its own way (the wiki's account of them), the zone in the middle; Defuse (or FIGHT) only works while + * the bomb is in it */ +int g_bomb_kind; +#define ZONE_X0 128 +#define ZONE_X1 192 +#define ZONE_Y0 34 +#define ZONE_Y1 104 +static int bomb_tri(int t, int period, int lo, int hi) { /* a triangle wave, lo to hi and back */ + int p = t % period, half = period / 2; + return lo + (hi - lo) * (p < half ? p : period - p) / half; +} +/* where the bomb's middle is, t frames into the battle */ +static void bomb_pos(int t, int *x, int *y) { + switch (g_bomb_kind) { + case BOMB_DOG: /* side to side, low, in waves */ + *x = 160 + 110 * gfx_sin(t / 2 % 256) / 1024, *y = 92 + 6 * gfx_sin(t * 3 % 256) / 1024; + break; + case BOMB_WATER: /* fast, to the right, round again from the left */ + *x = 20 + t * 3 % 280, *y = 70; + break; + case BOMB_SCRIPT: /* across and back, doubling back a little before each turn */ + *x = 160 + (95 * gfx_sin(t * 256 / 300 % 256) + 22 * gfx_sin(t * 768 / 300 % 256)) / 1024, *y = 66; + break; + case BOMB_BALL: { /* bouncing from side to side */ + int b = gfx_sin(t * 256 / 50 % 256); + *x = bomb_tri(t, 240, 50, 270), *y = 96 - 56 * (b < 0 ? -b : b) / 1024; + break; + } + case BOMB_PRESENT: /* up through the zone, round again from below */ + *x = 160, *y = 150 - t * 3 / 2 % 170; + break; + default: { /* the game: side to side, keeping to the edges (across the middle in a rush) */ + int v = 240 * gfx_sin(t * 256 / 400 % 256) / 1024; + *x = 160 + clamp_i(v, -115, 115), *y = 70; + break; + } + } +} +static bool bomb_in_zone(Battle *b) { + int x, y; + bomb_pos((uint16_t)b->state[0], &x, &y); + return x >= ZONE_X0 && x <= ZONE_X1 && y >= ZONE_Y0 && y <= ZONE_Y1; +} +static void bomb_defused(Monster *m) { m->gone = true, m->fade = 1, m->dmg_t = 0; } +static void act_bomb(Battle *b, Monster *m, int act, char *t, int cap) { + (void)act; + if (bomb_in_zone(b)) { + bomb_defused(m); + snprintf(t, (size_t)cap, g_bomb_kind == BOMB_DOG ? "* Dog defused!" : "* Bomb defused!"); + } else snprintf(t, (size_t)cap, "* Missed! Try while it's in\n the DEFUSE ZONE."); +} +static bool hit_bomb(Battle *b, Monster *m, int dmg) { + (void)dmg; + if (bomb_in_zone(b)) bomb_defused(m); + else m->dmg_shown = 0; /* (MISS) */ + return true; +} +static const char *talk_bomb(Battle *b, Monster *m) { + (void)b, (void)m; + if (g_bomb_kind == BOMB_DOG) return "Zzz..."; + if (g_bomb_kind == BOMB_WATER) return "Swish."; + return rnd_n(2) ? "Tick." : "Tock."; +} +static const char *flavor_bomb(Battle *b, Monster *m) { + (void)b, (void)m; + return g_bomb_kind == BOMB_DOG ? "* The dog is still active." : "* The bomb is still ticking."; +} +static int attack_bomb(Battle *b, Monster *m) { (void)b, (void)m; return -1; } +static void draw_bomb(Battle *b, Monster *m, int x0, int y0) { + (void)y0; + if (!m->gone) b->state[0]++; + /* the zone */ + uint16_t g = rgb565(0x00C000); + gfx_frame_rect(ZONE_X0 - 14, ZONE_Y0 - 14, ZONE_X1 - ZONE_X0 + 28, ZONE_Y1 - ZONE_Y0 + 28, 1, g); + gfx_text(FONT_SMALL, 160 - gfx_text_width(FONT_SMALL, "DEFUSE ZONE", -1) / 2, ZONE_Y0 - 11, "DEFUSE ZONE", g, 255); + int x, y; + bomb_pos((uint16_t)b->state[0], &x, &y); + x += x0 - m->x; /* (its shake, hit) */ + uint16_t s = g_bomb_kind == BOMB_DOG ? SPR_DOGBOMB_B : g_bomb_kind == BOMB_WATER ? SPR_WATER_B : SPR_BOMB_B; + int half = g_bomb_kind == BOMB_DOG ? 6 : g_bomb_kind == BOMB_WATER ? 11 : 23; + uint8_t alpha = m->fade ? (uint8_t)max_i(0, 128 - m->fade * 4) : 255; + gfx_sprite(s, (int)(g_frame / 8), x, y + half, 0, alpha); +} +#define BOMB(nm, chk) {.name = nm, .hp = 1, .idle_speed = 8, .check = chk, .acts = {"Defuse"}, .nacts = 1, \ + .flags = MF_BOSS | MF_NOT_KILLABLE, .act = act_bomb, .talk = talk_bomb, .attack = attack_bomb, \ + .flavor = flavor_bomb, .on_hit = hit_bomb, .draw = draw_bomb} +static const MonDef bomb_defs[BOMB_COUNT] = { + [BOMB_DOG] = BOMB("Dog", "It's fast asleep. It has no idea."), + [BOMB_WATER] = BOMB("Glass of Water", "A glass of water. A very, very fast one."), + [BOMB_SCRIPT] = BOMB("Script", "A movie script. Every page ends with a bang."), + [BOMB_BALL] = BOMB("Basketball", "Painted to look like a basketball. Stylish, at least."), + [BOMB_PRESENT] = BOMB("Present", "Wrapped up with a bow. It's ticking."), + [BOMB_GAME] = BOMB("Game", "A video game. The box is oddly heavy."), +}; +static const Form bomb_forms[BOMB_COUNT] = { + [BOMB_DOG] = {{MON_BOMB}, 1, "* It's the dog!\n* Defuse it!"}, + [BOMB_WATER] = {{MON_BOMB}, 1, "* The glass of water dashes about!\n* Defuse it!"}, + [BOMB_SCRIPT] = {{MON_BOMB}, 1, "* Defuse the script!"}, + [BOMB_BALL] = {{MON_BOMB}, 1, "* Defuse the basketball!"}, + [BOMB_PRESENT] = {{MON_BOMB}, 1, "* Defuse the present!"}, + [BOMB_GAME] = {{MON_BOMB}, 1, "* Defuse the game!"}, +}; + static const MonDef ht_defs[MON_COUNT - MON_WF_COUNT] = { [MON_VULKIN - MON_WF_COUNT] = { .name = "Vulkin", .spare_gold = 40, .hp = 20, .at = 8, .df = 0, .exp = 70, .gold = 40, .spr_idle = SPR_VULKIN_B, @@ -115,8 +277,22 @@ static const MonDef ht_defs[MON_COUNT - MON_WF_COUNT] = { [MON_METTATON - MON_WF_COUNT] = { .name = "Mettaton", .hp = 9999, .at = 0, .df = 0, .spr_idle = SPR_MTT_B, .spr_hurt = SPR_MTT_B, .idle_speed = 6, .check = "A robot with a TV show.", .flags = MF_BOSS | MF_NOT_KILLABLE}, + [MON_RG01 - MON_WF_COUNT] = { + .name = "RG 01", .spare_gold = 50, .hp = 150, .at = 8, .df = 4, .exp = 110, .gold = 60, .spr_idle = SPR_RG01_B, + .spr_hurt = SPR_RG01_B, .idle_speed = 6, .check = "A Royal Guard. Armor polished to a shine.", + .acts = {"Clean Armor", "Whisper"}, .nacts = 2, + .neutral = {"* 01 polishes his helmet.", "* 02 watches your every step.", "* Smells like a locker room.", + "* 01 stands guard."}, + .flags = MF_BOSS, .act = act_rg, .talk = talk_rg, .attack = attack_rg, .flavor = flavor_rg}, + [MON_RG02 - MON_WF_COUNT] = { + .name = "RG 02", .spare_gold = 50, .hp = 150, .at = 8, .df = 4, .exp = 110, .gold = 60, .spr_idle = SPR_RG02_B, + .spr_hurt = SPR_RG02_B, .idle_speed = 6, .check = "A Royal Guard. Armor looks stuffy and hot.", + .acts = {"Clean Armor", "Whisper"}, .nacts = 2, + .neutral = {"* Sweat drips from 02's armor.", "* 02 is clenching his fists.", "* Smells like a locker room."}, + .flags = MF_BOSS, .act = act_rg, .talk = talk_rg, .attack = attack_rg, .flavor = flavor_rg}, + [MON_BOMB - MON_WF_COUNT] = BOMB("Bomb", ""), }; -const MonDef *ht_mon_def(int id) { return &ht_defs[id - MON_WF_COUNT]; } +const MonDef *ht_mon_def(int id) { return id == MON_BOMB ? &bomb_defs[g_bomb_kind] : &ht_defs[id - MON_WF_COUNT]; } static const Form ht_forms[FORM_COUNT - FORM_WF_COUNT] = { [FORM_VULKIN - FORM_WF_COUNT] = {{MON_VULKIN}, 1, "* Vulkin strolls in, happy as can be."}, @@ -128,16 +304,23 @@ static const Form ht_forms[FORM_COUNT - FORM_WF_COUNT] = { [FORM_MTT_QUIZ - FORM_WF_COUNT] = {{MON_METTATON}, 1, ""}, [FORM_MTT_COOK - FORM_WF_COUNT] = {{MON_METTATON}, 1, ""}, [FORM_LASERS - FORM_WF_COUNT] = {{MON_METTATON}, 1, ""}, + [FORM_RGUARDS - FORM_WF_COUNT] = {{MON_RG01, MON_RG02}, 2, "* The Royal Guards attack!"}, + [FORM_BOMB - FORM_WF_COUNT] = {{MON_BOMB}, 1, ""}, }; -const Form *ht_form(int form) { return &ht_forms[form - FORM_WF_COUNT]; } +const Form *ht_form(int form) { return form == FORM_BOMB ? &bomb_forms[g_bomb_kind] : &ht_forms[form - FORM_WF_COUNT]; } -/* random encounters: past the Lab (the belts and the Magma Chamber) */ +/* random encounters: past the Lab (the belts and the Magma Chamber); on the second floor, the crossroads and the + * Bad Opinion Zone */ int ht_encounter(int room) { switch (room) { case ROOM_HT_BELT1: case ROOM_HT_BELT2: case ROOM_HT_MAGMA: { static const uint8_t pool[] = {FORM_VULKIN, FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2}; return pool[rnd_n(5)]; } + case ROOM_HT_CROSS2: case ROOM_HT_BOZ: { + static const uint8_t pool[] = {FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2}; + return pool[rnd_n(4)]; + } } return -1; } @@ -269,6 +452,30 @@ static void atk_pyrope_rope(int t) { } } +/* the Royal Guards' team attack: stars falling from the top, and others rising from the bottom. Once 02's armor's + * been cleaned, some of the falling ones are green (dropped right over the SOUL); once it's off, 01's aim goes shaky and they fly out at the + * sides. One guard fallen, the other attacks twice as hard */ +static void atk_rg_team(int t) { + bool angry = false, off = bt.state[RG_ARMOR_OFF], green = bt.state[RG_CLEANED] && !off; + for (int i = 0; i < bt.nmon; i++) angry |= bt.mon[i].killed; + int every = angry ? 10 : 20; + if (t < 130 && t % every == 0) { + /* (a green one falls right over the SOUL) */ + bool g = green && t % 40 == 20; + int x = g ? bt.sx / FX : bx0() + 6 + rnd_n(bx1() - bx0() - 12); + Bullet *s = shot(SPR_STAR, x, by0() - 4, off ? (rnd_n(2) ? P(3) / 2 : -P(3) / 2) : 0, P(1) / 2); + if (s) { + s->kind = BK_GRAVITY, s->ay = 2, s->r = 3, s->flags |= BF_NOCLIP, s->life = 120; + if (g) s->color = BC_GREEN, s->dmg = 0; + } + } + if (t < 130 && t % (every * 3 / 2) == 15) { + int x = bx0() + 6 + rnd_n(bx1() - bx0() - 12); + Bullet *s = shot(SPR_STAR, x, by1() + 4, 0, -P(2)); + if (s) s->r = 3, s->flags |= BF_NOCLIP, s->life = 90; + } +} + int ht_attack_length(int atk) { (void)atk; return 160; } void ht_attack_run(Battle *b, int atk, int t) { @@ -285,5 +492,6 @@ void ht_attack_run(Battle *b, int atk, int t) { case ATK_TSUNDER_DIVE: atk_tsunder_dive(t); break; case ATK_PYROPE_BOMBS: atk_pyrope_bombs(t); break; case ATK_PYROPE_ROPE: atk_pyrope_rope(t); break; + case ATK_RG_TEAM: atk_rg_team(t); break; } } diff --git a/games/undertale/src/items.c b/games/undertale/src/items.c index db8d48d6..cecf88c5 100644 --- a/games/undertale/src/items.c +++ b/games/undertale/src/items.c @@ -56,6 +56,10 @@ static const ItemInfo items[ITEM_COUNT] = { "A pan, burnt black. Hits\n hard, every time.\n* Food heals 4 HP more with it.", "", 50}, [ITEM_INSTANT_NOODLES] = {"Instant Noodles", "InstaNood", IT_FOOD, 15, 0, 0, "A cup of noodles, quick to\n make.", "* You eat the Instant Noodles.\n* They're a little crunchy.", 2}, + [ITEM_HOT_DOG] = {"Hot Dog...?", "HotDog", IT_FOOD, 20, 0, 0, "A hot dog from Sans's stand.\n* Better not ask what's in it.", + "* You eat the Hot Dog.\n* (Bark!)", 10}, + [ITEM_STAINED_APRON] = {"Stained Apron", "StainApro", IT_ARMOR, 0, 0, 11, "An apron with old stains.\n* Heals 1 HP every other turn.", + "", 50}, }; const ItemInfo *item_info(int id) { return &items[id >= 0 && id < ITEM_COUNT ? id : 0]; } diff --git a/games/undertale/src/items.h b/games/undertale/src/items.h index a9b5ec8c..9120436d 100644 --- a/games/undertale/src/items.h +++ b/games/undertale/src/items.h @@ -37,6 +37,8 @@ enum { /* Hotland */ ITEM_BURNT_PAN, ITEM_INSTANT_NOODLES, + ITEM_HOT_DOG, + ITEM_STAINED_APRON, ITEM_COUNT }; enum { IT_FOOD, IT_WEAPON, IT_ARMOR, IT_SPECIAL }; diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index f02971c1..4d4507dd 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -383,7 +383,7 @@ void menu_gameover_open(void) { void menu_end_open(void) { g_mode = MODE_END; t = 0; - writer_start(&w, "Up the elevator, on through\nthe heat of Hotland...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); + writer_start(&w, "Up the elevator, past the news\nand all its bombs...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/monsters.c b/games/undertale/src/monsters.c index 14241618..66c0dec1 100644 --- a/games/undertale/src/monsters.c +++ b/games/undertale/src/monsters.c @@ -319,7 +319,9 @@ int form_setup(int form, Battle *b) { m->x = (int16_t)(xs[f->n - 1][i] + m->def->dx), m->y = (int16_t)(120 + m->def->dy); } /* Toriel and Flowey can't be fled from; Napstablook can */ - if (form == FORM_TORIEL || form == FORM_FLOWEY || form == FORM_PAPYRUS || form == FORM_MAD_DUMMY) b->no_flee = true; + if (form == FORM_TORIEL || form == FORM_FLOWEY || form == FORM_PAPYRUS || form == FORM_MAD_DUMMY || + form == FORM_RGUARDS || form == FORM_BOMB) + b->no_flee = true; b->captures = form == FORM_PAPYRUS; return 0; } diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h index d45eb19e..ddec76ac 100644 --- a/games/undertale/src/monsters.h +++ b/games/undertale/src/monsters.h @@ -12,7 +12,7 @@ enum { /* Waterfall (wfmon.c) */ MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_MAD_DUMMY, MON_TEMMIE, MON_UNDYNE, MON_WF_COUNT, /* Hotland (htmon.c) */ - MON_VULKIN = MON_WF_COUNT, MON_TSUNDERPLANE, MON_PYROPE, MON_METTATON, MON_COUNT + MON_VULKIN = MON_WF_COUNT, MON_TSUNDERPLANE, MON_PYROPE, MON_METTATON, MON_RG01, MON_RG02, MON_BOMB, MON_COUNT }; /* formations: who is fought */ @@ -29,7 +29,7 @@ enum { FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE, FORM_WF_COUNT, /* Hotland (Mettaton's shows and a laser's alarm play their own way: htshows.c) */ FORM_VULKIN = FORM_WF_COUNT, FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2, FORM_MTT_QUIZ, - FORM_MTT_COOK, FORM_LASERS, FORM_COUNT + FORM_MTT_COOK, FORM_LASERS, FORM_RGUARDS, FORM_BOMB, FORM_COUNT }; enum { @@ -47,7 +47,7 @@ enum { ATK_UNDYNE_ARROWS, ATK_UNDYNE_SPEARS, ATK_WF_COUNT, /* Hotland */ ATK_VULKIN_THUNDER = ATK_WF_COUNT, ATK_VULKIN_FIRE, ATK_TSUNDER_BOMBS, ATK_TSUNDER_DIVE, ATK_PYROPE_BOMBS, - ATK_PYROPE_ROPE, ATK_COUNT + ATK_PYROPE_ROPE, ATK_RG_TEAM, ATK_COUNT }; /* a formation: up to three monsters, and what the first turn says */ @@ -73,4 +73,6 @@ const struct MonDef *ht_mon_def(int id); void ht_attack_run(struct Battle *b, int atk, int t); int ht_attack_length(int atk); int ht_encounter(int room); +extern int g_bomb_kind; /* the bomb fought next (BOMB_*: htmon.c) */ +enum { BOMB_DOG, BOMB_WATER, BOMB_SCRIPT, BOMB_BALL, BOMB_PRESENT, BOMB_GAME, BOMB_COUNT }; #endif diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index 16c1498c..669b137c 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -22,6 +22,7 @@ void room_setup(int room, int from) { wf2_setup(room, from); wf3_setup(room, from); ht1_setup(room, from); + ht2_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ @@ -32,6 +33,7 @@ void room_update(void) { wf1_update(); wf3_update(); ht1_update(); + ht2_update(); } /* what a room draws on its floor, under everything (world.c) */ @@ -39,8 +41,12 @@ void room_draw_floor(void) { snow1_draw(); snow2_draw(); ht1_draw(); + ht2_draw(); } +/* what a room draws over everything (a clock) */ +void room_draw_top(void) { ht2_draw_top(); } + /* a pushed rock that may go where Frisk can't (a bridge seed into the water), and what happens once it has */ bool room_rock_enters(Obj *o, int x, int y) { return wf_seed_enters(o, x, y); } void room_rock_moved(Obj *o) { wf_seed_moved(o); } diff --git a/games/undertale/src/world.c b/games/undertale/src/world.c index 327288f2..6af7e448 100644 --- a/games/undertale/src/world.c +++ b/games/undertale/src/world.c @@ -496,6 +496,7 @@ bool cam_pan(int x, int y, int sp) { void cam_free(void) { cam_locked = false; } void room_draw_floor(void); /* rooms.c */ +void room_draw_top(void); int g_shake; /* frames the view shakes */ @@ -537,5 +538,6 @@ void world_draw(void) { else gfx_sprite(obj_sprite(o), o->frame, o->x - cam_x, o->y - cam_y, (o->flags & OF_FLIP) ? GFX_FLIPX : 0, o->alpha); } } + room_draw_top(); cam_x = keep_x, cam_y = keep_y; } diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index 0aba194a..e72f39c3 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -1,11 +1,11 @@ #!/usr/bin/env python3 """Checks of Undertale on a computer (make test): the host build, with AddressSanitizer and UBSan, through the menus, every battle, the saves, the -whole Ruins, the whole of Snowdin and Waterfall as far as it goes. +whole Ruins, the whole of Snowdin and Waterfall, and Hotland as far as it goes. python3 tests/check.py build/play [--quick] ---quick skips playing the whole Ruins, Snowdin and Waterfall (the longest parts).""" +--quick skips playing the whole Ruins, Snowdin, Waterfall and Hotland (the longest parts).""" import os import re import shutil @@ -34,9 +34,9 @@ (FORM_AARON, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE) = range(32, 43) (FORM_VULKIN, FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2, FORM_MTT_QUIZ, FORM_MTT_COOK, - FORM_LASERS) = range(43, 51) + FORM_LASERS, FORM_RGUARDS, FORM_BOMB) = range(43, 53) ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD = range(17, 23) -ITEM_BURNT_PAN, ITEM_INSTANT_NOODLES = 28, 29 +ITEM_BURNT_PAN, ITEM_INSTANT_NOODLES, ITEM_HOT_DOG, ITEM_STAINED_APRON = 28, 29, 30, 31 def run(args, frames, saves=None, what=""): @@ -138,6 +138,16 @@ def check(cond, msg): for form in (FORM_MTT_QUIZ, FORM_MTT_COOK, FORM_LASERS): s = run(["--god", "--battle", str(form), "--path", "talk"], 3000, what=f"show {form}") check(s and s["mode"] == MODE_WORLD, f"show {form} did not end: {s}") +# the Royal Guards (no running from them): fought, or spared (02's armor cleaned twice, its green stars caught, a +# whisper to 01); a bomb of the news report (the dog), defused by Defuse or by FIGHT, in the DEFUSE ZONE +s = run(["--god", "--battle", str(FORM_RGUARDS), "--path", "fight"], 9000, what="the Royal Guards, fought") +check(s and s["mode"] == MODE_WORLD and s["kills"] == 2, f"the Royal Guards: FIGHT did not win it: {s}") +s = run(["--god", "--battle", str(FORM_RGUARDS), "--path", "seq:1@2,1@2,2@1"], 9000, what="the Royal Guards, spared") +check(s and s["mode"] == MODE_WORLD and s["kills"] == 0 and s["gold"] == 100, + f"the Royal Guards: the friendly way did not spare them: {s}") +for how in ("act:1", "fight"): + s = run(["--god", "--battle", str(FORM_BOMB), "--path", how], 9000, what=f"a bomb, {how}") + check(s and s["mode"] == MODE_WORLD and s["kills"] == 0, f"a bomb: {how} did not defuse it: {s}") # the shop in Snowdin: a Cinnamon Bunny for 25G; Papyrus's date: his phone number s = run(["--name", "Frisk", "--noenc", "--room", str(ROOMS["SNOWTOWN"]), "--at", "446,1092", "--gold", "100", "--keys", @@ -213,11 +223,12 @@ def check(cond, msg): check(item in s["items"], f"Waterfall: item {item} not picked up: {s['items']}") # Hotland's first floor: Alphys and the quiz, the noodles, the belts, the vents, the lasers, both shooting puzzles, the -# cooking show, up to the elevator +# cooking show, up the elevator to the second floor if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["HT_LABFRONT"]), "--at", "1000,6230", "--path-file", os.path.join(HERE, "hotland.path")], 16000, what="Hotland") - check(s and s["mode"] == MODE_END and s["room"] == ROOMS["HT_COREVIEW"], f"Hotland did not end at the elevator: {s}") + check(s and s["mode"] == MODE_WORLD and s["room"] == ROOMS["HT_HOTDOG"], + f"Hotland did not end up the elevator, on the second floor: {s}") if s: for name, v in (("HT_LAB", 2), ("HT_NOODLES", 1), ("HT_CALL_LASER", 1), ("HT_CALL_HUB", 1), ("HT_CALL_ISLE", 1), ("HT_CALL_CORE", 1), ("HT_PUZ_R", 1), ("HT_PUZ_L", 1), ("HT_BLUE_OFF", 1), ("HT_COOK", 1), @@ -225,6 +236,22 @@ def check(cond, msg): check(flag(s, name) == v, f"Hotland: F_{name} is {flag(s, name)}, not {v}") check(ITEM_INSTANT_NOODLES in s["items"], f"Hotland: the noodles not taken: {s['items']}") +# Hotland's second floor: Heats Flamesman, Sans's hot dog, the apron, the Art Club's room, the belt and vent puzzles, +# the Bad Opinion Zone, the Royal Guards spared, Mettaton's news report, up to the elevator +if not QUICK: + s = run(["--name", "Frisk", "--noenc", "--god", "--gold", "100", "--room", str(ROOMS["HT_HOTDOG"]), "--at", "6966,2380", + "--path-file", os.path.join(HERE, "hotland2.path")], 13000, what="Hotland's second floor") + check(s and s["mode"] == MODE_END and s["room"] == ROOMS["HT_COREVIEW2"], + f"Hotland's second floor did not end at the elevator: {s}") + if s: + for name, v in (("HT_HEATS", 1), ("HT_APRON", 1), ("HT_CALL_BELT", 1), ("HT_BELT", 1), ("HT_VENTPUZ", 1), + ("HT_CALL_BOZ", 1), ("HT_GUARDS", 1), ("HT_NEWS", 2), ("HT_CALL_CORE2", 1), ("HT_FLOOR2", 1)): + check(flag(s, name) == v, f"Hotland's second floor: F_{name} is {flag(s, name)}, not {v}") + check(s["kills"] == 0, f"Hotland's second floor: {s['kills']} killed on the friendly way") + check(s["gold"] == 170, f"Hotland's second floor: the hot dog or the guards' gold went wrong: {s['gold']}") + for item in (ITEM_HOT_DOG, ITEM_STAINED_APRON): + check(item in s["items"], f"Hotland's second floor: item {item} not picked up: {s['items']}") + if failures: print("\n".join("FAIL " + f for f in failures)) sys.exit(1) diff --git a/games/undertale/tests/hotland2.path b/games/undertale/tests/hotland2.path new file mode 100644 index 00000000..6ff35c60 --- /dev/null +++ b/games/undertale/tests/hotland2.path @@ -0,0 +1,114 @@ +# Hotland's second floor, out of the elevator (play it with --room 140 --at 6966,2380 --name Frisk --noenc --god +# --gold 100): Heats Flamesman's name, a hot dog from Sans +go:7030,2400 +r +z +talk +go:6600,2364 +u +z +pick:0 +talk +# the crossroads: the Stained Apron south, the invisible path north to the Art Club's room +go:5900,2400 +go:5900,2548 +5900,2600 +go:5840,2628 +u +z +talk +go:5900,2600 +5900,2560 +go:5900,2240 +5900,2180 +go:5900,2160 +u +z +talk +go:5900,2190 +5900,2215 +w10 +# the conveyor belt puzzle: Alphys's call, then the top belt's switches pressed right to left as it carries Frisk by +# (her call after the second, and the force field off) +go:5760,2400 +5690,2400 +w10 +talk +go:5460,2400 +5460,2330 +5421,2330 +l +u +w16 +z +w26 +z +talk +w60 +go:5090,2400 +5040,2400 +w20 +# the vent puzzle: right to left in a U, a step back once (each panel landed on turns every vent; out by the top-left +# platform's, turned) +go:4750,2400 +go:4740,2300 +vent:4722,2264 +w20 +vent:4640,2250 +w20 +vent:4640,2382 +w20 +vent:4640,2450 +w20 +vent:4640,2350 +w20 +vent:4656,2466 +w20 +vent:4540,2482 +w20 +vent:4540,2350 +w20 +vent:4556,2266 +w20 +# the Bad Opinion Zone (Alphys's call), the Royal Guards at the bend: 02's armor cleaned, its green stars caught, a +# whisper to 01, both spared +go:4410,2255 +4380,2255 +w10 +go:4100,2275 +go:3760,2275 +3730,2275 +w10 +go:3540,2275 +seq:1@2,1@2,2@1 +talk +go:3230,2275 +go:3230,2040 +go:3670,2030 +3695,2030 +w20 +# Mettaton's news report: the dog picked, every bomb revealed; the dog defused, then the clock runs out (Alphys +# switches the big one off) +go:3895,1748 +talk +go:4008,1720 +u +z +talk +4008,1714 +act:1 +talk +w3700 +talk +# up past the news to the CORE again (Alphys's call), and the elevator up, where the game now ends +go:4590,1770 +go:4600,1560 +4600,1500 +w20 +go:4600,1440 +talk +go:3770,1380 +go:3770,1348 +u +z +pick:0 diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index c6be23f2..5bf6745e 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -152,6 +152,9 @@ HT_VENTS_MAGMA = [(3120, 4000), (3362, 4000), (3503, 4060), (3420, 4180), (3225, 4240), (3325, 4240), (3525, 4240)] HT_VENTS_HUB = [(4820, 3620), (4820, 3560), (4740, 3620), (4900, 3620)] HT_VENTS_ISLE = [(4940, 3120), (5060, 3120), (5180, 3120)] +# the vent puzzle's platforms (their top-left) +HT_VENTPUZ = [(4620, 2160), (4520, 2260), (4620, 2260), (4720, 2260), (4520, 2360), (4620, 2360), (4520, 2460), + (4620, 2460)] AREAS.append(dict(name="hotland", map="Hotland_map.png", floor=HT_FLOOR, margin=0, close=True, patches=[ # who the game moves about: the Royal Guards at the elevator (and by the vents, later), the clam by the cooler, # Alphys and Mettaton (through the wall) in the Lab, the Vulkin on the belts, the Pyrope by the pan, the pan @@ -159,6 +162,15 @@ ("copy", 2100, 6152, 82, 82, 2181, 6152), ("erase", 2198, 6241, 30, 36, "ring"), ("erase", 2993, 5170, 30, 32, "ring"), ("erase", 3762, 4424, 34, 42, "ring"), ("erase", 3476, 4468, 18, 18, "ring"), ("erase", 4805, 3098, 70, 56, "ring"), + # the second floor: the two by the invisible path, the Pyrope by the bend, the Royal Guards on it, Mettaton at + # his news desk, the apron + ("erase", 5822, 2343, 46, 44, "ring"), ("erase", 5946, 2343, 46, 52, "ring"), + ("erase", 3202, 1988, 48, 46, [(0, 0, 0)]), ("erase", 3202, 2034, 48, 16, "ring"), + ("copy", 3495, 2216, 68, 46, 3376, 2216), ("erase", 3376, 2262, 68, 38, "ring"), + ("erase", 4158, 1716, 56, 66, "ring"), ("erase", 5836, 2618, 22, 18, "ring"), + # the news report's bombs that move: the script on the belt (the belt repeats every 5 pixels), the basketball, the + # glass of water (in front of a rock: the same rock, a row up) + ("copy", 4318, 1850, 24, 26, 4318, 1875), ("erase", 3999, 1565, 21, 20, "ring"), ("copy", 4118, 1576, 26, 24, 4118, 1616), # Undyne, fallen on the bridge in the heat (an object here, there only if she chased Frisk): the planks repeat # every 40 pixels ("copy", 454, 6219, 50, 21, 534, 6219), @@ -525,6 +537,23 @@ doors=[((4800, 3292, 60, 8), "ht_hub", (4818, 3488), "down")]), dict(name="ht_cooking", area="hotland", rect=(5300, 3000, 680, 260), title="Hotland", floor_colors=LAB_FLOOR + HT_KITCHEN), dict(name="ht_coreview", area="hotland", rect=(5980, 2900, 1080, 340), title="Hotland", floor_colors=LAB_FLOOR), + # the second floor: out of the elevator, Sans's hot dog stand; the crossroads (the invisible path north to the Art + # Club's room, the apron south); the conveyor belt puzzle; the vent puzzle; the Bad Opinion Zone; the bend where + # the Royal Guards wait; Mettaton's news report; the CORE again, and the elevator up + dict(name="ht_hotdog", area="hotland", rect=(6040, 2260, 1060, 220), title="Hotland"), + dict(name="ht_cross2", area="hotland", rect=(5700, 2200, 340, 380), title="Hotland", + fix=[("walk", 5898, 2276, 22, 116)]), + dict(name="ht_artclub", area="hotland", rect=(5800, 1990, 240, 210), title="Hotland"), + dict(name="ht_apron", area="hotland", rect=(5780, 2580, 260, 160), title="Hotland"), + dict(name="ht_beltpuz", area="hotland", rect=(5060, 2280, 640, 240), title="Hotland", floor_colors=HT_BELT), + dict(name="ht_ventpuz", area="hotland", rect=(4400, 2100, 660, 560), title="Hotland", floor_colors=HT_STRIPE + HT_BELT, + fix=[("walk", x, y, 60, 60) for x, y in HT_VENTPUZ]), + dict(name="ht_boz", area="hotland", rect=(3740, 2100, 660, 280), title="Hotland", floor_colors=HT_BELT), + dict(name="ht_guards", area="hotland", rect=(3080, 1940, 660, 440), title="Hotland", + doors=[((3690, 2036, 10, 40), "ht_news", (3772, 1748), "right")]), + dict(name="ht_news", area="hotland", rect=(3760, 1540, 880, 500), title="Hotland", floor_colors=HT_STRIPE + HT_BELT, + doors=[((3760, 1760, 6, 40), "ht_guards", (3670, 2030), "left")]), + dict(name="ht_coreview2", area="hotland", rect=(3680, 1200, 960, 340), title="Hotland", floor_colors=HT_STRIPE), ] # rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index c5a7e815..e936c35b 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -198,11 +198,19 @@ def gen_debris(): return [im] +def gen_star(): + # the Royal Guards' stars: four points + im = _img(9, 9) + d = ImageDraw.Draw(im) + d.polygon([(4, 0), (5, 3), (8, 4), (5, 5), (4, 8), (3, 5), (0, 4), (3, 3)], fill=(255, 255, 255, 255)) + return [im] + + GEN = {"otile": gen_otile, "snowball": gen_snowball, "bone": gen_bone, "orb": gen_orb, "snowflake": gen_snowflake, "iceshard": gen_iceshard, "present": gen_present, "knife": gen_knife, "dogpaw": gen_dogpaw, "heartbullet": gen_heartbullet, "spear": gen_spear, "note": gen_note, "drop": gen_drop, "arm": gen_arm, "debris": gen_debris, "arrow": gen_arrow, "plane": gen_plane, "bomb": gen_bomb, "cloud": gen_cloud, - "bolt": gen_bolt} + "bolt": gen_bolt, "star": gen_star} SNOW_CLEAR = [(133, 163, 216), (114, 129, 177), (139, 163, 186), (180, 192, 201), (195, 207, 216)] PAP_GIF = "move:Papyrus_screenshot_back_and_forth.gif:0,280,640,450:" @@ -380,6 +388,22 @@ def gen_debris(): ("tsunder_b", "wiki:Tsunderplane_battle_idle.gif", {"feet": True, "dedupe": True, "every": 14}), ("pyrope_b", "wiki:Pyrope_battle_idle.gif", {"feet": True, "dedupe": True, "every": 6}), ("pyrope_hurt", "wiki:Pyrope_battle_hurt.png", {"feet": True}), + # the second floor: the Royal Guards, Mettaton reporting, the bombs (each a part of the wiki's sheet of them) + ("rg01_ow", "wiki:RG_01_overworld.png", {"feet": True}), + ("rg02_ow", "wiki:RG_02_overworld.png", {"feet": True}), + ("rg01_b", "wiki:RG_01_battle_idle.gif", {"feet": True, "dedupe": True, "every": 6}), + ("rg02_b", "wiki:RG_02_battle_idle.gif", {"feet": True, "dedupe": True, "every": 6}), + ("mtt_news", "wiki:Mettaton_overworld_news_reporter.gif", {"feet": True}), + *[("bomb_" + n, "wiki:Bombs_overworld.gif", {"feet": True, "box": b}) for n, b in ( + ("ball", (0, 0, 33, 32)), ("dog", (33, 0, 33, 32)), ("present", (66, 0, 33, 32)), ("water", (0, 32, 33, 32)), + ("script", (33, 32, 33, 32)), ("game", (66, 32, 33, 32)))], + # the news report's script before it's shown to be a bomb, and the Stained Apron (cut from the map) + ("news_script", "map:Hotland_map.png:4322,1880,16,16", {"keep": True, "feet": True, "clear": [(112, 83, 71), (52, 50, 78), (107, 67, 78)]}), + ("apron", "map:Hotland_map.png:5836,2618,22,18", {"keep": True, "clear": [(181, 85, 21)]}), + # in battle, the bombs share one look (the dog and the glass of water keep their own) + ("bomb_b", "wiki:Bomb_battle_idle.gif", {"feet": True, "dedupe": True}), + ("dogbomb_b", "wiki:Annoying_Dog_battle_bomb.gif", {"feet": True, "dedupe": True}), + ("water_b", "wiki:Extremely_Agile_Glass_Of_Water_battle_idle.png", {"feet": True}), # Undyne fallen in Hotland's heat, on its bridge (cut from the map, the bridge and the rock behind see-through) ("undyne_fallen", "map:Hotland_map.png:534,6213,50,27", {"keep": True, "clear": [(169, 124, 41), (91, 65, 0), (62, 35, 0), (19, 35, 45), (18, 34, 44), (19, 35, 44), @@ -395,6 +419,7 @@ def gen_debris(): ("drop", "gen:drop", {"center": True}), ("arm", "gen:arm", {"center": True}), ("debris", "gen:debris", {"center": True}), + ("star", "gen:star", {"center": True}), # Waterfall's monsters ("aaron_b", "wiki:Aaron_battle_static.png", {"feet": True, "clear_bg": True}), ("aaron_hurt", "wiki:Aaron_battle_hurt.png", {"feet": True, "clear_bg": True}), From 26c356bb05cc85744fde81ff2968bb067d6225ce Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 11:09:59 +0000 Subject: [PATCH 14/19] Undertale: fit every page of dialogue in its box Some pages wrapped to four or five lines, past the bottom of the three-line box (and a page with a choice has room for two, the choices taking the third). Their lines are broken at the box's width (29 letters beside a face, 33 without) and split into more pages where needed, in the Ruins, Snowdin, Waterfall and Hotland. The words are the same, a few a little shorter. --- games/undertale/src/ht1.c | 12 ++++++------ games/undertale/src/ruins2.c | 2 +- games/undertale/src/ruins3.c | 2 +- games/undertale/src/snowdin1.c | 24 ++++++++++++------------ games/undertale/src/snowdin2.c | 14 +++++++------- games/undertale/src/snowtown.c | 20 ++++++++++---------- games/undertale/src/wf1.c | 4 ++-- games/undertale/src/wf2.c | 8 ++++---- games/undertale/src/wf3.c | 8 ++++---- 9 files changed, 47 insertions(+), 47 deletions(-) diff --git a/games/undertale/src/ht1.c b/games/undertale/src/ht1.c index 3d322098..a7c6d3a6 100644 --- a/games/undertale/src/ht1.c +++ b/games/undertale/src/ht1.c @@ -187,7 +187,7 @@ void ht1_setup(int room, int from) { break; } case ROOM_HT_RIVER: - obj_sign(1010, 6440, 50, 60, "* (Someone in a hood waits by a boat, humming.)\n* (Maybe they'll give you a ride some other time.)"); + obj_sign(1010, 6440, 50, 60, "* (Someone in a hood waits by\n a boat, humming.)|* (Maybe they'll give you a\n ride some other time.)"); break; case ROOM_HT_LAB: if (!flag(F_HT_LAB)) obj_trigger(1450, 5860, 16, 460, EV_HT_LAB, ACTOR_TRIGGER); @@ -271,7 +271,7 @@ static int ev_lab(Ev *c) { NARRATE("* (The lights come on.)\n* (A huge screen shows... you.)"); a = obj_alphys(2212, 6275, DIR_LEFT); WALK(a, pl.x + 70, pl.y + 29, 2); - SAY(FACE_ALPHYS, "* Oh! Oh no, you're already here!|* Um. H-hi! I'm Dr. Alphys.\n* The Royal Scientist.|* I've been, um, watching you.\n* On my cameras.|* Ever since you left the Ruins.\n* Your fights, your friends...|* It's been kind of amazing?|* I was supposed to stop you.\n* But, um... I'd rather help."); + SAY(FACE_ALPHYS, "* Oh! Oh no, you're already here!|* Um. H-hi! I'm Dr. Alphys.\n* The Royal Scientist.|* I've been, um, watching you.\n* On my cameras.|* Ever since the Ruins.\n* The fights, the friends...|* It's been kind of amazing?|* I was supposed to stop you.\n* But, um... I'd rather help."); /* and through the wall comes Mettaton */ g_shake = 10; m = obj_mtt(2215, 6232); @@ -296,7 +296,7 @@ static int ev_lab(Ev *c) { static int ev_fridge(Ev *c) { EV_BEGIN; if (!flag(F_HT_NOODLES)) { - NARRATE("* (The fridge is full of instant noodles.)\n* (Take a cup?)@Take@Leave"); + NARRATE("* (The fridge is full of\n instant noodles. Take one?)@Take@Leave"); if (CHOICE() == 0) { if (!item_add(ITEM_INSTANT_NOODLES)) { NARRATE("* (You're carrying too much.)"); @@ -369,11 +369,11 @@ static int ev_call(Ev *c) { break; case 3: set_flag(F_HT_CALL_ISLE, 1); - SAY(FACE_ALPHYS, "* Ring...|* Hi! So, those puzzles by the door:\n shoot the blocks out of the way,\n then...|* ...|* Oh. You already did them.|* Ha ha... never mind!\n* Bye!"); + SAY(FACE_ALPHYS, "* Ring...|* Hi! So, those puzzles by\n the door: shoot the blocks\n out of the way, then...|* ...|* Oh. You already did them.|* Ha ha... never mind!\n* Bye!"); break; case 4: set_flag(F_HT_CALL_CORE, 1); - SAY(FACE_ALPHYS, "* Ring...|* See that, far off? The CORE.\n* It powers the whole underground.|* The king's castle is past it.\n* We're almost there!|* D-don't worry. I've got your back."); + SAY(FACE_ALPHYS, "* Ring...|* See that, far off?\n* That's the CORE.|* It powers the whole\n underground.|* The king's castle is past it.\n* We're almost there!|* D-don't worry. I've got your back."); break; } EV_END; @@ -412,7 +412,7 @@ static int ev_cook(Ev *c) { NARRATE("* PERFECT! AND THE LAST INGREDIENT...\n* A HUMAN SOUL!"); g_shake = 6; SAY(FACE_ALPHYS, "* Ring...|* W-wait! Mettaton!\n* What about a vegan option?\n* For the viewers at home?"); - NARRATE("* ...OH, VERY WELL.\n* THE SUBSTITUTE IS ON THE COUNTER,\n OVER THERE. GO GET IT!"); + NARRATE("* ...OH, VERY WELL.|* THE SUBSTITUTE IS ON THE\n COUNTER, OVER THERE.\n* GO GET IT!"); PL_WALK(5900, 3114, 3); NARRATE("* (The counter starts to grow, taller and taller...)"); SAY(FACE_ALPHYS, "* Your phone has a JETPACK button!\n* I'm turning it on... now!"); diff --git a/games/undertale/src/ruins2.c b/games/undertale/src/ruins2.c index f60d0ee4..178643b3 100644 --- a/games/undertale/src/ruins2.c +++ b/games/undertale/src/ruins2.c @@ -484,7 +484,7 @@ static int ev_froggit(Ev *c) { else if (flag(F_FROGGIT_YELLOW) == 1) NARRATE("* Ribbit, ribbit.|* (Everyone dropped yellow.)|* (Try #PPINK#X names\n instead?)@Yes@No"); else - NARRATE("* Ribbit, ribbit.|* (Pink names...^2 Or should\n everyone go back to\n #YYELLOW#X?)@Yellow@Pink"); + NARRATE("* Ribbit, ribbit.|* (Pink names...^2 Or should\n everyone go back to #YYELLOW#X?)@Yellow@Pink"); if (flag(F_FROGGIT_YELLOW) == 2) set_flag(F_FROGGIT_YELLOW, CHOICE() == 0 ? 0 : 2); else if (CHOICE() == 0) set_flag(F_FROGGIT_YELLOW, flag(F_FROGGIT_YELLOW) + 1); NARRATE("* Ribbit."); diff --git a/games/undertale/src/ruins3.c b/games/undertale/src/ruins3.c index 84e004de..74a60e74 100644 --- a/games/undertale/src/ruins3.c +++ b/games/undertale/src/ruins3.c @@ -137,7 +137,7 @@ static int ev_toriel_chair(Ev *c) { CHOOSE(chair_opts, 2); if (CHOSEN() < 0) return 1; if (CHOSEN() == 0) { - SAY(FACE_TORIEL, "`3* What?|`1* This is your home now.|`0* Would you like to hear about\n my book on snails instead?@Yes@No"); + SAY(FACE_TORIEL, "`3* What?|`1* This is your home now.|`0* Would you rather hear about\n my book on snails?@Yes@No"); if (CHOICE() == 0) SAY(FACE_TORIEL, "`2* A snail fact!|`0* Snails have a tongue like a\n tiny saw."); else SAY(FACE_TORIEL, "`0* Oh...^2 Alright."); return 1; diff --git a/games/undertale/src/snowdin1.c b/games/undertale/src/snowdin1.c index f9a1515d..eeced798 100644 --- a/games/undertale/src/snowdin1.c +++ b/games/undertale/src/snowdin1.c @@ -270,7 +270,7 @@ static int ev_sans_intro(Ev *c) { g_shake = 4; WAIT(20); s->flags &= (uint16_t)~OF_DARK; - SAY(FACE_SANS, "`1* heh. never gets old.\n`0* i'm sans. sans the skeleton.|* i'm meant to be watching for humans... but i'm not big on capturing.|* my brother papyrus, though? he's really into it.|* speak of the devil. quick, go through the gate.\n* the bars are too wide to stop anyone anyway."); + SAY(FACE_SANS, "`1* heh. never gets old.\n`0* i'm sans. sans the skeleton.|* i'm meant to be watching for humans... but i'm not big on capturing.|* my brother papyrus, though? he's really into it.|* speak of the devil.\n* quick, go through the gate.|* the bars are too wide to\n stop anyone anyway."); /* through the gate, then behind the lamp */ WALK_TO(s, 2660, 432, 2); PL_WALK(2720, 392, 2); @@ -287,12 +287,12 @@ static int ev_sans_intro(Ev *c) { p = obj_get(ACTOR_PAPYRUS); WALK(p, 3000, 432, 3); SAY(FACE_SANS, "* sup, bro?"); - SAY(FACE_PAPYRUS, "`3* SANS!!! YOUR PUZZLES STILL AREN'T RECALIBRATED!\n* YOU'VE BEEN LAZING AROUND FOR DAYS!!!"); + SAY(FACE_PAPYRUS, "`3* SANS!!! YOUR PUZZLES STILL\n AREN'T RECALIBRATED!|* YOU'VE BEEN LAZING AROUND\n FOR DAYS!!!"); SAY(FACE_SANS, "* staring at this lamp. it's really cool."); - SAY(FACE_PAPYRUS, "`3* WHAT IF A HUMAN SHOWS UP!?!|`2* I'LL BE READY! I'LL CAPTURE THEM!\n* AND THEN THE ROYAL GUARD WILL HAVE TO LET ME IN!!!"); + SAY(FACE_PAPYRUS, "`3* WHAT IF A HUMAN SHOWS UP!?!|`2* I'LL BE READY!\n* I'LL CAPTURE THEM!|* AND THEN THE ROYAL GUARD\n WILL HAVE TO LET ME IN!!!"); SAY(FACE_SANS, "* hmm... maybe this lamp will help you."); SAY(FACE_PAPYRUS, "`3* SANS!!! YOU LAZYBONES!|* YOU GET LAZIER AND LAZIER EVERY DAY!!!"); - SAY(FACE_SANS, "* hey, take it easy. i've gotten a ton of work done today.\n`2* a skele-ton."); + SAY(FACE_SANS, "* hey, take it easy. i've\n done a ton of work today.|`2* a skele-ton."); SAY(FACE_PAPYRUS, "`3* SANS!!!"); SAY(FACE_SANS, "`1* come on. you're smiling."); SAY(FACE_PAPYRUS, "`3* I AM AND I HATE IT!|`3* UGH!!!\n`0* I WILL ATTEND TO MY PUZZLES...|* AS FOR YOUR WORK?\n`2* PUT A LITTLE MORE, \"BACKBONE\" INTO IT!!!!|* NYEH HEH HEH HEH HEH HEH!!!"); @@ -335,7 +335,7 @@ static int ev_sans_talk(Ev *c) { case 2: /* by the maze: his brother's outfit */ if (flag(F_ELECMAZE) < 2) SAY(FACE_SANS, "* go on. he made this one just for you."); else if (!flag(F_SANS_COOL)) { - SAY(FACE_SANS, "* thanks. he's having a blast.|* that outfit? party costume. he won't take it off.\n* calls it his \"battle body.\"|* cool brother, right?@Cool@Uncool"); + SAY(FACE_SANS, "* thanks. he's having a blast.|* that outfit? party costume.\n* he won't take it off.|* calls it his \"battle body.\"|* cool brother, right?@Cool@Uncool"); set_flag(F_SANS_COOL, CHOICE() + 1); if (CHOICE() == 0) SAY(FACE_SANS, "`1* you'd better tell him that."); else SAY(FACE_SANS, "* hey, pal. sarcasm isn't funny, okay?\n* my brother's a real star."); @@ -352,7 +352,7 @@ static int ev_sans_talk(Ev *c) { break; case 4: /* by the word search */ if (!flag(F_WORDSEARCH)) SAY(FACE_SANS, "* trust me. there's no way they can get past this one."); - else SAY(FACE_SANS, "* papyrus tried to solve yesterday's horoscope.\n`1* he says it was really tough."); + else SAY(FACE_SANS, "* papyrus tried to solve\n yesterday's horoscope.|`1* says it was really tough."); break; } EV_END; @@ -496,9 +496,9 @@ static int ev_nicecream(Ev *c) { if (!flag(F_NICECREAM)) { set_flag(F_NICECREAM, 1); NARRATE("* Nobody wants something cold today. Odd...|* OH!!!! A CUSTOMER!!!"); - NARRATE("* Hello! Would you like some Nice Cream?|* It's the frozen treat that warms your heart!\n* Now just 15G!@Yes@No"); + NARRATE("* Hello! Would you like some Nice Cream?|* The frozen treat that warms\n your heart! Just 15G!@Yes@No"); } else { - NARRATE("* Nice Cream! It's the frozen treat that warms your heart!\n* Now just 15G!@Yes@No"); + NARRATE("* Nice Cream! The frozen treat\n that warms your heart!|* Just 15G!@Yes@No"); } if (CHOICE() == 1) { NARRATE("* Well then... Tell your friends...|* There's ice cream... Out in the middle of the woods..."); @@ -558,15 +558,15 @@ static int ev_wordsearch(Ev *c) { Obj *p = obj_get(ACTOR_PAPYRUS); EV_BEGIN; pl.dir = DIR_RIGHT; - SAY(FACE_PAPYRUS, "`0* HUMAN!!!\n* THE NEXT PUZZLE WILL NOT BE EASY!\n* IT IS DESIGNED BY MY BROTHER, SANS!"); - SAY(FACE_SANS, "* it's right there. on the ground.\n* trust me. there's no way they can get past this one."); + SAY(FACE_PAPYRUS, "`0* HUMAN!!!|* THE NEXT PUZZLE WILL NOT\n BE EASY!|* IT IS DESIGNED BY MY\n BROTHER, SANS!"); + SAY(FACE_SANS, "* it's right there.\n on the ground.|* trust me. there's no way\n they can get past this one."); FREE(true); WAIT_UNTIL(pl.x >= 6440); FREE(false); pl.dir = DIR_RIGHT; SAY(FACE_PAPYRUS, "`3* SANS!!! THE PUZZLE DIDN'T DO ANYTHING!!!"); SAY(FACE_SANS, "* whoops. i knew i should have used today's crossword instead."); - SAY(FACE_PAPYRUS, "`3* CROSSWORD!?\n* IN MY OPINION, JUNIOR JUMBLE IS EASILY THE HARDEST."); + SAY(FACE_PAPYRUS, "`3* CROSSWORD!?|* IN MY OPINION, JUNIOR\n JUMBLE IS EASILY THE\n HARDEST."); SAY(FACE_SANS, "* what? really, dude? that easy-peasy word scramble?\n* that's for baby bones."); SAY(FACE_PAPYRUS, "`3* UNBELIEVABLE!!!\n* HUMAN!! SOLVE THIS DISPUTE!@Crossword@Junior Jumble"); set_flag(F_WORDSEARCH, CHOICE() + 1); @@ -581,7 +581,7 @@ static int ev_wordsearch(Ev *c) { static int ev_fishrod(Ev *c) { EV_BEGIN; - NARRATE("* (It's a fishing rod affixed to the ground.)\n* (Reel it in?)@Yes@No"); + NARRATE("* (A fishing rod, stuck in\n the ground. Reel it in?)@Yes@No"); if (CHOICE() == 0) { set_flag(F_FISH, 1); NARRATE("* (You reeled in the line...)\n* (There's a note on the hook.)|* \"Call me! Here's my number!\""); diff --git a/games/undertale/src/snowdin2.c b/games/undertale/src/snowdin2.c index 145a6bfd..3cef0f8a 100644 --- a/games/undertale/src/snowdin2.c +++ b/games/undertale/src/snowdin2.c @@ -126,9 +126,9 @@ void snow2_setup(int room, int from) { switch (room) { case ROOM_SPAGHETTI: obj_save(6745, 695, "* (Knowing the mouse might one day find a way to heat up the spaghetti...)\n* (It fills you with determination.)"); - obj_sign(6690, 658, 16, 20, "* (A note by the spaghetti.)|* ENJOY, HUMAN! (IT'S A TRAP: YOU'LL BE TOO BUSY EATING TO MOVE ON!)\n* - PAPYRUS"); - obj_sign(6734, 646, 38, 34, "* (It's a plate of frozen spaghetti.)\n* (It's so cold, it's stuck to the table.)"); - obj_sign(6788, 644, 38, 36, "* (It's a microwave.)\n* (Its only setting is \"spaghetti.\")\n* (It's unplugged.)"); + obj_sign(6690, 658, 16, 20, "* (A note by the spaghetti.)|* ENJOY, HUMAN!|* (IT'S A TRAP: YOU'LL BE TOO\n BUSY EATING TO MOVE ON!)\n* - PAPYRUS"); + obj_sign(6734, 646, 38, 34, "* (A plate of frozen spaghetti.)|* (It's so cold, it's stuck\n to the table.)"); + obj_sign(6788, 644, 38, 36, "* (It's a microwave.)|* (Its only setting is\n \"spaghetti.\")\n* (It's unplugged.)"); obj_sign(6742, 585, 18, 14, "* (Squeak!)"); break; case ROOM_SNOWPUZZLE: @@ -329,7 +329,7 @@ static int ev_tiles(Ev *c) { Obj *p = obj_get(ACTOR_PAPYRUS); EV_BEGIN; pl.dir = DIR_RIGHT; - SAY(FACE_PAPYRUS, "`0* HUMAN!!! THE MULTICOLOR TILE PUZZLE!\n* ONE PULL AND THE TILES CHANGE COLOR!|* EVERY COLOR DOES SOMETHING DIFFERENT!\n* RED: WALL. YELLOW: ZAP. GREEN: MONSTER. PINK: NOTHING.|* ORANGE, BLUE AND PURPLE... IT GETS COMPLICATED.|`2* GOT ALL THAT???@Yes@No"); + SAY(FACE_PAPYRUS, "`0* HUMAN!!! THE MULTICOLOR\n TILE PUZZLE!|* ONE PULL, AND THE TILES\n CHANGE COLOR!|* EVERY COLOR DOES SOMETHING\n DIFFERENT!|* RED: WALL. YELLOW: ZAP.\n* GREEN: MONSTER.\n* PINK: NOTHING.|* ORANGE, BLUE AND PURPLE... IT GETS COMPLICATED.|`2* GOT ALL THAT???@Yes@No"); if (CHOICE() == 1) SAY(FACE_PAPYRUS, "`3* OKAY! AGAIN!\n* PINK TILES ARE... WAIT, NO...|`4* ...|`0* JUST TRY IT ON YOUR OWN!"); SAY(FACE_PAPYRUS, "`2* LET'S DO IT!!!"); @@ -394,7 +394,7 @@ static int ev_gauntlet(Ev *c) { WAIT(40); SAY(FACE_PAPYRUS, "`0* ONE WORD FROM ME AND IT ALL SWINGS INTO ACTION!!!|`3* HERE IT GOES!|`4* ...|* ANY MOMENT NOW..."); SAY(FACE_SANS, "* well? what's the holdup?"); - SAY(FACE_PAPYRUS, "`3* I'M GETTING TO IT!!!|`4* ...ACTUALLY, IT'S TOO EASY. NOT FAIR AT ALL.\n`2* A SKELETON HAS STANDARDS! NYEH HEH HEH!!!"); + SAY(FACE_PAPYRUS, "`3* I'M GETTING TO IT!!!|`4* ...ACTUALLY, IT'S TOO EASY.\n* NOT FAIR AT ALL.|`2* A SKELETON HAS STANDARDS!\n* NYEH HEH HEH!!!"); WALK(p, 12000, 1236, 6); gone(p); SAY(FACE_SANS, "* ...|* i don't know what my brother's going to do.|* if i were you, i would keep going."); @@ -409,8 +409,8 @@ static int ev_sans_cliff(Ev *c) { int k = c->self ? c->self->arg : 0; EV_BEGIN; switch (k) { - case 1: SAY(FACE_SANS, "* hey, you could have asked me for help.\n`2* i know a thing or two about trees."); break; - case 2: SAY(FACE_SANS, "* his cooking's getting better.\n* give it a year, it might even be food."); break; + case 1: SAY(FACE_SANS, "* hey, you could have asked\n me for help.|`2* i know a thing or two\n about trees."); break; + case 2: SAY(FACE_SANS, "* his cooking's getting\n better.|* give it a year. it might\n even be food."); break; case 3: if (!flag(F_SNOW_SANS_TALK)) { set_flag(F_SNOW_SANS_TALK, 1); diff --git a/games/undertale/src/snowtown.c b/games/undertale/src/snowtown.c index 32770352..fd81a096 100644 --- a/games/undertale/src/snowtown.c +++ b/games/undertale/src/snowtown.c @@ -87,10 +87,10 @@ void town_setup(int room, int from) { } break; case ROOM_LIBRARY: - obj_sign(1830, 506, 30, 40, "* (A book about monster funerals.)|* (When a monster passes, its dust is spread on what it loved most.)\n* (The writer seems eager to reach the page count.)"); + obj_sign(1830, 506, 30, 40, "* (A book about monster funerals.)|* (When a monster passes, its\n dust is spread on what it\n loved most.)|* (The writer seems eager to\n reach the page count.)"); obj_sign(1874, 506, 30, 40, "* (A book comparing humans and monsters.)|* (Humans are sturdier... but they can't send a birthday card made of bullets.)"); - obj_sign(1918, 506, 30, 40, "* (Here I am... Writing this book.)\n* (A person comes in and picks up the book...)\n* (They start reading it...!)"); - obj_sign(1962, 506, 30, 40, "* (A book about magic and the SOUL.)|* (A monster who won't fight grows weaker... and cruel intent hurts them most.)\n* (The chapter stops there.)"); + obj_sign(1918, 506, 30, 40, "* (Here I am... Writing this\n book.)|* (A person comes in and picks\n up the book...)\n* (They start reading it...!)"); + obj_sign(1962, 506, 30, 40, "* (A book about magic and the SOUL.)|* (A monster who won't fight\n grows weaker...)|* (...and cruel intent hurts\n them most.)\n* (The chapter stops there.)"); obj_sign(2006, 506, 30, 40, "* (A history book. Monsters left their first city and crossed cold, swamp and heat.)|* (They named the new capital \"New Home.\" The book sighs about the King's naming.)"); obj_sign(2050, 506, 30, 40, "* (A book on what a SOUL is made of.)|* (Nobody knows for sure.)"); folk(1896, 640, "* Yes, the sign outside says \"Librarby.\"\n* We made a typo when we were making it."); @@ -114,7 +114,7 @@ void town_setup(int room, int from) { obj_sign(2560, 600, 40, 40, "* (It's dark... A trash tornado swirls in the corner.)"); break; case ROOM_SHED: - obj_sign(2650, 770, 30, 20, flag(F_PAP_CAPTURED) <= 1 ? "* (A note.)\n* SORRY ABOUT THE LOCK! UNDYNE IS ON HER WAY. MAKE YOURSELF COMFY!!!\n* - PAPYRUS" + obj_sign(2650, 770, 30, 20, flag(F_PAP_CAPTURED) <= 1 ? "* (A note.)|* SORRY ABOUT THE LOCK!\n* UNDYNE IS ON HER WAY.\n* MAKE YOURSELF COMFY!!!|* - PAPYRUS" : flag(F_PAP_CAPTURED) == 2 ? "* (A note.)\n* NEXT TIME, ASK BEFORE ESCAPING! I WAS WORRIED!!!\n* - PAPYRUS" : "* (A note.)\n* YOU CAN JUST STAY OVER, YOU KNOW! NO FIGHTING NEEDED!!!\n* - PAPYRUS"); obj_sign(2680, 820, 40, 30, "* (A dog bed. It's warm.)"); @@ -178,7 +178,7 @@ static int ev_pap_fight(Ev *c) { pl.dir = DIR_RIGHT; WALK(p, 3400, 1100, 1); if (flag(F_PAP_CAPTURED) >= 3) { - SAY(FACE_PAPYRUS, "`0* HUMAN! YOU KEEP COMING BACK...\n* WOULD YOU LIKE TO SKIP OUR BATTLE?@Yes@No"); + SAY(FACE_PAPYRUS, "`0* HUMAN! YOU KEEP COMING\n BACK...|* SHALL WE SKIP OUR BATTLE?@Yes@No"); if (CHOICE() == 0) { SAY(FACE_PAPYRUS, "`2* WELL THEN! LET'S BE FRIENDS INSTEAD!!!"); set_flag(F_PAPYRUS, 1); @@ -187,7 +187,7 @@ static int ev_pap_fight(Ev *c) { } else if (flag(F_PAP_CAPTURED)) { SAY(FACE_PAPYRUS, "`0* HUMAN! YOU ESCAPED!\n* LET'S TRY THIS AGAIN!!!"); } else { - SAY(FACE_PAPYRUS, "`0* HUMAN. I HAVE BEEN THINKING.\n* YOU LIKE PASTA. YOU SOLVE PUZZLES. YOU SEEM... COOL.|`2* I COULD BE YOUR FRIEND!!!|`3* NO! A ROYAL GUARD CAN'T BEFRIEND A HUMAN!\n* I MUST CAPTURE YOU AND JOIN THE GUARD!!!"); + SAY(FACE_PAPYRUS, "`0* HUMAN. I HAVE BEEN\n THINKING.|* YOU LIKE PASTA.\n* YOU SOLVE PUZZLES.\n* YOU SEEM... COOL.|`2* I COULD BE YOUR FRIEND!!!|`3* NO! A ROYAL GUARD CAN'T\n BEFRIEND A HUMAN!|* I MUST CAPTURE YOU, AND\n JOIN THE GUARD!!!"); } sv.hp = sv.maxhp; BATTLE(FORM_PAPYRUS); @@ -215,7 +215,7 @@ static int ev_pap_fight(Ev *c) { } set_flag(F_PAPYRUS, 1); spared: - SAY(FACE_PAPYRUS, "`4* NYOO HOO HOO... I COULDN'T EVEN CAPTURE YOU.\n* SO MUCH FOR THE ROYAL GUARD.|`0* WAIT... YOU WANT TO BE FRIENDS???|`2* WOWIE!!! COME HANG OUT AT MY HOUSE LATER!|`0* (THE CAPITAL IS FURTHER ON, PAST THE TOWN.)"); + SAY(FACE_PAPYRUS, "`4* NYOO HOO HOO...|* I COULDN'T EVEN CAPTURE\n YOU.\n* SO MUCH FOR THE GUARD.|`0* WAIT... YOU WANT TO BE FRIENDS???|`2* WOWIE!!! COME HANG OUT AT MY HOUSE LATER!|`0* (THE CAPITAL IS FURTHER ON, PAST THE TOWN.)"); set_flag(F_PAP_DATE, 1); set_flag(F_TOWN_HOUSE, 1); WALK(p, 3240, 1100, 6); @@ -247,7 +247,7 @@ static int ev_pap_date(Ev *c) { SAY(FACE_PAPYRUS, "`0* MY ROOM!!! IMPRESSIVE, ISN'T IT?|`4* NOW... HANGING OUT. I READ A GUIDE ABOUT THIS.|`0* STEP ONE: A PRESENT!\n* FOR YOU: SPAGHETTI!@Eat it@Keep it"); if (CHOICE() == 0) SAY(FACE_PAPYRUS, "`2* WOWIE!!! YOU LIKED IT?!?\n* I'LL HAVE TO MAKE MORE!!!"); else SAY(FACE_PAPYRUS, "`2* SAVING IT FOR LATER?\n* A TRUE CONNOISSEUR!"); - SAY(FACE_PAPYRUS, "`4* HUMAN... I'VE THOUGHT ABOUT IT.\n* LET'S STAY FRIENDS! THE BEST OF FRIENDS!!!|`2* TAKE MY PHONE NUMBER! CALL ANY TIME!\n* NYEH HEH HEH!!!"); + SAY(FACE_PAPYRUS, "`4* HUMAN... I'VE THOUGHT\n ABOUT IT.|* LET'S STAY FRIENDS!\n* THE BEST OF FRIENDS!!!|`2* TAKE MY PHONE NUMBER! CALL ANY TIME!\n* NYEH HEH HEH!!!"); NARRATE("* (You got Papyrus's phone number.)"); set_flag(F_PAP_DATE, 2); FADE_TO(ROOM_SNOWTOWN, 2240, 1096, DIR_DOWN); @@ -261,7 +261,7 @@ static int ev_grillbys(Ev *c) { SAY(FACE_SANS, "* i'm on another break.\n* from my other break."); return 1; } - SAY(FACE_SANS, "* hey. i'm on break.\n* want to grab some food at grillby's?@Sure@Not now"); + SAY(FACE_SANS, "* hey. i'm on break. want to\n eat at grillby's?@Sure@Not now"); if (CHOICE() == 1) { SAY(FACE_SANS, "* ok. maybe later."); return 1; @@ -269,7 +269,7 @@ static int ev_grillbys(Ev *c) { SAY(FACE_SANS, "* well, i know a shortcut."); FADE_TO(ROOM_GRILLBYS, 1230, 880, DIR_UP); SAY(FACE_SANS, "* here's a good seat.|* so, what'll it be?\n`2* fries or burger?@Fries@Burger"); - SAY(FACE_SANS, "* nice.|* say... papyrus says a #Yflower#X talks to him sometimes.\n* gives him advice. weird, right?|* if you see a talking flower, tell me, ok?|`1* oh, and thanks for paying."); + SAY(FACE_SANS, "* nice.|* say... papyrus says a\n #Yflower#X talks to him\n sometimes.|* gives him advice.\n* weird, right?|* if you see a talking flower, tell me, ok?|`1* oh, and thanks for paying."); set_flag(F_GRILLBYS, 1); FADE_TO(ROOM_WF1, 880, 1458, DIR_DOWN); EV_END; diff --git a/games/undertale/src/wf1.c b/games/undertale/src/wf1.c index 5a29bbfe..2f6b0049 100644 --- a/games/undertale/src/wf1.c +++ b/games/undertale/src/wf1.c @@ -309,7 +309,7 @@ void wf1_setup(int room, int from) { if (!flag(F_WF_UNDYNE1)) obj_trigger(1770, 1496, 40, 44, EV_WF_UNDYNE1, ACTOR_TRIGGER); break; case ROOM_WF_SEEDS1: - obj_sign(2172, 1452, 20, 20, "* (Bridge seeds bloom when they touch the water.\n* Push them in, one after another.)"); + obj_sign(2172, 1452, 20, 20, "* (Bridge seeds bloom when\n they touch the water.)|* (Push them in, one after\n another.)"); seeds_setup(&seed_puzzles[0]); break; case ROOM_WF_SEEDS2: @@ -567,7 +567,7 @@ static int ev_wf_grass(Ev *c) { static int ev_wf_telescope(Ev *c) { EV_BEGIN; if (!flag(F_WF_TELESCOPE)) { - SAY(FACE_SANS, "* hey. want to look through my telescope?\n* for you, it's free.@Sure@No thanks"); + SAY(FACE_SANS, "* hey. want to look through\n my telescope? it's free.@Sure@No thanks"); if (CHOICE() == 1) { SAY(FACE_SANS, "* suit yourself."); return 1; diff --git a/games/undertale/src/wf2.c b/games/undertale/src/wf2.c index 23ccc1ed..4ceb5c65 100644 --- a/games/undertale/src/wf2.c +++ b/games/undertale/src/wf2.c @@ -142,7 +142,7 @@ static int ev_dump_wake(Ev *c) { static int ev_cooler(Ev *c) { EV_BEGIN; - NARRATE("* (A cooler. There's Astronaut Food inside.)\n* (Take some?)@Yes@No"); + NARRATE("* (A cooler, with Astronaut\n Food inside. Take some?)@Yes@No"); if (CHOICE() == 0) { if (!item_add(ITEM_ASTRONAUT_FOOD)) { NARRATE("* (You're carrying too much.)"); @@ -187,12 +187,12 @@ static int ev_napsta_room(Ev *c) { SAY(FACE_NONE, "* oh... hi again.\n* it's nice to have company... i think."); return 1; } - SAY(FACE_NONE, "* oh... you really came.|* uh... this is my room. it's not much.|* sometimes i just lie on the floor for a while...\n* want to do that with me?@Sure@No thanks"); + SAY(FACE_NONE, "* oh... you really came.|* uh... this is my room. it's not much.|* sometimes i just lie on\n the floor for a while...|* want to do that with me?@Sure@No thanks"); if (CHOICE() == 0) { NARRATE("* (You lie down on the floor next to Napstablook.)"); WAIT(60); NARRATE("* (Time passes.)\n* (It's oddly peaceful.)"); - SAY(FACE_NONE, "* ...thanks. that was really nice.\n* i don't get to do that with anyone."); + SAY(FACE_NONE, "* ...thanks. that was\n really nice.|* i don't get to do that\n with anyone."); set_flag(F_NAPSTA_HOME, 2); } else { SAY(FACE_NONE, "* oh... that's okay..."); @@ -222,7 +222,7 @@ static int ev_snails(Ev *c) { WAIT(40); if (rnd_n(2)) { sv.gold = (uint16_t)(sv.gold + 9); - SAY(FACE_NONE, "* oh... your snail won... here's 9G.\n* ...sorry, that's all the prize money."); + SAY(FACE_NONE, "* oh... your snail won...\n here's 9G.|* ...sorry, that's all the\n prize money."); } else { SAY(FACE_NONE, "* oh... it lost. that's how it goes sometimes."); } diff --git a/games/undertale/src/wf3.c b/games/undertale/src/wf3.c index d6cce480..e8a4670b 100644 --- a/games/undertale/src/wf3.c +++ b/games/undertale/src/wf3.c @@ -65,7 +65,7 @@ void wf3_setup(int room, int from) { if (room < ROOM_WF_LANTERN || room > ROOM_HT_ENTRANCE) return; switch (room) { case ROOM_WF_LANTERN: - obj_sign(21176, 2414, 48, 28, "* (The lanterns light the way through the crystals.\n* Their glow is dim, but it's enough.)"); + obj_sign(21176, 2414, 48, 28, "* (The lanterns light the way\n through the crystals.)|* (Their glow is dim, but\n it's enough.)"); { static const int16_t lx[5] = {21260, 21440, 21280, 21680, 21720}, ly[5] = {2440, 2640, 2740, 2800, 2420}; for (int i = 0; i < 5; i++) obj_sign(lx[i], ly[i], 20, 20, "* (A lantern, glowing softly.)"); @@ -94,7 +94,7 @@ void wf3_setup(int room, int from) { case ROOM_WF_CHASM: /* the glyph at the end of the echo flowers' path, a SAVE, Monster Kid on the bridge */ obj_sign(22180, 1978, 38, 44, - "* (Ancient glyphs, about a prophecy.)|* (An angel will come down from the surface...)\n* (...and the underground will go empty.)"); + "* (Ancient glyphs, about a prophecy.)|* (An angel will come down\n from the surface...)|* (...and the underground\n will go empty.)"); echo(22210, 2070, ECHO("\"Yo... where'd everybody go?\"")); obj_save(22300, 2000, "* (The roar of the chasm fills you with determination.)"); if (flag(F_MK_CHASM) == 1) set_flag(F_MK_CHASM, 4); /* (left in the middle of it) */ @@ -297,7 +297,7 @@ static int ev_pap_neon(Ev *c) { EV_BEGIN; if (c->self) gone(c->self); set_flag(F_PAP_NEON, 1); - SAY(FACE_PAPYRUS, "* Ring...|`0* HUMAN! PAPYRUS HERE!|* I'VE BEEN THINKING ABOUT FRIENDSHIP.|`2* AND I THINK YOU AND UNDYNE\n WOULD BE THE BEST OF FRIENDS!!!|* WE SHOULD ALL GET TOGETHER SOMETIME!|`0* WELL! BYE!"); + SAY(FACE_PAPYRUS, "* Ring...|`0* HUMAN! PAPYRUS HERE!|* I'VE BEEN THINKING ABOUT FRIENDSHIP.|`2* AND I THINK YOU AND\n UNDYNE WOULD BE THE BEST\n OF FRIENDS!!!|* WE SHOULD ALL GET TOGETHER SOMETIME!|`0* WELL! BYE!"); if (chasing) NARRATE("* (Undyne waited politely for you to hang up.)"); EV_END; } @@ -318,7 +318,7 @@ static int ev_hot_undyne(Ev *c) { u = obj_deco(SPR_UNDYNE_FALLEN, 534, 6213, false); if (u) u->name = ACTOR_UNDYNE, u->event = EV_HOT_UNDYNE, u->flags |= OF_TALK, obj_set_box(u, 0, 6, 50, 20); set_flag(F_UNDYNE, 3); - NARRATE("* (Undyne collapses on the bridge.)\n* (In all that armor, the heat is too much for her.)"); + NARRATE("* (Undyne collapses on the\n bridge.)|* (In all that armor, the\n heat is too much for her.)"); return 1; } if (flag(F_WATER_CUP) != 1) { From 19d257d038df6c0e42225c4592a23c345a3e76c0 Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 15:29:21 +0000 Subject: [PATCH 15/19] Undertale: Hotland's third floor, up to the MTT Resort's stairs The elevator from the second floor now goes up to the third, as the Undertale Wiki describes it (what's said is short and in our own words): - Out of the elevator: the spiders' bake sale (a donut or cider for 9999G) and the scared donut guy. - The vent islands: every grate blows the way its arrow points, to the next island (the routes match the wiki's); Alphys calls about the door east, which opens once both shooting puzzles are solved (one shot each, the wiki's solutions: left then right; left, up, left, left, right). North, the Diamond Boys come out after; south, over the belts past the laser drones (ride them without a step: they're blue), and Alphys asks Frisk to watch anime with her. - The spider entrance (a SAVE) and Muffet's lair: its webs slow Frisk down, the big one stops Frisk, and Muffet fights. Her SOUL mode keeps Frisk's SOUL purple, on three strings; her spiders ride them, her croissants come back, her donuts bounce, and at mealtimes her pet waits as the strings are pulled down to it. Pay softens her hits, Struggle halves the price; she lets Frisk go when her spiders send word (turn 17), or after one of their treats. - Mettaton's musical on his balcony, the trapdoor, and the tile puzzle below with its 30 seconds and flames: red tiles are walls, yellow ones shock Frisk back, orange smells of oranges (then the blue water's piranhas bite), purple soap slides Frisk on and smells of lemons, blue next to yellow is electrified. Then Mettaton's fight: no hurting him, until ACT Yellow turns the SOUL yellow and its shots drain him. - The crossroads: the Nice Cream guy (sold out to the Royal Guards if they were spared, who stand there with their ice cream), Heats Flamesman asking for his name, the elevator R3, and the stairs north to the MTT Resort, where the game now ends. Engine: the purple and yellow SOUL modes; floors that slow Frisk (room_speed); the shooting puzzles' shots per puzzle. Tests: the second floor's route now ends up the elevator; a third-floor route goes to the Resort's stairs (Muffet spared, the tiles solved, Mettaton's power drained); Muffet spared and Mettaton's yellow button in battle. Docs and screenshots. --- README.md | 4 +- docs/play.md | 2 +- games/undertale/README.md | 21 +- games/undertale/docs/crossroads.png | Bin 0 -> 6812 bytes games/undertale/docs/muffet.png | Bin 0 -> 3298 bytes games/undertale/docs/musical.png | Bin 0 -> 4219 bytes games/undertale/docs/shoot3.png | Bin 0 -> 1438 bytes games/undertale/docs/tiles.png | Bin 0 -> 4829 bytes games/undertale/docs/yellow.png | Bin 0 -> 2656 bytes games/undertale/src/battle.c | 2 + games/undertale/src/battle.h | 12 +- games/undertale/src/bullets.c | 41 ++- games/undertale/src/data.bin | Bin 1013678 -> 1071508 bytes games/undertale/src/data.h | 152 +++++----- games/undertale/src/events.c | 2 + games/undertale/src/events.h | 6 +- games/undertale/src/flags.h | 11 +- games/undertale/src/hotland.h | 8 +- games/undertale/src/ht1.c | 46 +++ games/undertale/src/ht2.c | 6 +- games/undertale/src/ht3.c | 445 ++++++++++++++++++++++++++++ games/undertale/src/htmon.c | 216 +++++++++++++- games/undertale/src/menu.c | 2 +- games/undertale/src/monsters.c | 2 +- games/undertale/src/monsters.h | 8 +- games/undertale/src/rooms.c | 10 +- games/undertale/src/shoot.c | 15 +- games/undertale/src/shoot.h | 2 +- games/undertale/src/world.c | 3 +- games/undertale/src/world.h | 1 + games/undertale/tests/check.py | 31 +- games/undertale/tests/hotland2.path | 2 +- games/undertale/tests/hotland3.path | 222 ++++++++++++++ games/undertale/tools/rooms.py | 37 +++ games/undertale/tools/sprites.py | 48 ++- 35 files changed, 1248 insertions(+), 109 deletions(-) create mode 100644 games/undertale/docs/crossroads.png create mode 100644 games/undertale/docs/muffet.png create mode 100644 games/undertale/docs/musical.png create mode 100644 games/undertale/docs/shoot3.png create mode 100644 games/undertale/docs/tiles.png create mode 100644 games/undertale/docs/yellow.png create mode 100644 games/undertale/src/ht3.c create mode 100644 games/undertale/tests/hotland3.path diff --git a/README.md b/README.md index 6197bb02..fbfabac2 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins, Snowdin, Waterfall and Hotland's first two floors, from the golden flowers to Mettaton's news report
Download + Undertale
Undertale

The Ruins, Snowdin, Waterfall and Hotland, from the golden flowers to the MTT Resort's door
Download More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins, Snowdin, Waterfall and Hotland's first two floors are out, the rest of Hotland, the CORE and New Home are next +- [ ] Undertale: the Ruins, Snowdin, Waterfall and Hotland are out, the MTT Resort, the CORE and New Home are next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index 4e5f6393..954a89ca 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall and Hotland. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. On the second floor, press the switches as the top conveyor belt carries you past them, and in Mettaton's news report, touch each bomb and defuse it while it's in the DEFUSE ZONE. For now the game ends at the elevator past the news report. +Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall and Hotland. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. On the second floor, press the switches as the top conveyor belt carries you past them, and in Mettaton's news report, touch each bomb and defuse it while it's in the DEFUSE ZONE. When Muffet turns your SOUL purple, it keeps to three strings: **Up** and **Down** hop between them. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange makes you smell of oranges (and blue water's piranhas bite then), and purple soap slides you on and smells of lemons. When your SOUL turns yellow, **OK** shoots. For now the game ends on the stairs up to the MTT Resort.
diff --git a/games/undertale/README.md b/games/undertale/README.md index 2194c430..2bae6095 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins, Snowdin, Waterfall and Hotland's first two floors, from the bed of golden flowers to the elevator past Mettaton's news report. The rest of the Underground is on the way. + The Ruins, Snowdin, Waterfall and all of Hotland, from the bed of golden flowers to the stairs up to the MTT Resort. The rest of the Underground is on the way.

@@ -28,7 +28,8 @@ * **Waterfall:** Monster Kid, Grillby's with Sans, the echo flowers, the bridge seeds (and the secret bridge to the quiche), the wishing room, Undyne chasing you with her spears, Sans's telescope, the marsh where the land is black and the water glows, Onionsan, the piano's secret song, the statue in the rain and Monster Kid under your umbrella. Then the fall into the garbage dump, Mad Dummy, Napstablook's house and snail farm, the small bird back over the gap, Gerson's shop, the mushroom maze and Temmie Village with its Tem Shop. And at the end of Waterfall: the lantern maze, Undyne at the dead end (and Monster Kid in her way), the echo flowers' path, Monster Kid on the chasm's bridge, Undyne on her crag, her fight and her chase, and Hotland's edge, where the heat gets her and the water cooler helps. * **Hotland's first floor:** Alphys's Lab, where Mettaton bursts in with his quiz show, the conveyor belts, the Magma Chamber's steam vents and the burnt pan, the laser walkway, the two shooting puzzles that open the door, the vents over the lava and Mettaton's cooking show, with your phone's jetpack, up to the elevator. Alphys calls you as you go. * **Hotland's second floor:** Sans's hot dog stand and Heats Flamesman, the invisible path to the Art Club's room, the Stained Apron, the conveyor belt puzzle and its three switches, the vent puzzle, the Bad Opinion Zone, the Royal Guards, and Mettaton's news report, where everything is a bomb and the clock is running. -* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane, Pyrope and the Royal Guards in Hotland, and the news report's bombs, defused in the DEFUSE ZONE. +* **Hotland's third floor:** the spiders' bake sale, the vent islands and their two shooting puzzles (the Diamond Boys, and Alphys asking you to watch anime), the conveyor belts past the laser drones, the spider entrance and Muffet's sticky lair, Mettaton's musical and the trapdoor to his tile puzzle against the clock, and the crossroads with the Nice Cream guy and Heats Flamesman, by the stairs up to the MTT Resort. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane, Pyrope and the Royal Guards in Hotland, the news report's bombs, defused in the DEFUSE ZONE, Muffet, whose purple SOUL keeps to her strings, and Mettaton, worn down by the yellow SOUL's shots. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -125,6 +126,18 @@ Mettaton's news report
MTT News: two minutes to go Defusing a bomb
Defuse it in the DEFUSE ZONE + + The third floor's shooting puzzle
One shot to clear the way + Muffet's battle
Muffet's strings, the purple SOUL + + + Mettaton's musical
Mettaton's musical + The tile puzzle
The tile puzzle, against the clock + + + The yellow SOUL
The yellow button + The crossroads
Nice Cream, by the MTT Resort + ## How to play @@ -137,7 +150,7 @@ Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bo In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. The Tem Shop is the one shop that buys what you carry. When Undyne turns your SOUL green, it can't move: turn its shield with the arrows to block her spears. She can't be spared: run, and she'll chase you. -In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. On the second floor, the top conveyor belt carries you past three switches: press them one after another as you go by. In the vent puzzle, every panel you land on turns all the vents around, and the one at the top turns them back. To spare the Royal Guards, clean 02's armor, catch its green stars, then whisper to 01. In the news report, touch a bomb to face it, and Defuse it (or FIGHT it) while it's in the DEFUSE ZONE. +In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. On the second floor, the top conveyor belt carries you past three switches: press them one after another as you go by. In the vent puzzle, every panel you land on turns all the vents around, and the one at the top turns them back. To spare the Royal Guards, clean 02's armor, catch its green stars, then whisper to 01. In the news report, touch a bomb to face it, and Defuse it (or FIGHT it) while it's in the DEFUSE ZONE. On the third floor, ride the belt past the blue drones without a step. When Muffet turns your SOUL purple, it keeps to three strings: Up and Down hop between them, Left and Right move along. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange ones make you smell of oranges (and the blue water's piranhas bite then), purple soap slides you on and makes you smell of lemons, and blue next to yellow is electrified. After it, ACT and press the yellow button: your SOUL turns yellow, and OK shoots. Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. @@ -154,7 +167,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **The Ruins, Snowdin, Waterfall and Hotland's first two floors, for now:** the elevator past Mettaton's news report ends the game, on a screen that says the rest of the Underground is still to come. The rest of Hotland, the CORE and New Home come next, one at a time. +* **The Ruins, Snowdin, Waterfall and Hotland, for now:** the stairs up to the MTT Resort end the game, on a screen that says the rest of the Underground is still to come. The MTT Resort, the CORE and New Home come next, one at a time. * **No music or sound:** the calculator has no speaker. * **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. diff --git a/games/undertale/docs/crossroads.png b/games/undertale/docs/crossroads.png new file mode 100644 index 0000000000000000000000000000000000000000..3542031c70c5b24bf9c30feb251d8a665053e6c8 GIT binary patch literal 6812 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

xM;lFb~=och9IA{<4H>W_Xe5ADX zXG5E^YN9Ea&_J0Cm}@C2jtRin#Lv}1i+cFnl&iLJNMSrxr?3HqIV%P(f})#(%-jiB z4Y-cF&x!*pvLy^jzK_;QZ8ntwf zJQw{{8&J!JR`GfwXX(vld&l(KQ;^&zmihNvLXMqN;`lfrWNrlHJ_rv%IOc-uOTYC(no{TD z#>$Z8Y(N_4T~gz)tg3~sqO!ym7t)a{wPX&+h>?+!V+P~4D(k?SBE>(SA!86ao5f}h2gKz zSKdl%nZJ~}n$W)j0~na}-UKe%6j)bbNl+0$jLc!tO+OM_JD~>+ip<+6BVouv1GJWm zjo!C}rv2_BgroD1Owr9IPS%?_-yio~7x7BfnS0-F|D2?H=ZC)vnx9K3e#u^CqgGY? zdLaQM6J$kMAxuvnuRD#eeX>WBP24;J$4MSP5goe&F$R12MYYbrE0y%ggMK(o)JXFx zi--_VOWuG$jgXQucNccCD-S)*FcaSsbGMr?{hia&YjkV~tnTz&eK1Pq2`=VR4q^M4 zpgoFIk1gFCMmVRR2@joQ|{gv$vruH&A zc%0sW*~FOOW1sl@(hhb2;AL&YB*L@6-c4Y|gL7;$YZlbIgc;LR32PUi1VFYM$4n!f z=MThDgqBH1f@eux;+Mbb!qM-vZ$)EM08%>SNxnyj-qMSHD!lN*t_ypIMS@6G^3*1;p0t(%9BvC;#QA|tTAe4I1m@%U=#|BVz7HvTR6%w0^%_YGTN%0Y}? zUoCfGO5^k|6$#iPzrJ7|Gca?w3o4+Cu;iVx&r2}!_gP)MzUPT*AaYj`yFle z@{NL%6;CctQ2vX%x$(SkA%Gs~8MhsJV2@u^CtCYU2&enr$$bv8c}=}y`%Z5bx_Nnh z+~c&<#zpZYecMIG;TEiPSF5y7!7kXC9izzsbN-Qwa@Q zZG|;gNr?&SV;>?ckWby&-j{9sN6JA_+$w=WlCKYZV0Vs}al@}sQuXGS8 zS&43~CPUaV0hHuN+zdb=P@U6H?wh-isC(rqz?51L$??K+n=Bxy^e-E~QGAVPAh**2 z0I;dIZlL3qmWAZz2)EOF%}ywZ3s;aB^aJ>$SCKP2OUy12p5Xa0&-HiEi82vJj10r= zDvELi>3otd@DnaP$0dX$w8+#v)H@zKe>061N!sXOm!iTu)qhBx-#;Hh5V!6jp YGy)fplF7p{uTB6hH9cU1ihb070UBiiE&u=k literal 0 HcmV?d00001 diff --git a/games/undertale/docs/muffet.png b/games/undertale/docs/muffet.png new file mode 100644 index 0000000000000000000000000000000000000000..a185f25f2e3dfc776ce74bf32710805e360222a4 GIT binary patch literal 3298 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/musical.png b/games/undertale/docs/musical.png new file mode 100644 index 0000000000000000000000000000000000000000..5ddf1c90b9c74c8ac0c13549f2fa0be50f7bdd01 GIT binary patch literal 4219 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 P1%R%$p;ncKZOnfG9hpGU literal 0 HcmV?d00001 diff --git a/games/undertale/docs/shoot3.png b/games/undertale/docs/shoot3.png new file mode 100644 index 0000000000000000000000000000000000000000..565e46b027e33b4852855ee7574ec074a5c11fc6 GIT binary patch literal 1438 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoKX5Ps$$$P@HVh1`sh%#5Ar*7p-o2Rh*iEAC z;gTtC(hG}VgK?3CAMPn`3rtYicl zgarCtm40Ek_T%66?-!jHEXc2~leTS{-`sFB=7rza(=QkqUUNz`LC{~TDu$fom+1y} zg=-J;#2i_qa5cKE;q{9%L3^ii?3mJCxN5ruWB6r{kiB0yb}Tp3>_)?;BcMwzMTM zwI%Q^6t8}^Jt21fg56gi=PZ3yb~TNyEg>zzF4Bs@s%A7Q&S(Im?*|UcytO(L-TOS_cIa%ds-G#VUx)0z z_tlPM?`*nSx%1rnyX`Q`zRuq!b^hYE)n*7U$yLl)9BY5GbfNG}pc^DBHUN1)GafHI z3-{F?_H}QL_y6BtQ7dc3x333i7CbG$89yxxQtSRi&x1==^4r|Fcy77vt%?j|W@iKA z55R!?H~F=bx)G4a2uAN4#aCDTeX@0^xZGYOla6W$IfqYJA<%{6U<(S?Tq5z&)?tQE5{V?abW7)*H;S?ne<-oislVh zeK6}?_tgSVCcTVxp}g0XA7tH{nzciMar&jp%iFXC3uOPMX6@i%6yLbTllS_Al0!;$ z{~zDK=$ya+4^v2Dfs@{U`(+mHKgoua+ZdYm_Qn4Fef#&%?#sttKAYBVe(vtys>a#T z@22PX=U#Na`{(t~*RLn~uPe{1R(H3s{C95RnY(`%w$Hv`e9qN5>%D0AG5hWJ<~@CX z+}M1T`uE0=>(XUEs}4(7PkS$OukCT>nx(btMYZSNelqWDy~VA0soSa|e_y|6JmcKc z-}yB~@)d43g@4^Xf9uKj-`|>RUY_32dF-Q8^+`W-{u`fLc;@H&$uIwG5zb@h^osMZ zc1+yq>F2G(lGUy6KmGMy^tJ8%)f=akx^LqTulk%(Jp2C{W#>DNLEiG<) z;;{Hf@Avl%EFOG2==r<$B3Ji4zSwt{_7_wymF`=WzO;95*~_kJdiFaP?KIyK|Mpk( zhga;G^(q_Ry_+pj!%_RoV($Mt_bqllF@7Dj_r8wT-_*-|;yeFuNLl@T@A;Y+rq@zG ztma=J_3rzAtt2kNzFKv` z-?skwfPelvzsa)=zVG?EKI5oZ?$VEo&gZ`Q+dKK%TV~{VL1Ul)$sdxLdAvR->IO*0 M)78&qol`;+0HK$FHUIzs literal 0 HcmV?d00001 diff --git a/games/undertale/docs/tiles.png b/games/undertale/docs/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..9521c175a0a6312abbaba5c50e074abad00c6952 GIT binary patch literal 4829 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/yellow.png b/games/undertale/docs/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..152b397a9f20b53ffd65e7b83b856a760ed39f00 GIT binary patch literal 2656 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 D{Cl-n literal 0 HcmV?d00001 diff --git a/games/undertale/src/battle.c b/games/undertale/src/battle.c index bacd3aab..9bfa73b9 100644 --- a/games/undertale/src/battle.c +++ b/games/undertale/src/battle.c @@ -768,6 +768,8 @@ void battle_draw(void) { gfx_clip(bt.x0 + 2, bt.y0 + 2, bt.x1 - bt.x0 - 4, bt.y1 - bt.y0 - 4); draw_box_contents(); if (bt.phase == P_ATTACK) { + if (bt.soul_mode == SOUL_PURPLE) + for (int i = 0; i < NSTRINGS; i++) gfx_rect(bt.x0 + 2, soul_string_y(i), bt.x1 - bt.x0 - 4, 1, rgb565(0xD535D9), 255); attack_draw(&bt, bt.atk, bt.atk_t); bullets_draw(); if (!bt.inv || (bt.inv / 2) % 2) gfx_sprite(SPR_HEART, bt.soul_mode, soul_x(), soul_y(), 0, 255); diff --git a/games/undertale/src/battle.h b/games/undertale/src/battle.h index 006f93a9..12a65843 100644 --- a/games/undertale/src/battle.h +++ b/games/undertale/src/battle.h @@ -88,7 +88,7 @@ typedef struct Monster { /* the bullets: a pool, moved by kind each frame; the attack's code makes them and steers them */ enum { BK_NONE, BK_LINEAR, BK_GRAVITY, BK_HOMING, BK_ORBIT, BK_SCRIPT }; -enum { BC_WHITE, BC_BLUE, BC_ORANGE, BC_GREEN }; +enum { BC_WHITE, BC_BLUE, BC_ORANGE, BC_GREEN, BC_YELLOW }; typedef struct { uint8_t kind, color, frame, flags; uint16_t spr; @@ -102,7 +102,8 @@ typedef struct { int16_t angle; /* drawn turned (1/256 turns) */ uint8_t owner; /* the monster that made it */ } Bullet; -enum { BF_NOCLIP = 1, BF_ONCE = 2, BF_HIDDEN = 4, BF_BOX = 8, BF_FRONT = 16, BF_HARMLESS = 32, BF_SHIELD = 64 }; /* (shield: the green SOUL's blocks it) */ +enum { BF_NOCLIP = 1, BF_ONCE = 2, BF_HIDDEN = 4, BF_BOX = 8, BF_FRONT = 16, BF_HARMLESS = 32, BF_SHIELD = 64, + BF_PLAYER = 128 }; /* (shield: the green SOUL's blocks it; player: the yellow SOUL's own shot) */ typedef struct Battle { int form; @@ -159,7 +160,12 @@ void bullets_update(void); void bullets_draw(void); bool soul_hit_test(void); /* bullets touching the SOUL hurt it */ void soul_update(uint32_t keys); -enum { SOUL_RED, SOUL_BLUE, SOUL_GREEN }; /* (the heart's frame too): green stays put, its shield turns */ +/* (the heart's frame too): green stays put, its shield turns; purple keeps to three strings across the board + * (up and down hop between them); yellow shoots up (Z) */ +enum { SOUL_RED, SOUL_BLUE, SOUL_GREEN, SOUL_PURPLE, SOUL_YELLOW }; +#define NSTRINGS 3 +int soul_string_y(int i); /* the purple SOUL's strings: where string i is now (pixels) */ +extern int32_t soul_strings_shift; /* how far they've been pulled down (1/16 px; they come round from the top) */ void soul_set_mode(int mode); /* blue: it falls, up jumps */ void gfx_bone(int cx, int cy, int w, int h, uint16_t col, uint8_t a); void soul_hurt(int dmg, int color); diff --git a/games/undertale/src/bullets.c b/games/undertale/src/bullets.c index 93af0b39..4e21c697 100644 --- a/games/undertale/src/bullets.c +++ b/games/undertale/src/bullets.c @@ -33,15 +33,53 @@ int soul_y(void) { return bt.sy / FX; } static int32_t soul_vy; #define BLUE_JUMP (3 * FX) #define BLUE_GRAVITY 3 /* 1/16 px a frame, each frame */ +/* the purple SOUL: the string it's on; the strings, evenly down the board (pulled down, they come round again) */ +static int string_on; +int32_t soul_strings_shift; +int soul_string_y(int i) { + int h = bt.y1 - bt.y0 - 8, gap = h / NSTRINGS; + return bt.y0 + 4 + (gap / 2 + gap * i + (int)(soul_strings_shift / FX)) % h; +} +static uint32_t keys_before; void soul_set_mode(int mode) { bt.soul_mode = mode; soul_vy = 0; + string_on = NSTRINGS / 2, soul_strings_shift = 0; + if (mode == SOUL_PURPLE) bt.sy = soul_string_y(string_on) * FX; } void soul_update(uint32_t keys) { int sp = bt.speed; if (keys & K_X) sp /= 2; int dx = ((keys & K_RIGHT) != 0) - ((keys & K_LEFT) != 0), dy = ((keys & K_DOWN) != 0) - ((keys & K_UP) != 0); int x0 = (bt.x0 + 2 + 4) * FX, x1 = (bt.x1 - 2 - 4) * FX, y0 = (bt.y0 + 2 + 4) * FX, y1 = (bt.y1 - 2 - 4) * FX; + uint32_t pressed = keys & ~keys_before; + keys_before = keys; + if (bt.soul_mode == SOUL_PURPLE) { + /* up or down: the next string that way (the nearest above, or below); along it, the arrows */ + int y = soul_string_y(string_on); + if (pressed & (K_UP | K_DOWN)) { + int best = -1; + for (int i = 0; i < NSTRINGS; i++) { + int yi = soul_string_y(i); + if ((pressed & K_UP) ? yi < y - 2 && (best < 0 || yi > soul_string_y(best)) + : yi > y + 2 && (best < 0 || yi < soul_string_y(best))) + best = i; + } + if (best >= 0) string_on = best, y = soul_string_y(best); + } + int ty = y * FX; + bt.sy += clamp_i(ty - bt.sy, -5 * FX, 5 * FX); + bt.sx = clamp_i(bt.sx + dx * sp, x0, x1); + return; + } + static int shot_cool; + if (shot_cool) shot_cool--; + if (bt.soul_mode == SOUL_YELLOW && (pressed & K_Z) && !shot_cool) { + /* a shot, straight up (a few frames apart) */ + Bullet *b = bullet_new(SPR_ORB, bt.sx, bt.sy - 6 * FX, 0, -6 * FX); + if (b) b->flags |= BF_PLAYER | BF_HARMLESS, b->color = BC_YELLOW, b->r = 2, b->life = 50; + shot_cool = 6; + } if (bt.soul_mode == SOUL_GREEN) { /* it stays in the middle; the arrows turn its shield */ static const uint32_t bit[4] = {K_DOWN, K_UP, K_LEFT, K_RIGHT}; @@ -135,7 +173,8 @@ void bullets_draw(void) { for (int i = 0; i < MAX_BULLETS; i++) { const Bullet *b = &bullets[i]; if (b->kind == BK_NONE || (b->flags & BF_HIDDEN)) continue; - uint16_t color = b->color == BC_BLUE ? rgb565(0x14A9FF) : b->color == BC_ORANGE ? rgb565(0xFCA600) : b->color == BC_GREEN ? rgb565(0x00C000) : 0; + uint16_t color = b->color == BC_BLUE ? rgb565(0x14A9FF) : b->color == BC_ORANGE ? rgb565(0xFCA600) : b->color == BC_GREEN ? rgb565(0x00C000) + : b->color == BC_YELLOW ? rgb565(0xFFFF00) : 0; if (b->spr == SPR_BONE) { gfx_bone(b->x / FX, b->y / FX, b->w, b->h, color ? color : C_WHITE, b->alpha); continue; diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index 3c55236c9fb15e342071e6bf4f96cdc08df987a7..b72db20c264fbbaf9b166309aec700f0f02d3cb4 100644 GIT binary patch delta 84615 zcmW)p30zLu8^_;s&Rr}?2r>S~7-Nhv#u#I=lZGTDNtQ8|#x^8dmWi8W-$IOC6w}xx z3E7gg2_Yc~A%tv+vHZX0GoRmkU)|?C=Q+=Q&b>9epSB6#-{FVe-mX8Cv)OD-K(1!9 zxmB{+3fI_dMZ0Xa)&EnrofS>ni8`jOUS065X=}Lbhwm)i_LWWAz6RfbZ^3sqVQb8_ z3D+OE{%A97E%@HjrrFx^@Akk2xPngnyfbhEU4T2Zo?Lr!ub0iiHk9vvd>;lzfKgzy zt)4B+rfe&?7jD@q+9LT9WvgU6z%|ZR-geSf)|STibenEF&-H?>ob5W-Tn6VcK>^?I zf_vaTCXxv5BZRG?khVsUHRbz{pc(iHGzUL(uLWoY+JJWatUc(!_m1EfxOL&*?w~8*dvNsx zJ%JbKC3KrFbp5~pFc1tvoT1PT?+(ETFp__a0ps{S9!vle!6Xm}CW9#qoF>ZHLij$5 z@3Xni0dx7;Qm$bvsh4cUk|Oz66f57wbvM_8T;stZC{J=tmZjgce&o<`V`vNd@luWz+0sJ!1W`rNnsPx-d2&T1E>TlTYOZJnyorlCr|^_gs1`6 zZ$Lxvtt?~vk!v&X6KD>82F{=bXbD<@*3h|f{RMOaoq-$Z0^H&0%eAkpZ2Lo+w()$Q z0IZ38OhSOEV7inx3(N$wz-%xV%m)jhTLcz^CDP8emg_pkY~mULHiIqDMS*R6{~JVu zf53LI1MCF5z;0>SV!0lW!m`Ej+A_GF1(~v(Er;t> za1C5%(i`9=xW&J3gFAe`3-0s15Ig`6`F9a`B9-kKcq#h}+beFAfY+dun{UB8@B!GA zv`HmwimMJxP!^O26+lH$iTjngI&!VbwK}N5_nIpXXiLpyk zLd?51t>RtVoN9M%WoqBGE%@rL&F;Iqwk6H(asM9o?{WVg_wV!X!v8Qx71~Z1g|<57 z9`Nsn;1MYL54+`Ku8(cg2yUBgMWc#!YnL}mY+u-y*cw$WvHe`D#OCtlYi^Z-H=js? zD>_-kJOTd+XkBd5h1gLB4cL$zEVEO>kyUtpsl=x5G=8Rub#|KQTtgG%8|wVq0468{ z%7SwLVP})_Tj-sfCD7hzmC$~t_n!_Vr7TJj6N*9BjKdf==7a9-5sT3?(OU*mYT zuldq|A2i_l4cBkDHst#4e@GCGxHb|A;ybS2iDc23Yh$k8bN!xc6Ru6T{{z<__;*vT zKmLbg(TwX){~=j4=h~e6KXd)MuFdAm)!7oxdM>y$NHJS7aZ47_Qfvc`qNNB1@t_zq zkS)a^uo`HpC6l%k(I6jqXe~vk#YX~o2^#4wg&$ZC$`~z0d$1EYF^MObXSQOpR!r6k zjkOZFz)iGbm91E1E8#0!i6rn2j8Lt_CD2}LC8mJApqAcB%mXJtDR>90QAR7V1q7O{ zVcuGd206f0v=)0oA@G*1#RoQ)?@N^|qo26oY|AThY{P2ak5}XeX`#H_;9gwG&T3eQC9WK|66? zwG(Z%b}(osob+}g6eNI`V2HtePzFZr&Gs;B&&t}1XwhC&lkG()cn$`t_M)lQUPJ&p zy}fV+F`$moUMvDhMhC`r5ZS;*bP%0Dti?wWs3$w%EFEx`4me8(aUQf)9Yi454eo*3 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

>~8xZ9003`z(hf%pf3IfE(7l`W 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 delta 42454 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 {1>Hj@2HF@#8v|_&kre}N43QN>B8(w_ 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 0) return r; r = ht2_event(c); if (r >= 0) return r; + r = ht3_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index e25ae925..4a6c39d4 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -13,7 +13,8 @@ enum { ACTOR_MK, ACTOR_UNDYNE, ACTOR_SEED, ACTOR_BLOOM, ACTOR_SPEAR, ACTOR_ONION, ACTOR_DEBRIS, ACTOR_SHYREN, ACTOR_MADDUMMY, ACTOR_BIRD, ACTOR_TEMMIE, /* Hotland */ - ACTOR_ALPHYS, ACTOR_METTATON, ACTOR_GUARDS, ACTOR_VENT, ACTOR_LASER, ACTOR_RG01, ACTOR_RG02, ACTOR_BOMB, ACTOR_FIELD + ACTOR_ALPHYS, ACTOR_METTATON, ACTOR_GUARDS, ACTOR_VENT, ACTOR_LASER, ACTOR_RG01, ACTOR_RG02, ACTOR_BOMB, ACTOR_FIELD, + ACTOR_MUFFET }; enum { @@ -49,6 +50,9 @@ enum { EV_HT_LAB, EV_HT_FRIDGE, EV_VENT, EV_HT_CALL, EV_SHOOT, EV_HT_COOK, EV_HT_ELEVATOR, EV_LASER_HIT, EV_HT_ITEM, /* ht2.c */ EV_HOTDOG, EV_HEATS, EV_APRON, EV_BELT_SWITCH, EV_HT2_CALL, EV_VENTPUZ, EV_GUARDS, EV_NEWS, EV_BOMB, EV_HT2_ELEVATOR, + /* ht3.c */ + EV_BAKESALE3, EV_SHOOT3, EV_HT3_CALL, EV_MUFFET, EV_MUSICAL, EV_TILE, EV_TILES3, EV_HEATS3, EV_HT3_ELEVATOR, + EV_NICECREAM3, EV_HT3_END, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index fc129954..97569494 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -146,7 +146,16 @@ enum { F_HT_VENTPUZ, /* the vent puzzle crossed */ F_HT_GUARDS, /* the Royal Guards: 1 spared, 2 killed */ F_HT_NEWS, /* Mettaton's news report: 1 every bomb defused, 2 out of time */ - F_HT_FLOOR2, /* the elevator up from the second floor reached (where the game now ends) */ + F_HT_FLOOR2, /* the elevator up from the second floor taken */ + F_HT_CALL_HUB3, /* Alphys's call by the third floor's vents */ + F_HT3_PUZ_N, /* the third floor's shooting puzzles: north, south */ + F_HT3_PUZ_S, + F_HT_ANIME, /* Alphys asked Frisk to watch anime with her: 1 yes, 2 no */ + F_HT_MUFFET, /* Muffet: 1 spared, 2 killed */ + F_HT_MUSICAL, /* Mettaton's musical seen (and the trapdoor) */ + F_HT_TILES3, /* the tile puzzle under the stage: 1 solved, 2 out of time; then Mettaton fought */ + F_HT_HEATS3, /* Heats Flamesman asked about his name */ + F_HT_FLOOR3, /* the way to the MTT Resort reached (where the game now ends) */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/hotland.h b/games/undertale/src/hotland.h index 546d273a..35707a70 100644 --- a/games/undertale/src/hotland.h +++ b/games/undertale/src/hotland.h @@ -1,4 +1,4 @@ -/* Undertale: Hotland (ht1.c, ht2.c: its first and second floors), its monsters (htmon.c), Mettaton's shows +/* Undertale: Hotland (ht1.c, ht2.c, ht3.c: its three floors), its monsters (htmon.c), Mettaton's shows * (htshows.c). */ #ifndef UT_HOTLAND_H #define UT_HOTLAND_H @@ -12,4 +12,10 @@ int ht2_event(Ev *c); void ht2_update(void); /* the belt puzzle's switches, the news report's bombs and clock */ void ht2_draw(void); /* under everything: force fields, the switches, the vent puzzle's arrows */ void ht2_draw_top(void); /* over everything: the news report's clock */ +void ht3_setup(int room, int from); +int ht3_event(Ev *c); +void ht3_update(void); /* the webs' hold, the tile puzzle, its flames and clock */ +void ht3_draw(void); /* under everything: the flames, the turned-off force fields */ +void ht3_draw_top(void); /* over everything: the tile puzzle's clock */ +int ht3_speed(int x, int y); #endif diff --git a/games/undertale/src/ht1.c b/games/undertale/src/ht1.c index a7c6d3a6..559e0f68 100644 --- a/games/undertale/src/ht1.c +++ b/games/undertale/src/ht1.c @@ -52,6 +52,10 @@ static const Belt belts[] = { {ROOM_HT_VENTPUZ, 4420, 2310, 60, 290, 0, 3}, {ROOM_HT_VENTPUZ, 4420, 2560, 360, 40, 3, 0}, {ROOM_HT_VENTPUZ, 4720, 2430, 60, 170, 0, -3}, {ROOM_HT_NEWS, 4300, 1790, 100, 160, 0, -2}, + /* the third floor's, on the way to the south puzzle: down the left side, along the bottom (past the drones), up the + * right; back along the top */ + {ROOM_HT_BELTS3, 4800, 1400, 60, 130, 0, 3}, {ROOM_HT_BELTS3, 4800, 1520, 600, 60, 3, 0}, + {ROOM_HT_BELTS3, 5380, 1430, 60, 150, 0, -3}, {ROOM_HT_BELTS3, 4850, 1320, 520, 60, -3, 0}, }; static void belts_update(void) { if (event_running()) return; @@ -91,6 +95,46 @@ static const Vent vents[] = { /* the news room's: up to the top room's corner, and from there over to the rest of it */ {ROOM_HT_NEWS, 4350, 1722, DIR_UP, {[DIR_UP] = {4350, 1600}}}, {ROOM_HT_NEWS, 4320, 1600, DIR_LEFT, {[DIR_LEFT] = {4200, 1590}}}, + /* the third floor's islands: each grate blows the way its arrow points, to the next island that way (off the + * edges: the corridor back west, the walkways north and south, the platform east to the door) */ + {ROOM_HT_HUB3, 4740, 740, DIR_DOWN, {[DIR_DOWN] = {4740, 786}}}, + {ROOM_HT_HUB3, 4820, 700, DIR_UP, {[DIR_UP] = {4820, 590}}}, + {ROOM_HT_HUB3, 4820, 740, DIR_DOWN, {[DIR_DOWN] = {4820, 786}}}, + {ROOM_HT_HUB3, 4880, 720, DIR_LEFT, {[DIR_LEFT] = {4820, 706}}}, + {ROOM_HT_HUB3, 4680, 800, DIR_RIGHT, {[DIR_RIGHT] = {4740, 786}}}, + {ROOM_HT_HUB3, 4740, 780, DIR_UP, {[DIR_UP] = {4740, 706}}}, + {ROOM_HT_HUB3, 4740, 820, DIR_DOWN, {[DIR_DOWN] = {4740, 866}}}, + {ROOM_HT_HUB3, 4820, 820, DIR_DOWN, {[DIR_DOWN] = {4820, 866}}}, + {ROOM_HT_HUB3, 4800, 800, DIR_LEFT, {[DIR_LEFT] = {4740, 786}}}, + {ROOM_HT_HUB3, 4900, 780, DIR_UP, {[DIR_UP] = {4900, 706}}}, + {ROOM_HT_HUB3, 4880, 800, DIR_LEFT, {[DIR_LEFT] = {4820, 786}}}, + {ROOM_HT_HUB3, 4960, 800, DIR_LEFT, {[DIR_LEFT] = {4900, 786}}}, + {ROOM_HT_HUB3, 4660, 860, DIR_UP, {[DIR_UP] = {4660, 786}}}, + {ROOM_HT_HUB3, 4640, 880, DIR_LEFT, {[DIR_LEFT] = {4572, 866}}}, + {ROOM_HT_HUB3, 4740, 900, DIR_DOWN, {[DIR_DOWN] = {4740, 946}}}, + {ROOM_HT_HUB3, 4840, 880, DIR_RIGHT, {[DIR_RIGHT] = {4900, 866}}}, + {ROOM_HT_HUB3, 4900, 860, DIR_UP, {[DIR_UP] = {4900, 786}}}, + {ROOM_HT_HUB3, 4980, 860, DIR_UP, {[DIR_UP] = {4980, 786}}}, + {ROOM_HT_HUB3, 4980, 900, DIR_DOWN, {[DIR_DOWN] = {4980, 946}}}, + {ROOM_HT_HUB3, 4960, 880, DIR_LEFT, {[DIR_LEFT] = {4900, 866}}}, + {ROOM_HT_HUB3, 5000, 880, DIR_RIGHT, {[DIR_RIGHT] = {5070, 866}}}, + {ROOM_HT_HUB3, 4660, 940, DIR_UP, {[DIR_UP] = {4660, 866}}}, + {ROOM_HT_HUB3, 4720, 960, DIR_LEFT, {[DIR_LEFT] = {4660, 946}}}, + {ROOM_HT_HUB3, 4760, 960, DIR_RIGHT, {[DIR_RIGHT] = {4820, 946}}}, + {ROOM_HT_HUB3, 4820, 940, DIR_UP, {[DIR_UP] = {4820, 866}}}, + {ROOM_HT_HUB3, 4840, 960, DIR_RIGHT, {[DIR_RIGHT] = {4900, 946}}}, + {ROOM_HT_HUB3, 4900, 940, DIR_UP, {[DIR_UP] = {4900, 866}}}, + {ROOM_HT_HUB3, 4900, 980, DIR_DOWN, {[DIR_DOWN] = {4900, 1026}}}, + {ROOM_HT_HUB3, 4920, 960, DIR_RIGHT, {[DIR_RIGHT] = {4980, 946}}}, + {ROOM_HT_HUB3, 4980, 940, DIR_UP, {[DIR_UP] = {4980, 866}}}, + {ROOM_HT_HUB3, 4740, 1020, DIR_UP, {[DIR_UP] = {4740, 946}}}, + {ROOM_HT_HUB3, 4820, 1060, DIR_DOWN, {[DIR_DOWN] = {4820, 1130}}}, + {ROOM_HT_HUB3, 4800, 1040, DIR_LEFT, {[DIR_LEFT] = {4740, 1026}}}, + {ROOM_HT_HUB3, 4880, 1040, DIR_LEFT, {[DIR_LEFT] = {4820, 1026}}}, + {ROOM_HT_HUB3, 4600, 880, DIR_RIGHT, {[DIR_RIGHT] = {4660, 866}}}, + {ROOM_HT_HUB3, 4820, 660, DIR_DOWN, {[DIR_DOWN] = {4820, 706}}}, + {ROOM_HT_HUB3, 4820, 1100, DIR_UP, {[DIR_UP] = {4820, 1026}}}, + {ROOM_HT_HUB3, 5040, 880, DIR_LEFT, {[DIR_LEFT] = {4980, 866}}}, }; #define NVENTS ((int)(sizeof vents / sizeof vents[0])) /* the way a vent blows now */ @@ -122,6 +166,8 @@ static const Laser lasers[] = { {ROOM_HT_LASERS, 3840, 3796, 62, 30, 0}, {ROOM_HT_LASERS, 3958, 3796, 62, 40, 1}, /* the news room's bottom: blue, orange, blue */ {ROOM_HT_NEWS, 3965, 1946, 56, 16, 1}, {ROOM_HT_NEWS, 4025, 1946, 56, 16, 0}, {ROOM_HT_NEWS, 4085, 1946, 56, 16, 1}, + /* the third floor's drones over the bottom belt, blue: ride it without a step */ + {ROOM_HT_BELTS3, 4967, 1496, 84, 0, 1}, {ROOM_HT_BELTS3, 5149, 1496, 84, 0, 1}, {ROOM_HT_BELTS3, 5249, 1496, 84, 0, 1}, }; static int laser_cool; static int laser_x(int i) { diff --git a/games/undertale/src/ht2.c b/games/undertale/src/ht2.c index a4744fe2..06186543 100644 --- a/games/undertale/src/ht2.c +++ b/games/undertale/src/ht2.c @@ -1,7 +1,7 @@ /* Hotland, its second floor: out of the elevator, Sans's hot dog stand and Heats Flamesman; the crossroads (the * invisible path up to the Art Club's room, the Stained Apron down south); the conveyor belt puzzle and the vent * puzzle; the Bad Opinion Zone; the Royal Guards at the bend; Mettaton's news report and its six bombs; the CORE - * again, and the elevator up. (As the Undertale Wiki describes them; what they say is ours, in short.) */ + * again, and the elevator up to the third floor. (As the Undertale Wiki describes them; what they say is ours, in short.) */ #include #include #include "battle.h" @@ -478,9 +478,7 @@ static int ev_elevator(Ev *c) { NARRATE("* (The elevator up.)\n* (Get in?)@Yes@No"); if (CHOICE() == 1) return 1; set_flag(F_HT_FLOOR2, 1); - sv.room = (int16_t)g_room, sv.x = 3760, sv.y = 1340; - save_write_auto(); - menu_end_open(); + FADE_TO(ROOM_HT_L3, 3770, 842, DIR_DOWN); EV_END; } diff --git a/games/undertale/src/ht3.c b/games/undertale/src/ht3.c new file mode 100644 index 00000000..df3bb559 --- /dev/null +++ b/games/undertale/src/ht3.c @@ -0,0 +1,445 @@ +/* Hotland, its third floor: out of the elevator, the spiders' bake sale; the vent islands, the shooting puzzles north + * (the Diamond Boys) and south (over the belts, past the drones); the spider entrance and Muffet's lair, its webs; + * Mettaton's musical, the trapdoor down to the tile puzzle and his fight; the crossroads, where the way north leads to + * the MTT Resort. (As the Undertale Wiki describes them; what they say is ours, in short.) */ +#include +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "gfx.h" +#include "hotland.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "res.h" +#include "save.h" +#include "shoot.h" +#include "snowdin.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } +static Obj *thing(int x, int y, int w, int h, int event, int name, int arg) { + Obj *o = obj_trigger(x, y, w, h, event, name); + if (o) o->flags = OF_TALK | OF_SOLID, o->arg = (int16_t)arg; + return o; +} +static Obj *npc(int name, uint16_t spr, int x, int y) { + const uint16_t s[4] = {spr, spr, spr, spr}; + Obj *o = obj_npc(name, s, x, y, DIR_DOWN, 0); + if (o) o->flags &= (uint16_t)~OF_SOLID; + return o; +} +static Obj *obj_mtt(int x, int y) { + Obj *o = npc(ACTOR_METTATON, SPR_MTT_OW, x, y); + if (o) o->flags |= OF_ANIM, o->anim_speed = 5; + return o; +} + +/* ---------------------------------------------------------------- Muffet's lair: its webs hold Frisk back */ +typedef struct { + int16_t x, y, w, h; + uint8_t speed; +} Web; +static const Web webs[] = { + {5800, 466, 60, 32, 2}, {5880, 466, 60, 32, 2}, {5975, 466, 60, 32, 2}, /* the small ones */ + {6083, 454, 400, 46, 1}, /* the big one, Muffet's */ + {6540, 466, 60, 32, 2}, +}; +static bool muffet_holds; +int ht3_speed(int x, int y) { + if (g_room != ROOM_HT_LAIR) return 3; + if (muffet_holds) return 0; + for (unsigned i = 0; i < sizeof webs / sizeof webs[0]; i++) + if (x >= webs[i].x && x < webs[i].x + webs[i].w && y >= webs[i].y && y < webs[i].y + webs[i].h) return webs[i].speed; + return 3; +} + +/* ---------------------------------------------------------------- the tile puzzle (under the stage) */ +/* the map's tiles: R red (a wall: the room's collision leaves it out), Y yellow (a shock: back to the last tile + * stepped on), O orange (Frisk smells of oranges), U purple (soap: lemons, and a slide on to the next tile), B blue + * (water: the piranhas bite if Frisk smells of oranges; next to yellow, it shocks), P pink and G green (nothing) */ +#define TX 6640 +#define TY 620 +#define TW 39 +#define TH 4 +static const char tiles[TH][TW + 1] = { + "BGYPGUPYGRYPRGPOYRRORYPYYGGBYBOGGGRGGGR", + "GOUBORRBYRRBBBRRRPPRBPGRUOBOUUPBRGRGRGR", + "PRPPBBRORPBURPYGUOUYUURRPOBUUBYPRGRGRGR", + "GYBYRPGOUUOPROPORBBPOBGOPBUOYBPPGGGGRGG", +}; +#define TILES_TIME (30 * 30) +enum { TILES_OFF, TILES_ON, TILES_DONE }; +static int tiles_state, tiles_t, tiles_why, flavor, last_r = -99, last_c = -99, safe_x, safe_y, tile_act, flames_in; +static char tile_at(int r, int c) { return r < 0 || c < 0 || r >= TH || c >= TW ? 0 : tiles[r][c]; } +static bool tile_bad(int r, int c) { + char t = tile_at(r, c); + if (t == 'Y') return true; + if (t != 'B') return false; + if (flavor == 'O') return true; + return tile_at(r - 1, c) == 'Y' || tile_at(r + 1, c) == 'Y' || tile_at(r, c - 1) == 'Y' || tile_at(r, c + 1) == 'Y'; +} +static void tiles_watch(void) { + if (tiles_state != TILES_ON) return; + if (flames_in) { + /* out of time: the flames close in, then Alphys */ + if (++flames_in > 40) tiles_why = 2, event_start(EV_TILES3, NULL); + return; + } + if (--tiles_t <= 0) { + flames_in = 1; + return; + } + int fx = pl.x + 10, fy = pl.y + 24; + if (fx >= TX + TW * 20) { + tiles_why = 1, event_start(EV_TILES3, NULL); + return; + } + int c = fx >= TX ? (fx - TX) / 20 : -1, r = fy >= TY ? (fy - TY) / 20 : -1; + if (c < 0 || r < 0 || r >= TH) { + last_r = last_c = -99, safe_x = pl.x, safe_y = pl.y; + return; + } + if (r != last_r || c != last_c) { + last_r = r, last_c = c; + if (tile_bad(r, c)) { + tile_act = 1, event_start(EV_TILE, NULL); + return; + } + if (tile_at(r, c) == 'O') flavor = 'O'; + if (tile_at(r, c) == 'U') { + flavor = 'L', tile_act = 2, event_start(EV_TILE, NULL); + return; + } + } + if (tile_at(r, c) != 'U') safe_x = pl.x, safe_y = pl.y; +} + +/* ---------------------------------------------------------------- drawn, and watched */ +static void draw_flame_wall(int x) { + for (int k = 0; k < 6; k++) + gfx_sprite_color(SPR_FIREBULLET, (int)(g_frame / 4 + (uint32_t)k) % 2, x - cam_x, TY - 10 + k * 18 - cam_y, 0, + (g_frame / 3 + (uint32_t)k) % 2 ? rgb565(0xFF8000) : rgb565(0xFFC000), 255); +} +void ht3_draw(void) { + if (g_room != ROOM_HT_TILES || tiles_state != TILES_ON) return; + int in = flames_in * 6; + draw_flame_wall(TX - 14 + in); + draw_flame_wall(TX + TW * 20 + 170 - in); +} +void ht3_draw_top(void) { + if (g_room != ROOM_HT_TILES || tiles_state != TILES_ON) return; + char s[16]; + int secs = (tiles_t + 29) / 30; + snprintf(s, sizeof s, "0:%02d", secs); + gfx_rect(4, 4, 52, 18, C_BLACK, 200); + gfx_text(FONT_MAIN, 10, 6, s, secs <= 10 ? C_RED : C_WHITE, 255); +} +void ht3_update(void) { + if (g_room == ROOM_HT_TILES) tiles_watch(); +} + +/* ---------------------------------------------------------------- the rooms */ +static void diamond_boys(void) { + Obj *a = npc(ACTOR_ITEM, SPR_DIAMOND1, 4750, 452); + if (a) a->flags |= OF_SOLID; + Obj *b = npc(ACTOR_ITEM, SPR_DIAMOND2, 4905, 454); + if (b) b->flags |= OF_SOLID; + obj_sign(4736, 424, 30, 32, "* Did you see Mettaton's last\n show? He was AMAZING!|* When he strikes a pose, the\n ratings go through the roof!"); + obj_sign(4890, 420, 30, 38, "* My mom says never touch the\n switch on his back.|* I wonder what it does..."); +} + +void ht3_setup(int room, int from) { + (void)from; + if (room < ROOM_HT_L3 || room > ROOM_HT_CROSS3) return; + if (room != ROOM_HT_TILES && tiles_state == TILES_ON) tiles_state = TILES_OFF; /* (a SAVE loaded mid-puzzle) */ + switch (room) { + case ROOM_HT_L3: + thing(3740, 800, 80, 56, EV_HT3_ELEVATOR, ACTOR_DOOR, 1); + thing(4128, 846, 74, 36, EV_BAKESALE3, ACTOR_ITEM, 0); + obj_sign(4276, 892, 44, 40, "* I didn't even want a donut...|* The spiders scared me into\n buying one.\n* There goes all my money."); + break; + case ROOM_HT_HUB3: + if (!flag(F_HT_CALL_HUB3)) { + Obj *t = obj_trigger(4566, 856, 10, 70, EV_HT3_CALL, ACTOR_TRIGGER); + if (t) t->arg = 0; + } + if (!(flag(F_HT3_PUZ_N) && flag(F_HT3_PUZ_S))) { + Obj *d = obj_trigger(5200, 700, 60, 12, EV_NONE, ACTOR_DOOR); + if (d) d->flags = OF_SOLID; + obj_sign(5200, 712, 60, 16, "* (The door is locked.)\n* (Both puzzles have to be solved.)"); + } + break; + case ROOM_HT_NORTH3: + thing(4812, 154, 36, 30, EV_SHOOT3, ACTOR_ITEM, SHOOT_NORTH); + if (flag(F_HT3_PUZ_N)) diamond_boys(); + break; + case ROOM_HT_BELTS3: + obj_sign(5118, 1286, 30, 34, "* (A cactus, all on its own.)\n* (You stop to look at it.)"); + break; + case ROOM_HT_SOUTH3: + thing(5524, 1144, 36, 30, EV_SHOOT3, ACTOR_ITEM, SHOOT_SOUTH); + break; + case ROOM_HT_SPIDERENT: + obj_save(5300, 420, "* (The smell of cobwebs fills you with determination.)"); + break; + case ROOM_HT_LAIR: + if (!flag(F_HT_MUFFET)) obj_trigger(6240, 455, 8, 50, EV_MUFFET, ACTOR_TRIGGER); + break; + case ROOM_HT_STAGE: + if (!flag(F_HT_MUSICAL)) obj_trigger(6760, 440, 8, 66, EV_MUSICAL, ACTOR_TRIGGER); + break; + case ROOM_HT_TILES: + if (!flag(F_HT_TILES3) && tiles_state != TILES_ON) obj_mtt(6430, 626); + break; + case ROOM_HT_CROSS3: + thing(7444, 360, 70, 58, EV_NICECREAM3, ACTOR_ITEM, 0); + if (flag(F_HT_GUARDS) == 1) { + static const uint16_t s1[4] = {SPR_RG01_OW, SPR_RG01_OW, SPR_RG01_OW, SPR_RG01_OW}; + static const uint16_t s2[4] = {SPR_RG02_OW, SPR_RG02_OW, SPR_RG02_OW, SPR_RG02_OW}; + obj_npc(ACTOR_RG01, s1, 7600, 412, DIR_DOWN, 0); + obj_npc(ACTOR_RG02, s2, 7642, 412, DIR_DOWN, 0); + obj_sign(7580, 374, 84, 40, "* Dude, this ice cream is, like,\n the best.|* ... ...yeah."); + } + thing(8054, 430, 24, 30, EV_HEATS3, ACTOR_ITEM, 0); + thing(7934, 340, 80, 80, EV_HT3_ELEVATOR, ACTOR_DOOR, 0); + obj_trigger(7522, 296, 56, 10, EV_HT3_END, ACTOR_TRIGGER); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_bakesale(Ev *c) { + static const char *const opts[] = {"Spider Donut - 9999G", "Spider Cider - 9999G"}; + EV_BEGIN; + NARRATE("* (A spider bake sale.)\n* (All proceeds go to real spiders.)"); + CHOOSE(opts, 2); + if (CHOSEN() < 0) return 1; + if (sv.gold < 9999) { + NARRATE("* (You don't have enough gold.)"); + return 1; + } + if (!item_add(CHOSEN() ? ITEM_SPIDER_CIDER : ITEM_SPIDER_DONUT)) { + NARRATE("* (You're carrying too much.)"); + return 1; + } + sv.gold = (uint16_t)(sv.gold - 9999); + NARRATE("* (The spiders take your money.)"); + EV_END; +} + +/* Alphys's calls: 0 by the vents; after the south puzzle, the anime (in ev_shoot) */ +static int ev_call(Ev *c) { + EV_BEGIN; + if (c->self) gone(c->self); + set_flag(F_HT_CALL_HUB3, 1); + SAY(FACE_ALPHYS, "* Ring...|* Hi! It's Alphys.|* The door on the right opens\n once both puzzles are done.|* One's up north, one's down\n south. Good luck!"); + EV_END; +} + +static int ev_shoot(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : SHOOT_NORTH; + c->v[1] = c->v[0] == SHOOT_NORTH ? F_HT3_PUZ_N : F_HT3_PUZ_S; + if (flag(c->v[1])) { + NARRATE("* (This puzzle is solved.)"); + return 1; + } + shoot_open(c->v[0]); + WAIT_UNTIL(g_mode == MODE_WORLD); + if (!shoot_result()) return 1; + set_flag(c->v[1], 1); + if (flag(F_HT3_PUZ_N) && flag(F_HT3_PUZ_S)) { + NARRATE("* (Somewhere, a door unlocks.)"); + } else { + NARRATE("* (One down.)"); + } + if (c->v[0] == SHOOT_NORTH) { + diamond_boys(); + return 1; + } + /* the south one: Alphys calls, about anime */ + SAY(FACE_ALPHYS, "* Ring...|* H-hey! Um... when all this\n is over...|* want to watch anime with me?@Yes@No"); + if (CHOICE() == 0) { + set_flag(F_HT_ANIME, 1); + SAY(FACE_ALPHYS, "* R-really?! Okay!|* There's this show about a\n magical girl, and she..."); + NARRATE("* (Alphys talks about it for a\n long, long time.)"); + SAY(FACE_ALPHYS, "* ...oh! Sorry! Bye!"); + } else { + set_flag(F_HT_ANIME, 2); + SAY(FACE_ALPHYS, "* Oh. Okay. That's... fine.\n* Bye!"); + } + EV_END; +} + +static int ev_muffet(Ev *c) { + static const uint16_t s[4] = {SPR_MUFFET_OW, SPR_MUFFET_OW, SPR_MUFFET_OW, SPR_MUFFET_OW}; + Obj *m = obj_get(ACTOR_MUFFET); + EV_BEGIN; + if (c->self) gone(c->self); + /* the web holds Frisk fast, and down comes Muffet */ + muffet_holds = true; + NARRATE("* (The web holds you fast.)\n* (You can't move!)"); + m = obj_npc(ACTOR_MUFFET, s, pl.x + 60, pl.y - 30, DIR_LEFT, 0); + if (m) m->flags &= (uint16_t)~OF_SOLID; + m = obj_get(ACTOR_MUFFET); + WALK(m, pl.x + 60, pl.y + 29, 2); + NARRATE("* Ahuhuhu~|* Did you think you could just\n walk through my lair, deary?|* Someone pays very well for\n human SOULs, you know~|* And you didn't buy a single\n donut. How stingy~"); + BATTLE(FORM_MUFFET); + muffet_holds = false; + if (bt.mon[0].killed) { + set_flag(F_HT_MUFFET, 2); + gone(obj_get(ACTOR_MUFFET)); + return 1; + } + set_flag(F_HT_MUFFET, 1); + NARRATE("* Ahuhu... no hard feelings,\n deary~|* Do come back to our bake sale!"); + m = obj_get(ACTOR_MUFFET); + WALK(m, m->x + 200, m->y, 3); + gone(obj_get(ACTOR_MUFFET)); + EV_END; +} + +static int ev_musical(Ev *c) { + Obj *m = obj_get(ACTOR_METTATON); + EV_BEGIN; + if (c->self) gone(c->self); + NARRATE("* (The lights go down.)\n* (A spotlight finds you.)"); + /* (the view: up to his balcony, and back) */ + WAIT_UNTIL(cam_pan(7000, 214, 6)); + text_set_top(0); /* (the box below, out of his way) */ + NARRATE("* OHHH! WHO IS THIS, BENEATH MY\n BALCONY?|* A HUMAN, COME TO SAVE ME FROM\n MY TOWER?|* ALAS! A ROBOT AND A HUMAN...\n* IT COULD NEVER BE!|* SO, MY LOVE... YOU'LL JUST HAVE\n TO DROP IN!"); + text_set_top(-1); + WAIT_UNTIL(cam_pan(pl.x - 150, pl.y - 105, 6)); + cam_free(); + g_shake = 6; + NARRATE("* (The floor opens up under you!)"); + set_flag(F_HT_MUSICAL, 1); + FADE_TO(ROOM_HT_TILES, 6420, 680, DIR_RIGHT); + /* below: Mettaton, the tiles, thirty seconds */ + m = obj_get(ACTOR_METTATON); + NARRATE("* OH, HELLO AGAIN, DARLING!|* REMEMBER THIS PUZZLE? FROM\n WAY BACK IN SNOWDIN?|* THEN YOU KNOW THE RULES.\n* THIRTY SECONDS! GO!"); + tiles_state = TILES_ON, tiles_t = TILES_TIME, flavor = 0, flames_in = 0, last_r = last_c = -99; + safe_x = pl.x, safe_y = pl.y; + (void)m; + EV_END; +} + +static const int8_t ddx[4] = {0, 0, -1, 1}, ddy[4] = {1, -1, 0, 0}; +static int ev_tile(Ev *c) { + EV_BEGIN; + c->v[0] = tile_act; + if (c->v[0] == 1) { + /* a shock (or the piranhas): back to the last tile stepped on */ + g_shake = 4; + PL_WALK(safe_x, safe_y, 4); + last_r = last_c = -99; + return 1; + } + /* the soap: on to the next tile that way, unless a wall's there */ + c->v[1] = last_r + ddy[pl.dir], c->v[2] = last_c + ddx[pl.dir]; + c->v[3] = TX + c->v[2] * 20, c->v[4] = TY + c->v[1] * 20 - 14; + if (!world_walkable(c->v[3] + 3, c->v[4] + 20, 14, 9, -1)) return 1; + PL_WALK(c->v[3], c->v[4], 4); + EV_END; +} + +static int ev_tiles_end(Ev *c) { + Obj *m = obj_get(ACTOR_METTATON); + EV_BEGIN; + c->v[0] = tiles_why; + tiles_state = TILES_DONE; + if (c->v[0] == 1) { + NARRATE("* OH! YOU MADE IT ACROSS.\n* HOW... ANTICLIMACTIC.|* NO MATTER! I'LL BE THE MONSTER\n YOU MEET AT THE END!"); + } else { + NARRATE("* (The flames close in...!)"); + SAY(FACE_ALPHYS, "* Ring...|* H-hang on! Turning off the\n firewall!"); + NARRATE("* (The flames die down.)"); + NARRATE("* TSK! FINE. THEN I'LL BE THE\n MONSTER YOU MEET!"); + } + m = obj_get(ACTOR_METTATON); + if (m->kind == OBJ_NONE) obj_mtt(pl.x + 60, pl.y + 29); + else WALK(m, pl.x + 60, pl.y + 29, 6); + BATTLE(FORM_MTT_TILES); + set_flag(F_HT_TILES3, c->v[0]); + NARRATE("* OHHH... I'M ALL OUT OF POWER.|* UNTIL NEXT TIME, DARLING!\n* STAY TUNED!"); + m = obj_get(ACTOR_METTATON); + WALK(m, m->x, m->y - 220, 6); + gone(obj_get(ACTOR_METTATON)); + EV_END; +} + +static int ev_heats(Ev *c) { + EV_BEGIN; + if (flag(F_HT_HEATS3)) { + NARRATE("* I'LL GET YOU NEXT TIME!!!"); + return 1; + } + NARRATE("* HEY!!! YOU!!!|* DO YOU REMEMBER MY NAME???@Yes@No"); + set_flag(F_HT_HEATS3, 1); + NARRATE("* WHAT?!|* HOW COULD I LOSE SO EASILY?!\n* GRRR...!!!"); + EV_END; +} + +static int ev_nicecream(Ev *c) { + EV_BEGIN; + if (flag(F_HT_GUARDS) == 1) { + NARRATE("* Sorry, I'm all sold out!|* Those two guards bought every\n last one!"); + return 1; + } + NARRATE("* Nice Cream! Just 12G!\n* Want one?@Yes@No"); + if (CHOICE() == 1) return 1; + if (sv.gold < 12) { + NARRATE("* Oh... you're short on gold."); + return 1; + } + if (!item_add(ITEM_NICE_CREAM)) { + NARRATE("* Your hands are full!"); + return 1; + } + sv.gold = (uint16_t)(sv.gold - 12); + NARRATE("* Here you go! Have a super day!"); + EV_END; +} + +static int ev_elevator(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + NARRATE("* (The elevator down.)\n* (Get in?)@Yes@No"); + if (CHOICE() == 1) return 1; + if (c->v[0]) { + FADE_TO(ROOM_HT_COREVIEW2, 3770, 1348, DIR_DOWN); + } else { + FADE_TO(ROOM_HT_HOTDOG, 6966, 2380, DIR_DOWN); + } + EV_END; +} + +static int ev_end(Ev *c) { + EV_BEGIN; + NARRATE("* (The MTT Resort is just up\n these stairs.)"); + set_flag(F_HT_FLOOR3, 1); + sv.room = (int16_t)g_room, sv.x = 7530, sv.y = 420; + save_write_auto(); + menu_end_open(); + EV_END; +} + +int ht3_event(Ev *c) { + switch (c->id) { + case EV_BAKESALE3: return ev_bakesale(c); + case EV_SHOOT3: return ev_shoot(c); + case EV_HT3_CALL: return ev_call(c); + case EV_MUFFET: return ev_muffet(c); + case EV_MUSICAL: return ev_musical(c); + case EV_TILE: return ev_tile(c); + case EV_TILES3: return ev_tiles_end(c); + case EV_HEATS3: return ev_heats(c); + case EV_NICECREAM3: return ev_nicecream(c); + case EV_HT3_ELEVATOR: return ev_elevator(c); + case EV_HT3_END: return ev_end(c); + } + return -1; +} diff --git a/games/undertale/src/htmon.c b/games/undertale/src/htmon.c index f2b1b060..41fc0a91 100644 --- a/games/undertale/src/htmon.c +++ b/games/undertale/src/htmon.c @@ -3,6 +3,7 @@ #include #include "battle.h" #include "game.h" +#include "items.h" #include "gfx.h" #include "monsters.h" #include "res.h" @@ -233,6 +234,98 @@ static void draw_bomb(Battle *b, Monster *m, int x0, int y0) { uint8_t alpha = m->fade ? (uint8_t)max_i(0, 128 - m->fade * 4) : 255; gfx_sprite(s, (int)(g_frame / 8), x, y + half, 0, alpha); } +/* ---------------------------------------------------------------- Muffet: purple strings, spiders, pastries, her + * pet. She lets Frisk go once her spiders send word (at turn 17), or at once if Frisk eats one of their treats. + * Paying her makes her hits weaker (a hit less each time, and the price doubles); struggling three times halves it */ +enum { MF_PRICE, MF_STRUGGLE, MF_TREAT }; /* (b->state[]) */ +static void act_muffet(Battle *b, Monster *m, int act, char *t, int cap) { + if (!b->state[MF_PRICE]) b->state[MF_PRICE] = 100; + if (act == 0) { /* Pay */ + if (sv.gold >= b->state[MF_PRICE]) { + sv.gold = (uint16_t)(sv.gold - b->state[MF_PRICE]); + snprintf(t, (size_t)cap, "* You pay Muffet %dG.\n* Her attacks soften a little.", b->state[MF_PRICE]); + m->at = (int16_t)max_i(1, m->at - 1); + b->state[MF_PRICE] = (int16_t)min_i(b->state[MF_PRICE] * 2, 9000); + } else { + snprintf(t, (size_t)cap, "* You don't have %dG.\n* Muffet sighs, and lowers her price.", b->state[MF_PRICE]); + b->state[MF_PRICE] = (int16_t)max_i(10, b->state[MF_PRICE] / 2); + } + } else { /* Struggle */ + if (++b->state[MF_STRUGGLE] == 3) { + snprintf(t, (size_t)cap, "* You struggle with all your might.\n* Muffet halves her price, laughing."); + b->state[MF_PRICE] = (int16_t)max_i(10, b->state[MF_PRICE] / 2); + } else snprintf(t, (size_t)cap, "* You struggle against the web.\n* It's too sticky to get free."); + } +} +static const char *talk_muffet(Battle *b, Monster *m) { + if (b->state[MF_TREAT] == 1) { + b->state[MF_TREAT] = 2; + return "Oh? You\'ve had\none of our\ntreats~"; + } + if (m->spare) return "My mistake,\ndeary~\nRun along\nnow~"; + if (b->turn == 1) return "Purple\nsuits you\nmuch better,\ndeary~"; + if (b->turn == 3 || b->turn == 7 || b->turn == 11) { + static const char *const meal[3] = {"Time for\nbreakfast,\nmy pet~", "Time for\nlunch,\nmy pet~", "Time for\ndinner,\nmy pet~"}; + return meal[b->turn / 4]; + } + static const char *const lines[] = {"Ahuhuhu~", "Someone paid\nme well for\nyour SOUL~", "The spiders\ntold me all\nabout you~", + "Too stingy\nto buy a\ndonut~?", "Pay up, and\nI might go\neasy~"}; + return lines[rnd_n(5)]; +} +static const char *flavor_muffet(Battle *b, Monster *m) { + if (!m->spare && b->turn >= 17) { + m->spare = true; + return "* A spider brings Muffet a note.\n* She reads it... and smiles."; + } + if (m->spare) return "* Muffet isn't going to fight anymore."; + return NULL; +} +static bool item_muffet(Battle *b, Monster *m, int item, char *t, int cap) { + (void)t, (void)cap; + /* a treat from the spiders' bake sale: it's eaten as ever, and she lets Frisk go */ + if (item == ITEM_SPIDER_DONUT || item == ITEM_SPIDER_CIDER) m->spare = true, b->state[MF_TREAT] = 1; + return false; +} +static int attack_muffet(Battle *b, Monster *m) { + if (m->spare) return ATK_NONE; + if (b->turn == 3 || b->turn == 7 || b->turn == 11) return ATK_MUFFET_PET; + static const uint8_t seq[3] = {ATK_MUFFET_SPIDERS, ATK_MUFFET_CROISSANTS, ATK_MUFFET_DONUTS}; + return seq[(b->turn - 1) % 3]; +} + +/* ---------------------------------------------------------------- Mettaton, after the tile puzzle: no hurting him; + * Alphys's yellow button (ACT) turns the SOUL yellow, and its shots wear him down */ +enum { MT_YELLOW, MT_HITS }; /* (b->state[]) */ +static void act_mtt_tiles(Battle *b, Monster *m, int act, char *t, int cap) { + (void)m; + if (act == 0) snprintf(t, (size_t)cap, "* You yell...\n* Nothing happens."); + else { + snprintf(t, (size_t)cap, "* You press the yellow button.\n* The phone hums near Mettaton...!"); + b->state[MT_YELLOW] = 1; + } +} +static const char *talk_mtt_tiles(Battle *b, Monster *m) { + (void)m; + if (b->state[MT_HITS] >= 6) return "OH NO...\nI\'M OUT OF\nPOWER?!"; + if (b->state[MT_YELLOW] && b->state[MT_HITS]) return "THAT\nBUTTON IS\nCHEATING!"; + if (b->turn <= 1) return "NOW FOR\nTHE GRAND\nFINALE!"; + static const char *const lines[] = {"NO MORE\nPUZZLES,\nDARLING!", "STAY\nTUNED!", "THE\nRATINGS\nARE GREAT!"}; + return lines[rnd_n(3)]; +} +static const char *flavor_mtt_tiles(Battle *b, Monster *m) { + (void)m; + if (b->turn == 2 && !b->state[MT_YELLOW]) return "* Alphys calls: \"The yellow button!\n It's in your ACT menu!\""; + if (b->turn >= 2 && !b->state[MT_YELLOW]) return "* Your phone's ACT menu is glowing."; + return NULL; +} +static bool hit_mtt_tiles(Battle *b, Monster *m, int dmg) { + (void)b, (void)dmg; + m->dmg_shown = 0; /* (MISS: metal) */ + return true; +} +static int attack_mtt_tiles(Battle *b, Monster *m) { (void)m; return b->state[MT_YELLOW] ? ATK_MTT_YELLOW : ATK_MTT_BOXES; } +static bool ends_mtt_tiles(Battle *b, Monster *m) { (void)m; return b->state[MT_HITS] >= 6; } + #define BOMB(nm, chk) {.name = nm, .hp = 1, .idle_speed = 8, .check = chk, .acts = {"Defuse"}, .nacts = 1, \ .flags = MF_BOSS | MF_NOT_KILLABLE, .act = act_bomb, .talk = talk_bomb, .attack = attack_bomb, \ .flavor = flavor_bomb, .on_hit = hit_bomb, .draw = draw_bomb} @@ -291,6 +384,20 @@ static const MonDef ht_defs[MON_COUNT - MON_WF_COUNT] = { .neutral = {"* Sweat drips from 02's armor.", "* 02 is clenching his fists.", "* Smells like a locker room."}, .flags = MF_BOSS, .act = act_rg, .talk = talk_rg, .attack = attack_rg, .flavor = flavor_rg}, [MON_BOMB - MON_WF_COUNT] = BOMB("Bomb", ""), + [MON_MUFFET - MON_WF_COUNT] = { + .name = "Muffet", .spare_gold = 100, .hp = 1250, .at = 8, .df = 0, .exp = 300, .gold = 100, .spr_idle = SPR_MUFFET_B, + .spr_hurt = SPR_MUFFET_HURT, .idle_speed = 5, .check = "If she asks you up to her parlor, say no thanks.", + .acts = {"Pay", "Struggle"}, .nacts = 2, + .neutral = {"* Muffet pours herself a cup of tea.", "* Muffet counts her money, twice.", + "* Smells like cobwebs and fresh pastry."}, + .flags = MF_BOSS, .act = act_muffet, .talk = talk_muffet, .attack = attack_muffet, .flavor = flavor_muffet, + .on_item = item_muffet}, + [MON_MTT_TILES - MON_WF_COUNT] = { + .name = "Mettaton", .hp = 9999, .at = 8, .df = 0, .spr_idle = SPR_MTT_B, .spr_hurt = SPR_MTT_B, .idle_speed = 6, + .check = "Still made of metal. Still can't be hurt.", .acts = {"Yell", "Yellow"}, .nacts = 2, + .neutral = {"* Mettaton.", "* Mettaton strikes a pose."}, + .flags = MF_BOSS | MF_NOT_KILLABLE, .act = act_mtt_tiles, .talk = talk_mtt_tiles, .attack = attack_mtt_tiles, + .flavor = flavor_mtt_tiles, .on_hit = hit_mtt_tiles, .ends = ends_mtt_tiles}, }; const MonDef *ht_mon_def(int id) { return id == MON_BOMB ? &bomb_defs[g_bomb_kind] : &ht_defs[id - MON_WF_COUNT]; } @@ -306,6 +413,8 @@ static const Form ht_forms[FORM_COUNT - FORM_WF_COUNT] = { [FORM_LASERS - FORM_WF_COUNT] = {{MON_METTATON}, 1, ""}, [FORM_RGUARDS - FORM_WF_COUNT] = {{MON_RG01, MON_RG02}, 2, "* The Royal Guards attack!"}, [FORM_BOMB - FORM_WF_COUNT] = {{MON_BOMB}, 1, ""}, + [FORM_MUFFET - FORM_WF_COUNT] = {{MON_MUFFET}, 1, "* Muffet blocks the way!"}, + [FORM_MTT_TILES - FORM_WF_COUNT] = {{MON_MTT_TILES}, 1, "* Mettaton attacks!"}, }; const Form *ht_form(int form) { return form == FORM_BOMB ? &bomb_forms[g_bomb_kind] : &ht_forms[form - FORM_WF_COUNT]; } @@ -476,13 +585,108 @@ static void atk_rg_team(int t) { } } -int ht_attack_length(int atk) { (void)atk; return 160; } +/* Muffet's: spiders crawl along the strings (riding them when they're pulled); croissants thrown along one come + * back; donuts bounce about the board; and at mealtimes her pet waits at the bottom while the strings are pulled down + * to it */ +static void spider_on(int string, bool left, int speed) { + Bullet *b = shot(SPR_SPIDER_B, left ? bx0() - 6 : bx1() + 6, soul_string_y(string), (left ? 1 : -1) * speed, 0); + if (b) b->kind = BK_SCRIPT, b->a = (int16_t)string, b->flags |= BF_NOCLIP, b->r = 3, b->life = 260; +} +static void spiders_ride(void) { + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_SPIDER_B) continue; + b->x += b->vx, b->y = soul_string_y(b->a) * FX; + if (++b->t >= b->life) b->kind = BK_NONE; + } +} +static void atk_muffet_spiders(int t) { + if (t < 130 && t % 14 == 0) spider_on(rnd_n(NSTRINGS), rnd_n(2), P(2)); + spiders_ride(); +} +static void atk_muffet_croissants(int t) { + if (t < 110 && t % 26 == 0) { + bool left = rnd_n(2); + Bullet *b = shot(SPR_CROISSANT, left ? bx0() - 6 : bx1() + 6, soul_string_y(rnd_n(NSTRINGS)), (left ? 1 : -1) * P(4), 0); + if (b) b->ax = left ? -1 : 1, b->r = 4, b->flags |= BF_NOCLIP, b->life = 140, b->angle = left ? 128 : 0; + } +} +static void atk_muffet_donuts(int t) { + if (t < 110 && t % 20 == 0) { + bool left = (t / 20) % 2; + Bullet *b = shot(SPR_DONUT, left ? bx0() + 4 : bx1() - 4, by0() + 4, (left ? 1 : -1) * P(2), P(2)); + if (b) b->kind = BK_SCRIPT, b->a = 3, b->r = 4, b->flags |= BF_NOCLIP; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_DONUT) continue; + b->x += b->vx, b->y += b->vy, b->t++; + bool hx = b->x < P(bx0() + 2) || b->x > P(bx1() - 2), hy = b->y < P(by0() + 2) || b->y > P(by1() - 2); + if (b->t > 6 && (hx || hy)) { + if (--b->a <= 0) b->kind = BK_NONE; + if (hx) b->vx = -b->vx; + if (hy) b->vy = -b->vy; + } + } +} +static void atk_muffet_pet(int t) { + if (t == 0) { + Bullet *p = shot(SPR_MUFFET_PET, board_cx(), by1() + 8, 0, 0); + if (p) p->flags |= BF_BOX | BF_NOCLIP, p->w = 90, p->h = 26, p->anim = 6, p->life = 150, p->dmg = 4; + } + /* the strings, down towards it (round again from the top) */ + soul_strings_shift += P(1) / 2; + if (t < 130 && t % 30 == 0) spider_on(rnd_n(NSTRINGS), rnd_n(2), P(1)); + spiders_ride(); +} + +/* Mettaton's: rows of boxes falling, a gap in each; turned yellow, the SOUL shoots at him as he glides about over + * the board (six hits, and he's out of power), a few boxes still falling */ +static void atk_mtt_boxes(int t) { + if (t < 130 && t % 26 == 0) { + static const uint8_t gaps[6] = {1, 4, 2, 5, 0, 3}; + int n = (bx1() - bx0()) / 16, gap = gaps[(t / 26) % 6] % n; + for (int k = 0; k < n; k++) { + if (k == gap || k == gap + 1) continue; + Bullet *b = shot(SPR_PRESENT, bx0() + 8 + k * 16, by0() - 8, 0, P(2)); + if (b) b->r = 5, b->flags |= BF_NOCLIP, b->life = 90; + } + } +} +static Bullet *mtt_target; +static void atk_mtt_yellow(int t) { + if (t == 0) { + mtt_target = shot(SPR_MTTMINI, board_cx(), by0() + 12, P(3) / 2, 0); + if (mtt_target) mtt_target->kind = BK_SCRIPT, mtt_target->flags |= BF_HARMLESS; + } + Bullet *m = mtt_target; + if (!m || m->kind != BK_SCRIPT || m->spr != SPR_MTTMINI) return; + m->x += m->vx; + if (m->x < P(bx0() + 10) || m->x > P(bx1() - 10)) m->vx = -m->vx; + if (m->c) m->c--, m->alpha = m->c % 2 ? 90 : 255; + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *s = &bullets[i]; + if (s->kind == BK_NONE || !(s->flags & BF_PLAYER)) continue; + if (abs_i(s->x - m->x) < P(9) && abs_i(s->y - m->y) < P(11)) { + s->kind = BK_NONE; + bt.state[MT_HITS]++, m->c = 10; + } + } + if (t < 130 && t % 40 == 20) { + Bullet *b = shot(SPR_PRESENT, m->x / FX, m->y / FX + 10, 0, P(2)); + if (b) b->r = 5, b->flags |= BF_NOCLIP, b->life = 80; + } +} + +int ht_attack_length(int atk) { return atk == ATK_MUFFET_PET ? 150 : 160; } void ht_attack_run(Battle *b, int atk, int t) { (void)b; if (t < 0) { - board_set(atk == ATK_TSUNDER_BOMBS || atk == ATK_PYROPE_ROPE ? 150 : 120, 100); - soul_set_mode(SOUL_RED); + bool muffet = atk >= ATK_MUFFET_SPIDERS && atk <= ATK_MUFFET_PET; + board_set(muffet ? 190 : atk == ATK_TSUNDER_BOMBS || atk == ATK_PYROPE_ROPE ? 150 : atk == ATK_MTT_BOXES ? 140 : 120, + muffet ? 90 : 100); + soul_set_mode(muffet ? SOUL_PURPLE : atk == ATK_MTT_YELLOW ? SOUL_YELLOW : SOUL_RED); return; } switch (atk) { @@ -493,5 +697,11 @@ void ht_attack_run(Battle *b, int atk, int t) { case ATK_PYROPE_BOMBS: atk_pyrope_bombs(t); break; case ATK_PYROPE_ROPE: atk_pyrope_rope(t); break; case ATK_RG_TEAM: atk_rg_team(t); break; + case ATK_MUFFET_SPIDERS: atk_muffet_spiders(t); break; + case ATK_MUFFET_CROISSANTS: atk_muffet_croissants(t); break; + case ATK_MUFFET_DONUTS: atk_muffet_donuts(t); break; + case ATK_MUFFET_PET: atk_muffet_pet(t); break; + case ATK_MTT_BOXES: atk_mtt_boxes(t); break; + case ATK_MTT_YELLOW: atk_mtt_yellow(t); break; } } diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index 4d4507dd..d4668a4a 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -383,7 +383,7 @@ void menu_gameover_open(void) { void menu_end_open(void) { g_mode = MODE_END; t = 0; - writer_start(&w, "Up the elevator, past the news\nand all its bombs...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); + writer_start(&w, "Up to the MTT Resort, past\nMuffet and the musical...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/monsters.c b/games/undertale/src/monsters.c index 66c0dec1..32198797 100644 --- a/games/undertale/src/monsters.c +++ b/games/undertale/src/monsters.c @@ -320,7 +320,7 @@ int form_setup(int form, Battle *b) { } /* Toriel and Flowey can't be fled from; Napstablook can */ if (form == FORM_TORIEL || form == FORM_FLOWEY || form == FORM_PAPYRUS || form == FORM_MAD_DUMMY || - form == FORM_RGUARDS || form == FORM_BOMB) + form == FORM_RGUARDS || form == FORM_BOMB || form == FORM_MUFFET || form == FORM_MTT_TILES) b->no_flee = true; b->captures = form == FORM_PAPYRUS; return 0; diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h index ddec76ac..71abbc63 100644 --- a/games/undertale/src/monsters.h +++ b/games/undertale/src/monsters.h @@ -12,7 +12,8 @@ enum { /* Waterfall (wfmon.c) */ MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_MAD_DUMMY, MON_TEMMIE, MON_UNDYNE, MON_WF_COUNT, /* Hotland (htmon.c) */ - MON_VULKIN = MON_WF_COUNT, MON_TSUNDERPLANE, MON_PYROPE, MON_METTATON, MON_RG01, MON_RG02, MON_BOMB, MON_COUNT + MON_VULKIN = MON_WF_COUNT, MON_TSUNDERPLANE, MON_PYROPE, MON_METTATON, MON_RG01, MON_RG02, MON_BOMB, MON_MUFFET, + MON_MTT_TILES, MON_COUNT }; /* formations: who is fought */ @@ -29,7 +30,7 @@ enum { FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE, FORM_WF_COUNT, /* Hotland (Mettaton's shows and a laser's alarm play their own way: htshows.c) */ FORM_VULKIN = FORM_WF_COUNT, FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2, FORM_MTT_QUIZ, - FORM_MTT_COOK, FORM_LASERS, FORM_RGUARDS, FORM_BOMB, FORM_COUNT + FORM_MTT_COOK, FORM_LASERS, FORM_RGUARDS, FORM_BOMB, FORM_MUFFET, FORM_MTT_TILES, FORM_COUNT }; enum { @@ -47,7 +48,8 @@ enum { ATK_UNDYNE_ARROWS, ATK_UNDYNE_SPEARS, ATK_WF_COUNT, /* Hotland */ ATK_VULKIN_THUNDER = ATK_WF_COUNT, ATK_VULKIN_FIRE, ATK_TSUNDER_BOMBS, ATK_TSUNDER_DIVE, ATK_PYROPE_BOMBS, - ATK_PYROPE_ROPE, ATK_RG_TEAM, ATK_COUNT + ATK_PYROPE_ROPE, ATK_RG_TEAM, ATK_MUFFET_SPIDERS, ATK_MUFFET_CROISSANTS, ATK_MUFFET_DONUTS, ATK_MUFFET_PET, + ATK_MTT_BOXES, ATK_MTT_YELLOW, ATK_COUNT }; /* a formation: up to three monsters, and what the first turn says */ diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index 669b137c..980eab3b 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -23,6 +23,7 @@ void room_setup(int room, int from) { wf3_setup(room, from); ht1_setup(room, from); ht2_setup(room, from); + ht3_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ @@ -34,6 +35,7 @@ void room_update(void) { wf3_update(); ht1_update(); ht2_update(); + ht3_update(); } /* what a room draws on its floor, under everything (world.c) */ @@ -42,15 +44,21 @@ void room_draw_floor(void) { snow2_draw(); ht1_draw(); ht2_draw(); + ht3_draw(); } /* what a room draws over everything (a clock) */ -void room_draw_top(void) { ht2_draw_top(); } +void room_draw_top(void) { + ht2_draw_top(); + ht3_draw_top(); +} /* a pushed rock that may go where Frisk can't (a bridge seed into the water), and what happens once it has */ bool room_rock_enters(Obj *o, int x, int y) { return wf_seed_enters(o, x, y); } void room_rock_moved(Obj *o) { wf_seed_moved(o); } +int room_speed(int x, int y) { return ht3_speed(x, y); } + bool room_ice(int x, int y) { const RoomInfo *ri = world_room_info(); if (!ri || !ri->ice) return false; diff --git a/games/undertale/src/shoot.c b/games/undertale/src/shoot.c index 1a336f0b..7e74cad3 100644 --- a/games/undertale/src/shoot.c +++ b/games/undertale/src/shoot.c @@ -2,8 +2,8 @@ * * A grid of blocks stands between Frisk's ship, below, and the target, above. Each arrow pushes every dark block one * cell that way, where there's room inside the grid; the light blocks never move. Z shoots straight up: a shot - * breaks the first dark block it meets, a light one stops it, and a clear way hits the target. Two shots a try: - * out of them, it starts over. (The rules are worked out from the solutions the Undertale Wiki gives for them; the + * breaks the first dark block it meets, a light one stops it, and a clear way hits the target. Two shots a try on + * the first floor, one on the third: out of them, it starts over. (The rules are worked out from the solutions the Undertale Wiki gives for them; the * grids are the game's, as its screenshots show them.) */ #include #include "game.h" @@ -13,15 +13,16 @@ #include "shoot.h" typedef struct { - uint8_t w, h, ship; + uint8_t w, h, ship, shots; const char *rows[6]; /* '#' a light block, 'o' a dark one, ' ' nothing */ } Puzzle; static const Puzzle puzzles[SHOOT_COUNT] = { - [SHOOT_RIGHT] = {3, 3, 1, {"#o#", " ", "#o#"}}, - [SHOOT_LEFT] = {4, 4, 2, {"# #", "ooo ", " #o#", "#oo "}}, + [SHOOT_RIGHT] = {3, 3, 1, 2, {"#o#", " ", "#o#"}}, + [SHOOT_LEFT] = {4, 4, 2, 2, {"# #", "ooo ", " #o#", "#oo "}}, + [SHOOT_NORTH] = {5, 5, 2, 1, {"## o#", " o # ", " #o o", " o o#", "## ##"}}, + [SHOOT_SOUTH] = {5, 4, 3, 1, {"###o ", " o#", "###o ", "###o#"}}, }; #define CELL 24 -#define SHOTS 2 static int id, shots, result, t, shot_y, fail_t; static char grid[6][6]; @@ -31,7 +32,7 @@ static void reset(void) { const Puzzle *p = &puzzles[id]; for (int y = 0; y < p->h; y++) for (int x = 0; x < p->w; x++) grid[y][x] = p->rows[y][x]; - shots = SHOTS, shot_y = -1, fail_t = 0, won = false; + shots = p->shots, shot_y = -1, fail_t = 0, won = false; } void shoot_open(int which) { diff --git a/games/undertale/src/shoot.h b/games/undertale/src/shoot.h index 87256481..5aedca33 100644 --- a/games/undertale/src/shoot.h +++ b/games/undertale/src/shoot.h @@ -2,7 +2,7 @@ #ifndef UT_SHOOT_H #define UT_SHOOT_H #include -enum { SHOOT_RIGHT, SHOOT_LEFT, SHOOT_COUNT }; +enum { SHOOT_RIGHT, SHOOT_LEFT, SHOOT_NORTH, SHOOT_SOUTH, SHOOT_COUNT }; /* (the first floor's, then the third's) */ void shoot_open(int id); /* MODE_SHOOT until solved or left */ int shoot_result(void); /* 1 solved, 0 left */ void shoot_update(uint32_t keys, uint32_t pressed); diff --git a/games/undertale/src/world.c b/games/undertale/src/world.c index 6af7e448..ebc45f4d 100644 --- a/games/undertale/src/world.c +++ b/games/undertale/src/world.c @@ -286,7 +286,8 @@ static void player_move(uint32_t keys, uint32_t pressed) { slide_dx = slide_dy = 0; } bool moved = false; - for (int i = 0; i < SPEED; i++) { + int sp = room_speed(pl.x + PBX + PBW / 2, pl.y + PBY + PBH / 2); + for (int i = 0; i < sp; i++) { if (dx) moved |= step(dx, 0, !dy); if (dy) moved |= step(0, dy, !dx); } diff --git a/games/undertale/src/world.h b/games/undertale/src/world.h index a217bfd3..84eb9595 100644 --- a/games/undertale/src/world.h +++ b/games/undertale/src/world.h @@ -86,6 +86,7 @@ Obj *obj_rock(int x, int y, int name, int event); /* pushed by walking into it void obj_set_box(Obj *o, int bx, int by, int bw, int bh); bool near_frisk(const Obj *o, int d); /* within d pixels (their feet) */ bool room_ice(int x, int y); /* rooms.c: ice there (Frisk slides) */ +int room_speed(int x, int y); /* rooms.c: Frisk's steps a frame there (3; webs slow him) */ /* rooms.c: a pushed rock that the floor stops (it may go into water, a bridge seed), then where it went */ bool room_rock_enters(Obj *o, int x, int y); void room_rock_moved(Obj *o); diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index e72f39c3..06340696 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -34,9 +34,10 @@ (FORM_AARON, FORM_WOSHUA, FORM_WOSHUA_AARON, FORM_MOLDBYGG, FORM_MOLDBYGG_MOLDSMAL, FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE) = range(32, 43) (FORM_VULKIN, FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2, FORM_MTT_QUIZ, FORM_MTT_COOK, - FORM_LASERS, FORM_RGUARDS, FORM_BOMB) = range(43, 53) + FORM_LASERS, FORM_RGUARDS, FORM_BOMB, FORM_MUFFET, FORM_MTT_TILES) = range(43, 55) ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD = range(17, 23) ITEM_BURNT_PAN, ITEM_INSTANT_NOODLES, ITEM_HOT_DOG, ITEM_STAINED_APRON = 28, 29, 30, 31 +ITEM_NICE_CREAM = 13 def run(args, frames, saves=None, what=""): @@ -148,6 +149,12 @@ def check(cond, msg): for how in ("act:1", "fight"): s = run(["--god", "--battle", str(FORM_BOMB), "--path", how], 9000, what=f"a bomb, {how}") check(s and s["mode"] == MODE_WORLD and s["kills"] == 0, f"a bomb: {how} did not defuse it: {s}") +# Muffet (no running from her): spared once her spiders send word, her 100G; Mettaton after the tile puzzle: ACT +# Yellow, and the yellow SOUL's shots drain his power +s = run(["--god", "--battle", str(FORM_MUFFET), "--path", "spare"], 9000, what="Muffet, spared") +check(s and s["mode"] == MODE_WORLD and s["kills"] == 0 and s["gold"] == 100, f"Muffet was not spared: {s}") +s = run(["--god", "--battle", str(FORM_MTT_TILES), "--path", "act:2"], 4000, what="Mettaton's yellow button") +check(s and s["mode"] == MODE_WORLD and s["kills"] == 0, f"Mettaton's fight did not end with the yellow button: {s}") # the shop in Snowdin: a Cinnamon Bunny for 25G; Papyrus's date: his phone number s = run(["--name", "Frisk", "--noenc", "--room", str(ROOMS["SNOWTOWN"]), "--at", "446,1092", "--gold", "100", "--keys", @@ -237,12 +244,12 @@ def check(cond, msg): check(ITEM_INSTANT_NOODLES in s["items"], f"Hotland: the noodles not taken: {s['items']}") # Hotland's second floor: Heats Flamesman, Sans's hot dog, the apron, the Art Club's room, the belt and vent puzzles, -# the Bad Opinion Zone, the Royal Guards spared, Mettaton's news report, up to the elevator +# the Bad Opinion Zone, the Royal Guards spared, Mettaton's news report, up the elevator to the third floor if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--gold", "100", "--room", str(ROOMS["HT_HOTDOG"]), "--at", "6966,2380", "--path-file", os.path.join(HERE, "hotland2.path")], 13000, what="Hotland's second floor") - check(s and s["mode"] == MODE_END and s["room"] == ROOMS["HT_COREVIEW2"], - f"Hotland's second floor did not end at the elevator: {s}") + check(s and s["mode"] == MODE_WORLD and s["room"] == ROOMS["HT_L3"], + f"Hotland's second floor did not end up the elevator, on the third floor: {s}") if s: for name, v in (("HT_HEATS", 1), ("HT_APRON", 1), ("HT_CALL_BELT", 1), ("HT_BELT", 1), ("HT_VENTPUZ", 1), ("HT_CALL_BOZ", 1), ("HT_GUARDS", 1), ("HT_NEWS", 2), ("HT_CALL_CORE2", 1), ("HT_FLOOR2", 1)): @@ -252,6 +259,22 @@ def check(cond, msg): for item in (ITEM_HOT_DOG, ITEM_STAINED_APRON): check(item in s["items"], f"Hotland's second floor: item {item} not picked up: {s['items']}") +# Hotland's third floor: the bake sale, the vent islands, both shooting puzzles (the Diamond Boys, Alphys's anime), +# the belts past the drones, Muffet spared, Mettaton's musical, the tile puzzle and his fight, the crossroads (a Nice +# Cream, Heats Flamesman), up to the MTT Resort +if not QUICK: + s = run(["--name", "Frisk", "--noenc", "--god", "--gold", "100", "--room", str(ROOMS["HT_L3"]), "--at", "3770,842", + "--path-file", os.path.join(HERE, "hotland3.path")], 14000, what="Hotland's third floor") + check(s and s["mode"] == MODE_END and s["room"] == ROOMS["HT_CROSS3"], + f"Hotland's third floor did not end by the MTT Resort: {s}") + if s: + for name, v in (("HT_CALL_HUB3", 1), ("HT3_PUZ_N", 1), ("HT3_PUZ_S", 1), ("HT_ANIME", 1), ("HT_MUFFET", 1), + ("HT_MUSICAL", 1), ("HT_TILES3", 1), ("HT_HEATS3", 1), ("HT_FLOOR3", 1)): + check(flag(s, name) == v, f"Hotland's third floor: F_{name} is {flag(s, name)}, not {v}") + check(s["kills"] == 0, f"Hotland's third floor: {s['kills']} killed on the friendly way") + check(s["gold"] == 188, f"Hotland's third floor: Muffet's gold or the Nice Cream went wrong: {s['gold']}") + check(ITEM_NICE_CREAM in s["items"], f"Hotland's third floor: no Nice Cream: {s['items']}") + if failures: print("\n".join("FAIL " + f for f in failures)) sys.exit(1) diff --git a/games/undertale/tests/hotland2.path b/games/undertale/tests/hotland2.path index 6ff35c60..545bdc7a 100644 --- a/games/undertale/tests/hotland2.path +++ b/games/undertale/tests/hotland2.path @@ -100,7 +100,7 @@ act:1 talk w3700 talk -# up past the news to the CORE again (Alphys's call), and the elevator up, where the game now ends +# up past the news to the CORE again (Alphys's call), and the elevator up to the third floor go:4590,1770 go:4600,1560 4600,1500 diff --git a/games/undertale/tests/hotland3.path b/games/undertale/tests/hotland3.path new file mode 100644 index 00000000..3f1360ea --- /dev/null +++ b/games/undertale/tests/hotland3.path @@ -0,0 +1,222 @@ +# Hotland's third floor, out of the elevator (play it with --room 150 --at 3770,842 --name Frisk --noenc --god +# --gold 100): the spiders' bake sale (too dear for Frisk), Alphys's call by the vent islands +w30 +go:4150,870 +u +z +talk +pick:0 +talk +go:4555,870 +4575,870 +talk +# the islands' vents to the north walkway: right, up, right, down, down, right, up, right, up, up, left, up +vent:4600,870 +w20 +vent:4660,850 +w20 +vent:4676,786 +w20 +vent:4740,806 +w20 +vent:4740,886 +w20 +vent:4756,946 +w20 +vent:4820,930 +w20 +vent:4836,866 +w20 +vent:4900,850 +w20 +vent:4900,770 +w20 +vent:4884,706 +w20 +vent:4820,690 +w30 +# the north puzzle (left, right, then shoot), and the Diamond Boys +go:4820,175 +u +z +w10 +l +w4 +r +w4 +z +w60 +talk +w30 +# back down; the vents to the south walkway: down, left, down, down, right, right, down, left, down +go:4820,600 +4820,650 +w30 +vent:4820,726 +w20 +vent:4804,786 +w20 +vent:4740,806 +w20 +vent:4740,886 +w20 +vent:4756,946 +w20 +vent:4836,946 +w20 +vent:4900,966 +w20 +vent:4884,1026 +w20 +vent:4820,1046 +w30 +# the belts round the south, ridden without a step past the drones' blue lasers; the south puzzle (left, up, left, +# left, right, shoot), and Alphys asks about anime +go:4830,1385 +4830,1400 +w340 +go:5520,1400 +go:5530,1148 +u +z +w10 +l +w4 +u +w4 +l +w4 +l +w4 +r +w4 +z +w60 +talk +pick:0 +talk +w30 +# back along the top belt, up to the islands; east: left, up, right, right, right, up, right; through the door +go:5520,1400 +5480,1400 +w10 +go:5400,1335 +w200 +go:4830,1200 +4830,1090 +w30 +vent:4804,1026 +w20 +vent:4740,1010 +w20 +vent:4756,946 +w20 +vent:4836,946 +w20 +vent:4916,946 +w20 +vent:4980,930 +w20 +vent:4996,866 +w30 +go:5230,712 +5230,690 +w30 +go:5400,462 +5440,462 +w20 +# Muffet's lair: the webs, Muffet (spared once the spiders send word) +go:5650,455 +go:6230,455 +spare +talk +# Mettaton's musical, the trapdoor; the tile puzzle against the clock (each purple slides Frisk on, so the steps +# aim where the slides end); Mettaton's fight, his power drained with the yellow button +go:6630,455 +6660,455 +w20 +go:6740,455 +6790,455 +talk +w30 +talk +go:6620,646 +6640,646 +6640,626 +6660,626 +6700,626 +6700,646 +6720,646 +6740,646 +6740,666 +6760,666 +6780,666 +6840,666 +6860,666 +6860,626 +6880,626 +6900,626 +6900,646 +6900,666 +6920,666 +6940,666 +6940,646 +6980,646 +6980,626 +7000,626 +7000,666 +7020,666 +7040,666 +7040,626 +7060,626 +7060,666 +7080,666 +7100,666 +7120,666 +7120,646 +7140,646 +7140,626 +7120,626 +7120,646 +7120,666 +7140,666 +7180,666 +7180,626 +7240,626 +7260,626 +7260,646 +7260,666 +7280,666 +7300,666 +7320,666 +7340,666 +7340,646 +7340,626 +7340,606 +7360,606 +7380,606 +7380,626 +7380,646 +7380,666 +7400,666 +7430,666 +act:2 +talk +w30 +# the crossroads: a Nice Cream, Heats Flamesman's name, and the stairs north to the MTT Resort, where the game +# now ends +go:7550,560 +7550,530 +w30 +go:7470,408 +u +z +talk +go:8030,430 +r +z +pick:0 +talk +go:7550,420 +7550,276 +w60 diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index 5bf6745e..3baa84f4 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -152,6 +152,15 @@ HT_VENTS_MAGMA = [(3120, 4000), (3362, 4000), (3503, 4060), (3420, 4180), (3225, 4240), (3325, 4240), (3525, 4240)] HT_VENTS_HUB = [(4820, 3620), (4820, 3560), (4740, 3620), (4900, 3620)] HT_VENTS_ISLE = [(4940, 3120), (5060, 3120), (5180, 3120)] +# the third floor: the vent islands (their top-left; the grates' arrows point the way each blows), the grates off +# them (the corridor's end, the walkways north and south, the platform east), the stage's purples, the tiles' colours +# (red left out: its tiles are walls) +HT3_ISLES = [(4720, 700), (4800, 700), (4880, 700), (4640, 780), (4720, 780), (4800, 780), (4880, 780), (4960, 780), + (4640, 860), (4720, 860), (4800, 860), (4880, 860), (4960, 860), (4640, 940), (4720, 940), (4800, 940), + (4880, 940), (4960, 940), (4720, 1020), (4800, 1020), (4880, 1020)] +HT3_GRATES = [(4600, 880), (4820, 660), (4820, 1100), (5040, 880)] +HT_STAGE = [(163, 73, 164), (132, 53, 125), (55, 44, 103)] +HT_TILES = [(64, 64, 255), (255, 255, 128), (255, 192, 192), (156, 255, 121), (255, 193, 74), (192, 0, 192)] # the vent puzzle's platforms (their top-left) HT_VENTPUZ = [(4620, 2160), (4520, 2260), (4620, 2260), (4720, 2260), (4520, 2360), (4620, 2360), (4520, 2460), (4620, 2460)] @@ -171,6 +180,10 @@ # the news report's bombs that move: the script on the belt (the belt repeats every 5 pixels), the basketball, the # glass of water (in front of a rock: the same rock, a row up) ("copy", 4318, 1850, 24, 26, 4318, 1875), ("erase", 3999, 1565, 21, 20, "ring"), ("copy", 4118, 1576, 26, 24, 4118, 1616), + # the third floor: the Diamond Boys (there once the north puzzle's done), Muffet in her web (the web repeats every + # 60 pixels), Mettaton over the tiles, the Royal Guards by the Nice Cream (there if they were spared) + ("erase", 4736, 414, 30, 40, "ring"), ("erase", 4890, 412, 30, 50, "ring"), ("copy", 6332, 452, 32, 50, 6272, 452), + ("erase", 6400, 540, 50, 64, [(0, 0, 0)]), ("erase", 7578, 352, 84, 58, "ring"), # Undyne, fallen on the bridge in the heat (an object here, there only if she chased Frisk): the planks repeat # every 40 pixels ("copy", 454, 6219, 50, 21, 534, 6219), @@ -554,6 +567,30 @@ dict(name="ht_news", area="hotland", rect=(3760, 1540, 880, 500), title="Hotland", floor_colors=HT_STRIPE + HT_BELT, doors=[((3760, 1760, 6, 40), "ht_guards", (3670, 2030), "left")]), dict(name="ht_coreview2", area="hotland", rect=(3680, 1200, 960, 340), title="Hotland", floor_colors=HT_STRIPE), + # the third floor: out of the elevator, the spider bake sale; the vent islands (both puzzles open the door east); + # north to the Diamond Boys and a shooting puzzle; south over the belts, past the laser drones, to the other; + # through the door, the spider entrance and Muffet's lair; Mettaton's musical, the tile puzzle below its stage; + # the crossroads by the elevator R3, the MTT Resort north + dict(name="ht_l3", area="hotland", rect=(3660, 740, 900, 240), title="Hotland", floor_colors=HT_HUB, + fix=[("walk", 4556, 876, 28, 28)]), + dict(name="ht_hub3", area="hotland", rect=(4560, 620, 740, 500), title="Hotland", floor_colors=HT_HUB, + fix=[("walk", x, y, 60, 60) for x, y in HT3_ISLES] + [("walk", x - 4, y - 4, 28, 28) for x, y in HT3_GRATES], + doors=[((5205, 700, 50, 6), "ht_spiderent", (5220, 525), "up")]), + dict(name="ht_north3", area="hotland", rect=(4700, 140, 300, 480), title="Hotland", floor_colors=HT_HUB, + fix=[("walk", 4808, 236, 44, 108)]), + dict(name="ht_belts3", area="hotland", rect=(4780, 1120, 680, 500), title="Hotland", floor_colors=HT_HUB + HT_BELT), + dict(name="ht_south3", area="hotland", rect=(5460, 940, 200, 680), title="Hotland", floor_colors=HT_HUB + HT_BELT, + fix=[("walk", 5518, 1216, 44, 104)]), + dict(name="ht_spiderent", area="hotland", rect=(5180, 400, 240, 170), title="Hotland", floor_colors=HT_HUB, + doors=[((5205, 560, 50, 6), "ht_hub3", (5220, 704), "down")]), + dict(name="ht_lair", area="hotland", rect=(5420, 300, 1220, 240), title="Hotland", open=True, + floor_rects=[(5420, 461, 1220, 38)]), + dict(name="ht_stage", area="hotland", rect=(6640, 180, 680, 360), title="Hotland", floor_colors=HT_STAGE, + fix=[("walk", 6640, 461, 140, 38)]), + dict(name="ht_tiles", area="hotland", rect=(6340, 540, 1280, 260), title="Hotland", + floor_colors=HT_FLOOR + HT_BELT + HT_HUB + HT_TILES, fix=[("walk", 7522, 540, 56, 84)]), + dict(name="ht_cross3", area="hotland", rect=(7320, 280, 820, 260), title="Hotland", + fix=[("walk", 7522, 290, 56, 124), ("walk", 7522, 470, 56, 70)]), ] # rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index e936c35b..3a9ce557 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -198,6 +198,37 @@ def gen_debris(): return [im] +def gen_croissant(): + # Muffet's croissants: a crescent, its horns to the left + im = _img(14, 11) + d = ImageDraw.Draw(im) + d.ellipse([0, 0, 13, 10], fill=(255, 255, 255, 255)) + d.ellipse([-5, 2, 7, 8], fill=(0, 0, 0, 0)) + return [im] + + +def gen_donut(): + im = _img(11, 11) + d = ImageDraw.Draw(im) + d.ellipse([0, 0, 10, 10], fill=(255, 255, 255, 255)) + d.ellipse([3, 3, 7, 7], fill=(0, 0, 0, 0)) + return [im] + + +def gen_mttmini(): + # a small Mettaton for the yellow SOUL to shoot at: his box, its screen's grid, his wheel + im = _img(16, 22) + d = ImageDraw.Draw(im) + d.rectangle([0, 0, 15, 15], fill=(170, 170, 170, 255), outline=(255, 255, 255, 255)) + d.rectangle([3, 3, 12, 10], fill=(255, 220, 40, 255)) + for k in range(4, 12, 2): + d.line([(k, 3), (k, 10)], fill=(40, 40, 40, 255)) + d.line([(3, 7), (12, 7)], fill=(40, 40, 40, 255)) + d.rectangle([7, 16, 8, 18], fill=(200, 200, 200, 255)) + d.ellipse([4, 17, 11, 21], fill=(200, 30, 30, 255)) + return [im] + + def gen_star(): # the Royal Guards' stars: four points im = _img(9, 9) @@ -210,7 +241,8 @@ def gen_star(): "iceshard": gen_iceshard, "present": gen_present, "knife": gen_knife, "dogpaw": gen_dogpaw, "heartbullet": gen_heartbullet, "spear": gen_spear, "note": gen_note, "drop": gen_drop, "arm": gen_arm, "debris": gen_debris, "arrow": gen_arrow, "plane": gen_plane, "bomb": gen_bomb, "cloud": gen_cloud, - "bolt": gen_bolt, "star": gen_star} + "bolt": gen_bolt, "star": gen_star, "croissant": gen_croissant, "donut": gen_donut, + "mttmini": gen_mttmini} SNOW_CLEAR = [(133, 163, 216), (114, 129, 177), (139, 163, 186), (180, 192, 201), (195, 207, 216)] PAP_GIF = "move:Papyrus_screenshot_back_and_forth.gif:0,280,640,450:" @@ -228,7 +260,8 @@ def gen_star(): ("savepoint", "demo:spr_savepoint", {"origin": (0, 0), "keep": True}), ("flowey", "demo:spr_flowey", {"origin": (0, 0), "keep": True}), # the SOUL, 8 x 8 as the game's 16 x 16 halved; frame 1: blue - ("heart", "demo2:spr_heart", {"center": True, "keep": True, "tints": [(0, 60, 255), (0, 192, 0)]}), # red, blue, green + ("heart", "demo2:spr_heart", {"center": True, "keep": True, + "tints": [(0, 60, 255), (0, 192, 0), (213, 53, 217), (255, 255, 0)]}), # red, blue, green, purple, yellow ] + [ # the battle: its buttons (orange, then yellow when chosen), the FIGHT target and its bar, the slash, the HP label (n, "demo2:spr_" + n, {"keep": True}) for n in [ @@ -400,6 +433,14 @@ def gen_star(): # the news report's script before it's shown to be a bomb, and the Stained Apron (cut from the map) ("news_script", "map:Hotland_map.png:4322,1880,16,16", {"keep": True, "feet": True, "clear": [(112, 83, 71), (52, 50, 78), (107, 67, 78)]}), ("apron", "map:Hotland_map.png:5836,2618,22,18", {"keep": True, "clear": [(181, 85, 21)]}), + # the third floor: Muffet (in her lair, in battle, her pet cupcake), her spiders, the Diamond Boys + ("muffet_ow", "wiki:Muffet_overworld.png", {"feet": True}), + ("muffet_b", "wiki:Muffet_battle_idle.gif", {"feet": True, "dedupe": True, "every": 4}), + ("muffet_hurt", "wiki:Muffet_battle_hurt.png", {"feet": True}), + ("muffet_pet", "wiki:Muffet's_Pet_battle_chasing.gif", {"center": True, "dedupe": True}), + ("spider_b", "wiki:Bullet_Spider_battle.png", {"center": True}), + ("diamond1", "wiki:Diamond_Boy_overworld.png", {"feet": True}), + ("diamond2", "wiki:Tall_Diamond_Boy_overworld.png", {"feet": True}), # in battle, the bombs share one look (the dog and the glass of water keep their own) ("bomb_b", "wiki:Bomb_battle_idle.gif", {"feet": True, "dedupe": True}), ("dogbomb_b", "wiki:Annoying_Dog_battle_bomb.gif", {"feet": True, "dedupe": True}), @@ -420,6 +461,9 @@ def gen_star(): ("arm", "gen:arm", {"center": True}), ("debris", "gen:debris", {"center": True}), ("star", "gen:star", {"center": True}), + ("croissant", "gen:croissant", {"center": True}), + ("donut", "gen:donut", {"center": True}), + ("mttmini", "gen:mttmini", {"center": True}), # Waterfall's monsters ("aaron_b", "wiki:Aaron_battle_static.png", {"feet": True, "clear_bg": True}), ("aaron_hurt", "wiki:Aaron_battle_hurt.png", {"feet": True, "clear_bg": True}), From 482efda55cc9d11814c835ecb67f8e3632142c9d Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 16:09:30 +0000 Subject: [PATCH 16/19] Undertale: the MTT Resort, up to the door of the CORE The stairs north of Hotland's crossroads now lead into the MTT Resort, as the Undertale Wiki and its map describe it (what's said is short and in our own words): - Out front: Sans, who asks Frisk to dinner and takes a shortcut into the restaurant. At the table he tells of the door in the forest, the jokes through it, the old lady on the other side and his promise to her; then he leaves. A note points up the alley on the right, where Bratty and Catty sell what they find in the dump: Junk Food, the Empty Gun, the Cowboy Hat (+5 AT as well) and the Mystery Key. - The lobby: its SAVE, the fountain and its plaque, the elevator to the capital that's out of order (and the guests stuck by it), the MTT-Brand Burger Emporium with Burgerpants (Starfait, Glamburger, Legendary Hero, Face Steak), and the desk with a room for 200G. - The restaurant (no table without a booking) and its guests; the hotel's hallway: room service at doors 1 and 3 (a Sea Tea, a Cinnamon Bunny: 99G each), the room of door 2 and its bed, and a dog behind door 4 that trades a Hot Dog for a Hush Puppy. - North, the door to the CORE, where the game now ends. Engine: shops can show their keeper over the picture; prices up to 65535G. Tests: the third floor's route ends in the Resort now; a Resort route (dinner, a Starfait, a night's sleep, the doors, the CORE's door). Docs and screenshots. --- README.md | 4 +- docs/play.md | 2 +- games/undertale/README.md | 11 +- games/undertale/docs/alley.png | Bin 0 -> 8927 bytes games/undertale/docs/dinner.png | Bin 0 -> 6326 bytes games/undertale/src/data.bin | Bin 1071508 -> 1120378 bytes games/undertale/src/data.h | 224 ++++++++++++++++-------------- games/undertale/src/events.c | 2 + games/undertale/src/events.h | 4 +- games/undertale/src/flags.h | 8 +- games/undertale/src/game.c | 2 +- games/undertale/src/hotland.h | 6 +- games/undertale/src/ht3.c | 16 +-- games/undertale/src/items.c | 15 ++ games/undertale/src/items.h | 10 ++ games/undertale/src/menu.c | 2 +- games/undertale/src/resort.c | 192 +++++++++++++++++++++++++ games/undertale/src/rooms.c | 1 + games/undertale/src/shop.c | 31 ++++- games/undertale/src/shop.h | 2 +- games/undertale/tests/check.py | 19 ++- games/undertale/tests/resort.path | 64 +++++++++ games/undertale/tools/rooms.py | 31 ++++- games/undertale/tools/sprites.py | 6 + 24 files changed, 513 insertions(+), 139 deletions(-) create mode 100644 games/undertale/docs/alley.png create mode 100644 games/undertale/docs/dinner.png create mode 100644 games/undertale/src/resort.c create mode 100644 games/undertale/tests/resort.path diff --git a/README.md b/README.md index fbfabac2..012ea84b 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins, Snowdin, Waterfall and Hotland, from the golden flowers to the MTT Resort's door
Download + Undertale
Undertale

The Ruins, Snowdin, Waterfall, Hotland and the MTT Resort, from the golden flowers to the CORE's door
Download More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins, Snowdin, Waterfall and Hotland are out, the MTT Resort, the CORE and New Home are next +- [ ] Undertale: the Ruins, Snowdin, Waterfall, Hotland and the MTT Resort are out, the CORE and New Home are next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index 954a89ca..f2ca4c9b 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall and Hotland. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. On the second floor, press the switches as the top conveyor belt carries you past them, and in Mettaton's news report, touch each bomb and defuse it while it's in the DEFUSE ZONE. When Muffet turns your SOUL purple, it keeps to three strings: **Up** and **Down** hop between them. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange makes you smell of oranges (and blue water's piranhas bite then), and purple soap slides you on and smells of lemons. When your SOUL turns yellow, **OK** shoots. For now the game ends on the stairs up to the MTT Resort. +Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall, Hotland and the MTT Resort. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. On the second floor, press the switches as the top conveyor belt carries you past them, and in Mettaton's news report, touch each bomb and defuse it while it's in the DEFUSE ZONE. When Muffet turns your SOUL purple, it keeps to three strings: **Up** and **Down** hop between them. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange makes you smell of oranges (and blue water's piranhas bite then), and purple soap slides you on and smells of lemons. When your SOUL turns yellow, **OK** shoots. At the MTT Resort, the desk rents you a room and the hotel's doors want room service. For now the game ends at the door of the CORE.
diff --git a/games/undertale/README.md b/games/undertale/README.md index 2bae6095..1d1bd507 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins, Snowdin, Waterfall and all of Hotland, from the bed of golden flowers to the stairs up to the MTT Resort. The rest of the Underground is on the way. + The Ruins, Snowdin, Waterfall, all of Hotland and the MTT Resort, from the bed of golden flowers to the door of the CORE. The rest of the Underground is on the way.

@@ -29,6 +29,7 @@ * **Hotland's first floor:** Alphys's Lab, where Mettaton bursts in with his quiz show, the conveyor belts, the Magma Chamber's steam vents and the burnt pan, the laser walkway, the two shooting puzzles that open the door, the vents over the lava and Mettaton's cooking show, with your phone's jetpack, up to the elevator. Alphys calls you as you go. * **Hotland's second floor:** Sans's hot dog stand and Heats Flamesman, the invisible path to the Art Club's room, the Stained Apron, the conveyor belt puzzle and its three switches, the vent puzzle, the Bad Opinion Zone, the Royal Guards, and Mettaton's news report, where everything is a bomb and the clock is running. * **Hotland's third floor:** the spiders' bake sale, the vent islands and their two shooting puzzles (the Diamond Boys, and Alphys asking you to watch anime), the conveyor belts past the laser drones, the spider entrance and Muffet's sticky lair, Mettaton's musical and the trapdoor to his tile puzzle against the clock, and the crossroads with the Nice Cream guy and Heats Flamesman, by the stairs up to the MTT Resort. +* **The MTT Resort:** Sans out front, and dinner with him in the restaurant, where he tells you about the door in the forest; the lobby and its fountain, the MTT-Brand Burger Emporium with Burgerpants behind the counter, Bratty and Catty's shop up the alley, a night in the hotel, room service down the hall (and a dog behind door 4), and the door to the CORE. * **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane, Pyrope and the Royal Guards in Hotland, the news report's bombs, defused in the DEFUSE ZONE, Muffet, whose purple SOUL keeps to her strings, and Mettaton, worn down by the yellow SOUL's shots. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -138,6 +139,10 @@ The yellow SOUL
The yellow button The crossroads
Nice Cream, by the MTT Resort + + Dinner with Sans
Dinner with Sans at the MTT Resort + Bratty and Catty's shop
Bratty and Catty's shop, up the alley + ## How to play @@ -150,7 +155,7 @@ Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bo In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. The Tem Shop is the one shop that buys what you carry. When Undyne turns your SOUL green, it can't move: turn its shield with the arrows to block her spears. She can't be spared: run, and she'll chase you. -In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. On the second floor, the top conveyor belt carries you past three switches: press them one after another as you go by. In the vent puzzle, every panel you land on turns all the vents around, and the one at the top turns them back. To spare the Royal Guards, clean 02's armor, catch its green stars, then whisper to 01. In the news report, touch a bomb to face it, and Defuse it (or FIGHT it) while it's in the DEFUSE ZONE. On the third floor, ride the belt past the blue drones without a step. When Muffet turns your SOUL purple, it keeps to three strings: Up and Down hop between them, Left and Right move along. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange ones make you smell of oranges (and the blue water's piranhas bite then), purple soap slides you on and makes you smell of lemons, and blue next to yellow is electrified. After it, ACT and press the yellow button: your SOUL turns yellow, and OK shoots. +In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. On the second floor, the top conveyor belt carries you past three switches: press them one after another as you go by. In the vent puzzle, every panel you land on turns all the vents around, and the one at the top turns them back. To spare the Royal Guards, clean 02's armor, catch its green stars, then whisper to 01. In the news report, touch a bomb to face it, and Defuse it (or FIGHT it) while it's in the DEFUSE ZONE. On the third floor, ride the belt past the blue drones without a step. When Muffet turns your SOUL purple, it keeps to three strings: Up and Down hop between them, Left and Right move along. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange ones make you smell of oranges (and the blue water's piranhas bite then), purple soap slides you on and makes you smell of lemons, and blue next to yellow is electrified. After it, ACT and press the yellow button: your SOUL turns yellow, and OK shoots. At the MTT Resort, the front desk rents you a room for the night, and the hotel's doors down the hall want room service: bring what they ask for. Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. @@ -167,7 +172,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **The Ruins, Snowdin, Waterfall and Hotland, for now:** the stairs up to the MTT Resort end the game, on a screen that says the rest of the Underground is still to come. The MTT Resort, the CORE and New Home come next, one at a time. +* **The Ruins, Snowdin, Waterfall, Hotland and the MTT Resort, for now:** the door of the CORE ends the game, on a screen that says the rest of the Underground is still to come. The CORE and New Home come next, one at a time. * **No music or sound:** the calculator has no speaker. * **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. diff --git a/games/undertale/docs/alley.png b/games/undertale/docs/alley.png new file mode 100644 index 0000000000000000000000000000000000000000..243821046861163cfa29787b31e76d88b7dfc240 GIT binary patch literal 8927 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 literal 0 HcmV?d00001 diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index b72db20c264fbbaf9b166309aec700f0f02d3cb4..7e7f61b6c5707911d8babb045c99d813f30518d1 100644 GIT binary patch delta 89724 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 delta 44265 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

E>HJTOfCjB-CShW*SUKa;*clez)W2B1^`n+bq6 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 diff --git a/games/undertale/src/data.h b/games/undertale/src/data.h index a1dd5217..14cfa729 100644 --- a/games/undertale/src/data.h +++ b/games/undertale/src/data.h @@ -204,116 +204,121 @@ #define SPR_TEMMIE_HURT 190 #define SPR_SHOP_GERSON 191 #define SPR_SHOP_TEM 192 -#define SPR_BIRD 193 -#define SPR_TUTU 194 -#define SPR_ARTIFACT 195 -#define SPR_ECHO_OW 196 -#define SPR_ALPHYS_OW 197 -#define SPR_MTT_OW 198 -#define SPR_MTT_B 199 -#define SPR_RGUARDS_OW 200 -#define SPR_VENT_D 201 -#define SPR_VENT_U 202 -#define SPR_VENT_L 203 -#define SPR_VENT_R 204 -#define SPR_BURNTPAN 205 -#define SPR_VULKIN_B 206 -#define SPR_VULKIN_HURT 207 -#define SPR_TSUNDER_B 208 -#define SPR_PYROPE_B 209 -#define SPR_PYROPE_HURT 210 -#define SPR_RG01_OW 211 -#define SPR_RG02_OW 212 -#define SPR_RG01_B 213 -#define SPR_RG02_B 214 -#define SPR_MTT_NEWS 215 -#define SPR_BOMB_BALL 216 -#define SPR_BOMB_DOG 217 -#define SPR_BOMB_PRESENT 218 -#define SPR_BOMB_WATER 219 -#define SPR_BOMB_SCRIPT 220 -#define SPR_BOMB_GAME 221 -#define SPR_NEWS_SCRIPT 222 -#define SPR_APRON 223 -#define SPR_MUFFET_OW 224 -#define SPR_MUFFET_B 225 -#define SPR_MUFFET_HURT 226 -#define SPR_MUFFET_PET 227 -#define SPR_SPIDER_B 228 -#define SPR_DIAMOND1 229 -#define SPR_DIAMOND2 230 -#define SPR_BOMB_B 231 -#define SPR_DOGBOMB_B 232 -#define SPR_WATER_B 233 -#define SPR_UNDYNE_FALLEN 234 -#define SPR_SPEAR 235 -#define SPR_ARROW 236 -#define SPR_PLANE 237 -#define SPR_BOMB 238 -#define SPR_CLOUD 239 -#define SPR_BOLT 240 -#define SPR_UNDYNE_B 241 -#define SPR_NOTE 242 -#define SPR_DROP 243 -#define SPR_ARM 244 -#define SPR_DEBRIS 245 -#define SPR_STAR 246 -#define SPR_CROISSANT 247 -#define SPR_DONUT 248 -#define SPR_MTTMINI 249 -#define SPR_AARON_B 250 -#define SPR_AARON_HURT 251 -#define SPR_WOSHUA_B 252 -#define SPR_WOSHUA_HURT 253 -#define SPR_MOLDBYGG_B 254 -#define SPR_SHYREN_B 255 -#define SPR_SHYREN_TURNED 256 -#define SPR_INTROIMAGE 257 -#define SPR_INTROLAST 258 -#define SPR_UNDERTALETITLE 259 -#define SPR_GAMEOVERBG 260 -#define SPR_FACE_TORIELTALK 261 -#define SPR_FACE_TORIELTALKSIDE 262 -#define SPR_FACE_TORIELHAPPYTALK 263 -#define SPR_FACE_TORIELWHAT 264 -#define SPR_FACE_TORIELWHATSIDE 265 -#define SPR_FACE_TORIELMAD 266 -#define SPR_FACE_TORIELCOLD 267 -#define SPR_FACE_TORIELSURPRISED 268 -#define SPR_FACE_TORIELEMBARRASSED 269 -#define SPR_FACE_TORIELGLASSES 270 -#define SPR_FACE_TORIELREVENGETALK 271 -#define SPR_FACE_TORIELSCARED 272 -#define SPR_FACE_TORIELBLINK 273 -#define SPR_FACE_TORIELHAPPYBLINK 274 -#define SPR_FACE_TORIELBODY 275 -#define SPR_FACE_SANS 276 -#define SPR_FACE_SANSCHUCKLE 277 -#define SPR_FACE_SANSWINK 278 -#define SPR_FACE_PAPYRUS 279 -#define SPR_FACE_PAPYRUSEVIL 280 -#define SPR_FACE_PAPYRUSLAUGH 281 -#define SPR_FACE_PAPYRUSMAD 282 -#define SPR_FACE_PAPYRUSSIDE 283 -#define SPR_FACE_ALPHYS 284 -#define SPR_FLOWEYNICE 285 -#define SPR_FLOWEYNICESIDE 286 -#define SPR_FLOWEYSASSY 287 -#define SPR_FLOWEYEVIL 288 -#define SPR_FLOWEYGRIN 289 -#define SPR_FLOWEYPLAIN 290 -#define SPR_FLOWEYPISSED 291 -#define SPR_FLOWEYWINK 292 -#define SPR_FLOWEYLAUGH 293 -#define SPR_FLOWEYHURT 294 -#define SPR_FLOWEYTORIEL 295 -#define SPR_FLOWEYTORIEL2 296 -#define SPR_FLOWEYSIDESHOCK 297 +#define SPR_SHOP_BURGER 193 +#define SPR_BURGERPANTS 194 +#define SPR_SHOP_BRATTY 195 +#define SPR_BRATTY_CATTY 196 +#define SPR_BIRD 197 +#define SPR_TUTU 198 +#define SPR_ARTIFACT 199 +#define SPR_ECHO_OW 200 +#define SPR_ALPHYS_OW 201 +#define SPR_MTT_OW 202 +#define SPR_MTT_B 203 +#define SPR_RGUARDS_OW 204 +#define SPR_VENT_D 205 +#define SPR_VENT_U 206 +#define SPR_VENT_L 207 +#define SPR_VENT_R 208 +#define SPR_BURNTPAN 209 +#define SPR_VULKIN_B 210 +#define SPR_VULKIN_HURT 211 +#define SPR_TSUNDER_B 212 +#define SPR_PYROPE_B 213 +#define SPR_PYROPE_HURT 214 +#define SPR_RG01_OW 215 +#define SPR_RG02_OW 216 +#define SPR_RG01_B 217 +#define SPR_RG02_B 218 +#define SPR_MTT_NEWS 219 +#define SPR_BOMB_BALL 220 +#define SPR_BOMB_DOG 221 +#define SPR_BOMB_PRESENT 222 +#define SPR_BOMB_WATER 223 +#define SPR_BOMB_SCRIPT 224 +#define SPR_BOMB_GAME 225 +#define SPR_NEWS_SCRIPT 226 +#define SPR_APRON 227 +#define SPR_MUFFET_OW 228 +#define SPR_MUFFET_B 229 +#define SPR_MUFFET_HURT 230 +#define SPR_MUFFET_PET 231 +#define SPR_SPIDER_B 232 +#define SPR_DIAMOND1 233 +#define SPR_DIAMOND2 234 +#define SPR_BOMB_B 235 +#define SPR_DOGBOMB_B 236 +#define SPR_WATER_B 237 +#define SPR_UNDYNE_FALLEN 238 +#define SPR_SPEAR 239 +#define SPR_ARROW 240 +#define SPR_PLANE 241 +#define SPR_BOMB 242 +#define SPR_CLOUD 243 +#define SPR_BOLT 244 +#define SPR_UNDYNE_B 245 +#define SPR_NOTE 246 +#define SPR_DROP 247 +#define SPR_ARM 248 +#define SPR_DEBRIS 249 +#define SPR_STAR 250 +#define SPR_CROISSANT 251 +#define SPR_DONUT 252 +#define SPR_MTTMINI 253 +#define SPR_AARON_B 254 +#define SPR_AARON_HURT 255 +#define SPR_WOSHUA_B 256 +#define SPR_WOSHUA_HURT 257 +#define SPR_MOLDBYGG_B 258 +#define SPR_SHYREN_B 259 +#define SPR_SHYREN_TURNED 260 +#define SPR_INTROIMAGE 261 +#define SPR_INTROLAST 262 +#define SPR_UNDERTALETITLE 263 +#define SPR_GAMEOVERBG 264 +#define SPR_FACE_TORIELTALK 265 +#define SPR_FACE_TORIELTALKSIDE 266 +#define SPR_FACE_TORIELHAPPYTALK 267 +#define SPR_FACE_TORIELWHAT 268 +#define SPR_FACE_TORIELWHATSIDE 269 +#define SPR_FACE_TORIELMAD 270 +#define SPR_FACE_TORIELCOLD 271 +#define SPR_FACE_TORIELSURPRISED 272 +#define SPR_FACE_TORIELEMBARRASSED 273 +#define SPR_FACE_TORIELGLASSES 274 +#define SPR_FACE_TORIELREVENGETALK 275 +#define SPR_FACE_TORIELSCARED 276 +#define SPR_FACE_TORIELBLINK 277 +#define SPR_FACE_TORIELHAPPYBLINK 278 +#define SPR_FACE_TORIELBODY 279 +#define SPR_FACE_SANS 280 +#define SPR_FACE_SANSCHUCKLE 281 +#define SPR_FACE_SANSWINK 282 +#define SPR_FACE_PAPYRUS 283 +#define SPR_FACE_PAPYRUSEVIL 284 +#define SPR_FACE_PAPYRUSLAUGH 285 +#define SPR_FACE_PAPYRUSMAD 286 +#define SPR_FACE_PAPYRUSSIDE 287 +#define SPR_FACE_ALPHYS 288 +#define SPR_FLOWEYNICE 289 +#define SPR_FLOWEYNICESIDE 290 +#define SPR_FLOWEYSASSY 291 +#define SPR_FLOWEYEVIL 292 +#define SPR_FLOWEYGRIN 293 +#define SPR_FLOWEYPLAIN 294 +#define SPR_FLOWEYPISSED 295 +#define SPR_FLOWEYWINK 296 +#define SPR_FLOWEYLAUGH 297 +#define SPR_FLOWEYHURT 298 +#define SPR_FLOWEYTORIEL 299 +#define SPR_FLOWEYTORIEL2 300 +#define SPR_FLOWEYSIDESHOCK 301 #define AREA_RUINS 0 #define AREA_SNOWDIN 1 #define AREA_SNOWTOWN 2 #define AREA_WATERFALL 3 #define AREA_HOTLAND 4 +#define AREA_RESORT 5 #define ROOM_AREA1 0 #define ROOM_AREA1_2 1 #define ROOM_RUINS1 2 @@ -474,10 +479,15 @@ #define ROOM_HT_STAGE 157 #define ROOM_HT_TILES 158 #define ROOM_HT_CROSS3 159 +#define ROOM_RES_OUTSIDE 160 +#define ROOM_RES_LOBBY 161 +#define ROOM_RES_DINER 162 +#define ROOM_RES_HALL 163 +#define ROOM_RES_ROOM 164 #define FONT_MAIN 0 #define FONT_MENU 1 #define FONT_SMALL 2 -#define NUM_SPRITES 298 -#define NUM_ROOMS 160 +#define NUM_SPRITES 302 +#define NUM_ROOMS 165 #define NUM_FONTS 3 #endif diff --git a/games/undertale/src/events.c b/games/undertale/src/events.c index 8b64b1f1..fc610da4 100644 --- a/games/undertale/src/events.c +++ b/games/undertale/src/events.c @@ -124,5 +124,7 @@ int event_run(Ev *c) { if (r >= 0) return r; r = ht3_event(c); if (r >= 0) return r; + r = res_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index 4a6c39d4..521971a4 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -52,7 +52,9 @@ enum { EV_HOTDOG, EV_HEATS, EV_APRON, EV_BELT_SWITCH, EV_HT2_CALL, EV_VENTPUZ, EV_GUARDS, EV_NEWS, EV_BOMB, EV_HT2_ELEVATOR, /* ht3.c */ EV_BAKESALE3, EV_SHOOT3, EV_HT3_CALL, EV_MUFFET, EV_MUSICAL, EV_TILE, EV_TILES3, EV_HEATS3, EV_HT3_ELEVATOR, - EV_NICECREAM3, EV_HT3_END, + EV_NICECREAM3, + /* resort.c */ + EV_RES_SANS, EV_RES_SHOP, EV_RES_DOOR, EV_RES_DESK, EV_RES_CORE, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index 97569494..fd3f3c39 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -155,7 +155,13 @@ enum { F_HT_MUSICAL, /* Mettaton's musical seen (and the trapdoor) */ F_HT_TILES3, /* the tile puzzle under the stage: 1 solved, 2 out of time; then Mettaton fought */ F_HT_HEATS3, /* Heats Flamesman asked about his name */ - F_HT_FLOOR3, /* the way to the MTT Resort reached (where the game now ends) */ + F_HT_FLOOR3, /* the MTT Resort reached */ + F_RES_SANS, /* dinner with Sans at the Resort */ + F_RES_TEA, /* room service brought: the Sea Tea (door 1), the Cinnamon Bunny (door 3) */ + F_RES_BUN, + F_RES_ROOM, /* the hotel's room: 1 paid for, 2 slept in */ + F_RES_DOG, /* the Hot Dog slid under door 4 (for a Hush Puppy) */ + F_RES_CORE, /* the CORE's door reached (where the game now ends) */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/game.c b/games/undertale/src/game.c index cb0ac6a6..70883ae5 100644 --- a/games/undertale/src/game.c +++ b/games/undertale/src/game.c @@ -48,7 +48,7 @@ bool gain_exp(int exp) { } return up; } -int weapon_at(void) { return item_info(sv.weapon)->at; } +int weapon_at(void) { return item_info(sv.weapon)->at + item_info(sv.armor)->at; } /* (the Cowboy Hat's too) */ int armor_df(void) { return item_info(sv.armor)->df; } bool item_add(int item) { diff --git a/games/undertale/src/hotland.h b/games/undertale/src/hotland.h index 35707a70..f10d2af9 100644 --- a/games/undertale/src/hotland.h +++ b/games/undertale/src/hotland.h @@ -1,5 +1,5 @@ -/* Undertale: Hotland (ht1.c, ht2.c, ht3.c: its three floors), its monsters (htmon.c), Mettaton's shows - * (htshows.c). */ +/* Undertale: Hotland (ht1.c, ht2.c, ht3.c: its three floors; resort.c: the MTT Resort), its monsters + * (htmon.c), Mettaton's shows (htshows.c). */ #ifndef UT_HOTLAND_H #define UT_HOTLAND_H #include "event.h" @@ -18,4 +18,6 @@ void ht3_update(void); /* the webs' hold, the tile puzzle, its flames and clo void ht3_draw(void); /* under everything: the flames, the turned-off force fields */ void ht3_draw_top(void); /* over everything: the tile puzzle's clock */ int ht3_speed(int x, int y); +void res_setup(int room, int from); +int res_event(Ev *c); #endif diff --git a/games/undertale/src/ht3.c b/games/undertale/src/ht3.c index df3bb559..1a5fcfe0 100644 --- a/games/undertale/src/ht3.c +++ b/games/undertale/src/ht3.c @@ -1,7 +1,7 @@ /* Hotland, its third floor: out of the elevator, the spiders' bake sale; the vent islands, the shooting puzzles north * (the Diamond Boys) and south (over the belts, past the drones); the spider entrance and Muffet's lair, its webs; - * Mettaton's musical, the trapdoor down to the tile puzzle and his fight; the crossroads, where the way north leads to - * the MTT Resort. (As the Undertale Wiki describes them; what they say is ours, in short.) */ + * Mettaton's musical, the trapdoor down to the tile puzzle and his fight; the crossroads, where the stairs north lead + * to the MTT Resort (resort.c). (As the Undertale Wiki describes them; what they say is ours, in short.) */ #include #include #include "battle.h" @@ -205,7 +205,6 @@ void ht3_setup(int room, int from) { } thing(8054, 430, 24, 30, EV_HEATS3, ACTOR_ITEM, 0); thing(7934, 340, 80, 80, EV_HT3_ELEVATOR, ACTOR_DOOR, 0); - obj_trigger(7522, 296, 56, 10, EV_HT3_END, ACTOR_TRIGGER); break; } } @@ -417,16 +416,6 @@ static int ev_elevator(Ev *c) { EV_END; } -static int ev_end(Ev *c) { - EV_BEGIN; - NARRATE("* (The MTT Resort is just up\n these stairs.)"); - set_flag(F_HT_FLOOR3, 1); - sv.room = (int16_t)g_room, sv.x = 7530, sv.y = 420; - save_write_auto(); - menu_end_open(); - EV_END; -} - int ht3_event(Ev *c) { switch (c->id) { case EV_BAKESALE3: return ev_bakesale(c); @@ -439,7 +428,6 @@ int ht3_event(Ev *c) { case EV_HEATS3: return ev_heats(c); case EV_NICECREAM3: return ev_nicecream(c); case EV_HT3_ELEVATOR: return ev_elevator(c); - case EV_HT3_END: return ev_end(c); } return -1; } diff --git a/games/undertale/src/items.c b/games/undertale/src/items.c index cecf88c5..9909283f 100644 --- a/games/undertale/src/items.c +++ b/games/undertale/src/items.c @@ -60,6 +60,21 @@ static const ItemInfo items[ITEM_COUNT] = { "* You eat the Hot Dog.\n* (Bark!)", 10}, [ITEM_STAINED_APRON] = {"Stained Apron", "StainApro", IT_ARMOR, 0, 0, 11, "An apron with old stains.\n* Heals 1 HP every other turn.", "", 50}, + [ITEM_STARFAIT] = {"Starfait", "Starfait", IT_FOOD, 14, 0, 0, "A tall, sparkly dessert.\n* Very popular.", + "* You eat the Starfait.\n* It's sweet and fizzy.", 5}, + [ITEM_GLAMBURGER] = {"Glamburger", "GlamBurg", IT_FOOD, 27, 0, 0, "A burger that glitters all\n over. Very popular.", + "* You eat the Glamburger.\n* It crunches. It's the glitter.", 15}, + [ITEM_LEGENDARY_HERO] = {"Legendary Hero", "L. Hero", IT_FOOD, 40, 0, 0, "A sandwich shaped like a\n sword.", + "* You eat the Legendary Hero.\n* You feel brave!", 40}, + [ITEM_STEAK] = {"Face Steak", "FaceSteak", IT_FOOD, 60, 0, 0, "A steak in the shape of\n Mettaton's face. Don't ask.", + "* You eat the steak.\n* ...It looks back at you.", 20}, + [ITEM_JUNK_FOOD] = {"Junk Food", "JunkFood", IT_FOOD, 17, 0, 0, "Food someone threw away,\n probably.", + "* You eat the Junk Food.\n* Someone took a bite first.", 1}, + [ITEM_EMPTY_GUN] = {"Empty Gun", "EmptyGun", IT_WEAPON, 0, 12, 0, "An old revolver with no\n bullets in it.", "", 100}, + [ITEM_COWBOY_HAT] = {"Cowboy Hat", "CowboyHat", IT_ARMOR, 0, 5, 12, "A worn hat. Makes you want\n a beard. (+5 AT)", "", 50}, + [ITEM_MYSTERY_KEY] = {"Mystery Key", "MystryKey", IT_SPECIAL, 0, 0, 0, "A key, too bent to go on\n your keychain.", "", 500}, + [ITEM_HUSH_PUPPY] = {"Hush Puppy", "HushPupy", IT_FOOD, 65, 0, 0, "A spell that keeps a dog\n from casting magic.", + "* You eat the Hush Puppy.\n* Dog-magic is neutralized.", 150}, }; const ItemInfo *item_info(int id) { return &items[id >= 0 && id < ITEM_COUNT ? id : 0]; } diff --git a/games/undertale/src/items.h b/games/undertale/src/items.h index 9120436d..3c9a96e3 100644 --- a/games/undertale/src/items.h +++ b/games/undertale/src/items.h @@ -39,6 +39,16 @@ enum { ITEM_INSTANT_NOODLES, ITEM_HOT_DOG, ITEM_STAINED_APRON, + /* the MTT Resort */ + ITEM_STARFAIT, + ITEM_GLAMBURGER, + ITEM_LEGENDARY_HERO, + ITEM_STEAK, + ITEM_JUNK_FOOD, + ITEM_EMPTY_GUN, + ITEM_COWBOY_HAT, + ITEM_MYSTERY_KEY, + ITEM_HUSH_PUPPY, ITEM_COUNT }; enum { IT_FOOD, IT_WEAPON, IT_ARMOR, IT_SPECIAL }; diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index d4668a4a..33e7d578 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -383,7 +383,7 @@ void menu_gameover_open(void) { void menu_end_open(void) { g_mode = MODE_END; t = 0; - writer_start(&w, "Up to the MTT Resort, past\nMuffet and the musical...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); + writer_start(&w, "Up to the door of the CORE,\npast the MTT Resort...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/resort.c b/games/undertale/src/resort.c new file mode 100644 index 00000000..d4432141 --- /dev/null +++ b/games/undertale/src/resort.c @@ -0,0 +1,192 @@ +/* The MTT Resort: the street outside (Sans, and dinner with him in the restaurant), the lobby (its fountain, the + * MTT-Brand Burger Emporium, the elevator that's out of order, the door north to the CORE), the hotel's hallway and + * its room service. (As the Undertale Wiki describes them; what they say is ours, in short.) */ +#include +#include "event.h" +#include "events.h" +#include "game.h" +#include "hotland.h" +#include "items.h" +#include "menu.h" +#include "save.h" +#include "shop.h" +#include "snowdin.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } +static Obj *thing(int x, int y, int w, int h, int event, int name, int arg) { + Obj *o = obj_trigger(x, y, w, h, event, name); + if (o) o->flags = OF_TALK | OF_SOLID, o->arg = (int16_t)arg; + return o; +} +static int slot_of(int item) { + for (int i = 0; i < NUM_ITEMS; i++) + if (sv.items[i] == item) return i; + return -1; +} + +void res_setup(int room, int from) { + (void)from; + if (room < ROOM_RES_OUTSIDE || room > ROOM_RES_ROOM) return; + set_flag(F_HT_FLOOR3, 1); + switch (room) { + case ROOM_RES_OUTSIDE: + if (!flag(F_RES_SANS)) { + Obj *s = obj_sans(1143, 851, DIR_DOWN); + if (s) s->event = EV_RES_SANS, s->flags |= OF_TALK; + } + obj_sign(1260, 880, 18, 18, "* (A note: great deals up the\n creepy alley on the right!)"); + thing(1382, 628, 36, 52, EV_RES_SHOP, ACTOR_DOOR, 1); /* Bratty and Catty's, up the alley */ + break; + case ROOM_RES_LOBBY: + obj_save(1210, 448, "* (The calm of this hotel fills\n you with determination.)"); + obj_sign(1180, 382, 80, 54, "* (Royal Memorial Fountain.\n Built 201X.)\n* (Mettaton added last week.)"); + thing(1262, 226, 76, 54, EV_RES_SHOP, ACTOR_DOOR, 0); /* the MTT-Brand Burger Emporium */ + obj_sign(1378, 228, 46, 52, "* (The elevator to the capital.)\n* (It's out of order.)"); + thing(1100, 236, 80, 44, EV_RES_DESK, ACTOR_ITEM, 0); + obj_sign(1252, 496, 20, 24, "* Welcome to the MTT Resort!\n* Mettaton's own hotel!"); + obj_sign(1354, 292, 36, 40, "* (On the phone: they won't be\n home tonight. The elevator.)"); + obj_sign(1432, 284, 22, 34, "* Out of order?! The ONE\n elevator to the capital?!"); + obj_sign(1394, 320, 52, 34, "* The elevator's broken, so\n we're trying to fit in all\n the guests going up."); + obj_sign(1290, 510, 22, 22, "* (A box. It's locked tight.)"); + thing(1182, 84, 76, 56, EV_RES_CORE, ACTOR_DOOR, 0); + break; + case ROOM_RES_DINER: + obj_sign(820, 330, 60, 52, "* Welcome to the restaurant!|* ...you needed a reservation,\n darling. Sorry."); + obj_sign(640, 312, 30, 40, "* My son ran away after his\n mother fell down.|* ...I tell jokes here now.\n* Ice to meet you."); + obj_sign(622, 386, 18, 22, "* The CORE's made of parts\n you can swap around.|* So its layout changes when\n it needs to. Neat, huh?"); + obj_sign(528, 376, 38, 44, "* Puzzles everywhere down here.\n* Ugh.|* They're from when we built\n them to stop humans."); + obj_sign(98, 440, 22, 30, "* (They forgot to book a table,\n so they're licking the ficus\n to look busy.)"); + break; + case ROOM_RES_HALL: + for (int i = 0; i < 4; i++) thing(1652 + i * 75, 330, 36, 52, EV_RES_DOOR, ACTOR_ITEM, i + 1); + obj_sign(1930, 380, 44, 36, "* (They mop up the slime\n dripping off them.)\n* (It keeps dripping.)"); + break; + case ROOM_RES_ROOM: + obj_sign(1680, 44, 120, 116, "* (A big, soft bed.)"); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_sans(Ev *c) { + Obj *s = obj_get(ACTOR_SANS); + EV_BEGIN; + if (flag(F_RES_SANS)) { + SAY(FACE_SANS, "* hey. good luck in there."); + return 1; + } + SAY(FACE_SANS, "* hey. you made it.|* how about dinner?\n* my treat.@Sure@Not now"); + if (CHOICE() == 1) { + SAY(FACE_SANS, "* ok. i'll be around."); + return 1; + } + /* the restaurant: a table, and what he has to say */ + FADE_TO(ROOM_RES_DINER, 236, 418, DIR_RIGHT); + s = obj_sans(338, 450, DIR_LEFT); + SAY(FACE_SANS, "* so. i keep watch in the\n forest by snowdin, right?|* out there's this big door.\n locked tight.|* so i'd knock and tell jokes\n through it. for fun.|* one day, somebody on the\n other side knocked back.|* an old lady. laughed at all\n of my jokes.|* we kept at it. day after\n day."); + SAY(FACE_SANS, "* then she asked me for a\n favor.|* if a human ever came out of\n that door...|* ...would i look after them?\n keep them safe?|* ...|* i don't like promises.\n but i made that one.|* and without it...|* well. you'd be dust by now,\n buddy."); + SAY(FACE_SANS, "* ...heh. lighten up.\n* thanks for dinner.|* wait. i said i'd pay, huh.\n* ...catch you later."); + set_flag(F_RES_SANS, 1); + s = obj_get(ACTOR_SANS); + WALK(s, s->x, 362, 2); /* up past the tables, out east */ + s = obj_get(ACTOR_SANS); + WALK(s, 780, 362, 3); + gone(obj_get(ACTOR_SANS)); + EV_END; +} + +static int ev_shop(Ev *c) { + EV_BEGIN; + shop_open(c->self && c->self->arg ? SHOP_BRATTY : SHOP_BURGER); + WAIT_UNTIL(g_mode == MODE_WORLD); + EV_END; +} + +/* the hotel's front desk: a room for 200G (door 2) */ +static int ev_desk(Ev *c) { + EV_BEGIN; + if (flag(F_RES_ROOM)) { + NARRATE(flag(F_RES_ROOM) == 1 ? "* Your room is the second\n door down the hall." : "* We hope you enjoyed your stay!"); + return 1; + } + NARRATE("* Welcome to the MTT Resort!\n* A room is 200G a night.@Stay@Leave"); + if (CHOICE() == 1) return 1; + if (sv.gold < 200) { + NARRATE("* ...you don't have enough\n money. Sorry!"); + return 1; + } + sv.gold = (uint16_t)(sv.gold - 200); + set_flag(F_RES_ROOM, 1); + NARRATE("* Your room is the second\n door down the hall. Enjoy!"); + EV_END; +} + +/* the hotel's doors: room service for 1 and 3; 2 the room from the desk; a dog behind 4 */ +static int ev_door(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 1; + if (c->v[0] == 2) { + if (flag(F_RES_ROOM) != 1) { + NARRATE("* (The door is locked.)"); + return 1; + } + world_fade_hold(ROOM_RES_ROOM, 1730, 158, DIR_DOWN, 90); + WAIT_UNTIL(!world_fading()); + sv.hp = sv.maxhp; + set_flag(F_RES_ROOM, 2); + NARRATE("* (You slept soundly. Your HP\n was maxed out.)"); + return 1; + } + if (c->v[0] == 4) { + if (flag(F_RES_DOG) || slot_of(ITEM_HOT_DOG) < 0) { + NARRATE("* (Something behind the door is\n panting.)\n* (It sounds like a dog.)"); + return 1; + } + NARRATE("* (Something behind the door is\n panting.)|* (Slide a Hot Dog under it?)@Yes@No"); + if (CHOICE() == 1) return 1; + item_remove_at(slot_of(ITEM_HOT_DOG)); + item_add(ITEM_HUSH_PUPPY); + set_flag(F_RES_DOG, 1); + NARRATE("* (It tugs at the Hot Dog a few\n times, then gets it.)|* (A Hush Puppy slides back out.)"); + return 1; + } + c->v[1] = c->v[0] == 1 ? ITEM_SEA_TEA : ITEM_CINNAMON_BUNNY; + c->v[2] = c->v[0] == 1 ? F_RES_TEA : F_RES_BUN; + if (flag(c->v[2])) { + NARRATE("* (Nobody's ordered anything\n else.)"); + return 1; + } + NARRATE(c->v[0] == 1 ? "* (A note on the door: room\n service, please. A Sea Tea.)" + : "* (A note on the door: room\n service, please. A Cinnamon\n Bunny.)"); + if (slot_of(c->v[1]) < 0) return 1; + NARRATE("* (Slide it under the door?)@Yes@No"); + if (CHOICE() == 1) return 1; + item_remove_at(slot_of(c->v[1])); + sv.gold = (uint16_t)min_i(sv.gold + 99, 9999); + set_flag(c->v[2], 1); + NARRATE("* (Someone takes it, and slides\n 99G back under the door.)"); + EV_END; +} + +static int ev_core(Ev *c) { + EV_BEGIN; + NARRATE("* (The door to the CORE.)\n* (Go through?)@Yes@No"); + if (CHOICE() == 1) return 1; + set_flag(F_RES_CORE, 1); + sv.room = (int16_t)g_room, sv.x = 1205, sv.y = 150; + save_write_auto(); + menu_end_open(); + EV_END; +} + +int res_event(Ev *c) { + switch (c->id) { + case EV_RES_SANS: return ev_sans(c); + case EV_RES_SHOP: return ev_shop(c); + case EV_RES_DOOR: return ev_door(c); + case EV_RES_DESK: return ev_desk(c); + case EV_RES_CORE: return ev_core(c); + } + return -1; +} diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index 980eab3b..d8f9c12c 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -24,6 +24,7 @@ void room_setup(int room, int from) { ht1_setup(room, from); ht2_setup(room, from); ht3_setup(room, from); + res_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ diff --git a/games/undertale/src/shop.c b/games/undertale/src/shop.c index c408dff4..8c71097c 100644 --- a/games/undertale/src/shop.c +++ b/games/undertale/src/shop.c @@ -12,10 +12,12 @@ typedef struct { uint8_t item; - uint8_t price; + uint16_t price; } Ware; typedef struct { uint16_t pic; + uint16_t keeper; /* drawn over the picture (its feet at keeper_x, 120), 0 if the picture has them */ + int16_t keeper_x; const char *hello, *again, *buying, *bought, *poor, *full, *nobuy, *sell; Ware wares[4]; int nwares; @@ -59,6 +61,32 @@ static const Shop shops[SHOP_COUNT] = { .answers = {"* hOI!!! i'm temmie!!", "* temmies r the best!!!\n* we love humans... but some temmies r allergic...", "* temmie village is very old...\n* tem forget the rest.", "* tem wants to go to colleg someday!!"}, .ntopics = 4}, + [SHOP_BURGER] = { + .pic = SPR_SHOP_BURGER, .keeper = SPR_BURGERPANTS, .keeper_x = 246, + .hello = "* Hi, welcome to MTT-Brand\n Burger Emporium...|* ...where the food is, uh...\n food.", .again = "* Anything else?", + .buying = "Take your\ntime. Please.", .bought = "Thanks...\nI guess.", .poor = "You don't\nhave the\nmoney.", + .full = "Your hands\nare full.", .nobuy = "Fine by me.", + .sell = "* Sell stuff? Here?\n* I can barely sell the burgers.", + .wares = {{ITEM_STARFAIT, 60}, {ITEM_GLAMBURGER, 120}, {ITEM_LEGENDARY_HERO, 300}, {ITEM_STEAK, 500}}, .nwares = 4, + .topics = {"Say hello", "About Mettaton", "About the food", "Your life"}, + .answers = {"* Hi. I'm Burgerpants.\n* Not my real name. Long story.", + "* Mettaton's my boss.\n* He's... a lot.|* Everything here has to have\n his face on it.", + "* The Glamburger has glitter\n in it.|* Mettaton says that's how\n humans eat. Sure.", + "* I came here to be a star.\n* Now I make burgers.|* ...at least I've got my youth.\n* Right?"}, + .ntopics = 4}, + [SHOP_BRATTY] = { + .pic = SPR_SHOP_BRATTY, .keeper = SPR_BRATTY_CATTY, .keeper_x = 160, + .hello = "* Hey! Check it out!\n* Yeah! Check it out!", .again = "* Like, anything else?", + .buying = "Buy ALL\nour stuff!", .bought = "Thanks!\nLike, so\nmuch!", .poor = "You need\nWAY more\nmoney.", + .full = "You have\nTOO many\nitems!", .nobuy = "Whatever!", + .sell = "* We don't, like, need\n anything. Really.", + .wares = {{ITEM_JUNK_FOOD, 25}, {ITEM_EMPTY_GUN, 350}, {ITEM_COWBOY_HAT, 350}, {ITEM_MYSTERY_KEY, 600}}, .nwares = 4, + .topics = {"About you two", "Burgerpants", "Your stuff", "Mettaton"}, + .answers = {"* I'm Bratty. She's Catty.\n* We're, like, best friends.", + "* The guy at the burger place?\n* Ugh, a creep.|* ...a kind of cute creep,\n though. -Catty", + "* We find it all in the dump.\n* It's GOOD garbage.|* And, like, TOTALLY expensive.", + "* Mettaton is SO cute.\n* We're, like, his biggest fans."}, + .ntopics = 4}, }; static int shop_id, st, sel, sub; @@ -245,6 +273,7 @@ void shop_draw(void) { const Shop *s = &shops[shop_id]; gfx_rect(0, 0, SCREEN_W, SCREEN_H, C_BLACK, 255); gfx_sprite(s->pic, 0, 0, 0, 0, 255); + if (s->keeper) gfx_sprite(s->keeper, 0, s->keeper_x, 120, 0, 255); panel(2, 121, 210, 117); panel(212, 121, 106, 117); char g[24]; diff --git a/games/undertale/src/shop.h b/games/undertale/src/shop.h index f803103b..8581069f 100644 --- a/games/undertale/src/shop.h +++ b/games/undertale/src/shop.h @@ -2,7 +2,7 @@ #ifndef UT_SHOP_H #define UT_SHOP_H #include -enum { SHOP_SNOWDIN, SHOP_GERSON, SHOP_TEM, SHOP_COUNT }; +enum { SHOP_SNOWDIN, SHOP_GERSON, SHOP_TEM, SHOP_BURGER, SHOP_BRATTY, SHOP_COUNT }; void shop_open(int id); /* MODE_SHOP until Exit */ void box_open(void); void shop_update(uint32_t keys, uint32_t pressed); diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index 06340696..cccd6655 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -38,6 +38,7 @@ ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD = range(17, 23) ITEM_BURNT_PAN, ITEM_INSTANT_NOODLES, ITEM_HOT_DOG, ITEM_STAINED_APRON = 28, 29, 30, 31 ITEM_NICE_CREAM = 13 +ITEM_STARFAIT = 32 def run(args, frames, saves=None, what=""): @@ -261,12 +262,12 @@ def check(cond, msg): # Hotland's third floor: the bake sale, the vent islands, both shooting puzzles (the Diamond Boys, Alphys's anime), # the belts past the drones, Muffet spared, Mettaton's musical, the tile puzzle and his fight, the crossroads (a Nice -# Cream, Heats Flamesman), up to the MTT Resort +# Cream, Heats Flamesman), up the stairs to the MTT Resort if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--gold", "100", "--room", str(ROOMS["HT_L3"]), "--at", "3770,842", "--path-file", os.path.join(HERE, "hotland3.path")], 14000, what="Hotland's third floor") - check(s and s["mode"] == MODE_END and s["room"] == ROOMS["HT_CROSS3"], - f"Hotland's third floor did not end by the MTT Resort: {s}") + check(s and s["mode"] == MODE_WORLD and s["room"] == ROOMS["RES_OUTSIDE"], + f"Hotland's third floor did not end at the MTT Resort: {s}") if s: for name, v in (("HT_CALL_HUB3", 1), ("HT3_PUZ_N", 1), ("HT3_PUZ_S", 1), ("HT_ANIME", 1), ("HT_MUFFET", 1), ("HT_MUSICAL", 1), ("HT_TILES3", 1), ("HT_HEATS3", 1), ("HT_FLOOR3", 1)): @@ -275,6 +276,18 @@ def check(cond, msg): check(s["gold"] == 188, f"Hotland's third floor: Muffet's gold or the Nice Cream went wrong: {s['gold']}") check(ITEM_NICE_CREAM in s["items"], f"Hotland's third floor: no Nice Cream: {s['items']}") +# the MTT Resort: dinner with Sans, a Starfait from Burgerpants, a night in the hotel (200G), room service and the +# dog's door (nothing to give), up to the CORE's door +if not QUICK: + s = run(["--name", "Frisk", "--noenc", "--god", "--gold", "400", "--room", str(ROOMS["HT_CROSS3"]), "--at", "7550,420", + "--path-file", os.path.join(HERE, "resort.path")], 5000, what="the MTT Resort") + check(s and s["mode"] == MODE_END and s["room"] == ROOMS["RES_LOBBY"], f"the MTT Resort did not end at the CORE: {s}") + if s: + for name, v in (("HT_FLOOR3", 1), ("RES_SANS", 1), ("RES_ROOM", 2), ("RES_CORE", 1), ("RES_TEA", 0), ("RES_DOG", 0)): + check(flag(s, name) == v, f"the MTT Resort: F_{name} is {flag(s, name)}, not {v}") + check(s["gold"] == 140, f"the MTT Resort: the Starfait or the room went wrong: {s['gold']}") + check(ITEM_STARFAIT in s["items"], f"the MTT Resort: no Starfait: {s['items']}") + if failures: print("\n".join("FAIL " + f for f in failures)) sys.exit(1) diff --git a/games/undertale/tests/resort.path b/games/undertale/tests/resort.path new file mode 100644 index 00000000..3dd02a82 --- /dev/null +++ b/games/undertale/tests/resort.path @@ -0,0 +1,64 @@ +# the MTT Resort, up the crossroads' stairs (play it with --room 159 --at 7550,420 --name Frisk --noenc --god +# --gold 400): Sans out front, dinner with him; the lobby, a Starfait from Burgerpants; a room at the desk, door 2 +# and its bed; doors 1 and 4 (nothing to give); the CORE's door +w5 +7550,410 +7550,276 +w30 +go:1152,829 +l +z +talk +pick:0 +talk +w30 +go:1030,400 +1075,400 +w10 +go:1290,262 +u +z +w40 +z +w5 +z +w5 +z +w30 +x +w5 +u +z +w20 +go:1140,262 +u +z +pick:0 +talk +go:1450,396 +1490,396 +w10 +go:1735,362 +u +z +talk +w30 +go:1730,200 +1730,214 +w10 +go:1660,362 +u +z +talk +go:1885,362 +u +z +talk +go:1500,396 +1470,396 +w10 +go:1210,122 +u +z +pick:0 +w60 diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index 3baa84f4..24ebbfc8 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -161,6 +161,10 @@ HT3_GRATES = [(4600, 880), (4820, 660), (4820, 1100), (5040, 880)] HT_STAGE = [(163, 73, 164), (132, 53, 125), (55, 44, 103)] HT_TILES = [(64, 64, 255), (255, 255, 128), (255, 192, 192), (156, 255, 121), (255, 193, 74), (192, 0, 192)] +# the MTT Resort: its lobby's checkered floor and red carpet; the street's paving and carpet; the restaurant's floor +RES_FLOOR = [(251, 205, 121), (251, 225, 121), (235, 105, 99), (203, 67, 33), (253, 241, 193)] +RES_STREET = [(36, 43, 57), (71, 68, 130), (44, 41, 80), (207, 52, 52), (138, 55, 86), (235, 105, 99)] +RES_DINER = [(114, 73, 95), (90, 83, 119), (90, 74, 132)] # the vent puzzle's platforms (their top-left) HT_VENTPUZ = [(4620, 2160), (4520, 2260), (4620, 2260), (4720, 2260), (4520, 2360), (4620, 2360), (4520, 2460), (4620, 2460)] @@ -190,6 +194,9 @@ ("erase", 536, 6208, 42, 11, [(19, 35, 45), (18, 34, 44), (19, 35, 44), (23, 37, 53), (20, 37, 47), (20, 36, 46)]), ])) +AREAS.append(dict(name="resort", map="MTT_Resort_map.png", floor=RES_FLOOR, margin=0, close=True, + patches=[("copy", 1289, 818, 26, 36, 1131, 818)])) # Sans out front (a sprite here) + ROOMS = [ # the landing: the bed of golden flowers, a hallway, the Delta Rune arch dict(name="area1", area="ruins", rect=(0, 5900, 680, 260), title="Ruins", margin=0, @@ -590,7 +597,29 @@ dict(name="ht_tiles", area="hotland", rect=(6340, 540, 1280, 260), title="Hotland", floor_colors=HT_FLOOR + HT_BELT + HT_HUB + HT_TILES, fix=[("walk", 7522, 540, 56, 84)]), dict(name="ht_cross3", area="hotland", rect=(7320, 280, 820, 260), title="Hotland", - fix=[("walk", 7522, 290, 56, 124), ("walk", 7522, 470, 56, 70)]), + fix=[("walk", 7522, 290, 56, 124), ("walk", 7522, 470, 56, 70)], + doors=[((7522, 292, 56, 10), "res_outside", (1210, 976), "up")]), + # the MTT Resort (its own map): the street outside (Sans by the door), the lobby (the fountain, the Burger + # Emporium, the elevator, the CORE's door north), the restaurant west, the hotel's hallway east + dict(name="res_outside", area="resort", rect=(960, 610, 520, 410), title="MTT Resort", floor_colors=RES_STREET, + # (the building is drawn in the street's colours: the plaza, the door's carpet, the alley up the right) + floor_rects=[(990, 842, 470, 158), (1190, 1000, 70, 20), (1188, 826, 64, 20), (1384, 648, 34, 200)], + fix=[("wall", 1084, 932, 112, 22), ("wall", 1244, 932, 112, 22)], # the velvet ropes + doors=[((1190, 832, 60, 6), "res_lobby", (1205, 568), "up"), ((1197, 1012, 56, 8), "ht_cross3", (7536, 300), "down")]), + dict(name="res_lobby", area="resort", rect=(1060, 60, 420, 550), title="MTT Resort", + floor_rects=[(1080, 278, 380, 162), (1080, 440, 280, 98), (1060, 380, 20, 60), (1460, 380, 20, 60), + (1200, 136, 40, 142), (1200, 538, 40, 72)], + doors=[((1195, 600, 50, 6), "res_outside", (1205, 840), "down"), ((1060, 380, 6, 60), "res_diner", (1030, 396), "left"), + ((1474, 380, 6, 60), "res_hall", (1488, 396), "right")]), + dict(name="res_diner", area="resort", rect=(60, 220, 1000, 300), title="MTT Resort", floor_colors=RES_DINER + RES_FLOOR, + floor_rects=[(82, 342, 698, 156), (780, 382, 280, 56)], + doors=[((1054, 380, 6, 60), "res_lobby", (1068, 396), "right")]), + dict(name="res_hall", area="resort", rect=(1480, 300, 540, 160), title="MTT Resort", floor_rects=[(1480, 380, 520, 60)], + doors=[((1480, 380, 6, 60), "res_lobby", (1450, 396), "left")]), + # the hotel's room (door 2), reached from the hall by its door + dict(name="res_room", area="resort", rect=(1640, 0, 200, 250), title="MTT Resort", + floor_rects=[(1644, 84, 192, 116), (1720, 200, 40, 50)], + doors=[((1720, 232, 40, 8), "res_hall", (1735, 364), "down")]), ] # rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index 3a9ce557..c5b1fc90 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -399,6 +399,12 @@ def gen_star(): ("temmie_hurt", "wiki:Temmie_battle_hurt.png", {"feet": True}), ("shop_gerson", "wiki:Gerson_screenshot_shop.png", {"keep": True, "box": (0, 0, 320, 120)}), ("shop_tem", "wiki:Tem_Shop_screenshot_Temmie_Armor.png", {"keep": True, "box": (0, 0, 320, 120)}), + # the MTT-Brand Burger Emporium: its counter, Burgerpants behind it + ("shop_burger", "wiki:Burgerpants_sprite_shop.png", {"keep": True, "box": (0, 0, 320, 120)}), + ("burgerpants", "wiki:Burgerpants_face_1.png", {"feet": True}), + # Bratty and Catty's alley: its trash cans and door, the two of them in front + ("shop_bratty", "wiki:Bratty_and_Catty_sprite_shop.png", {"keep": True, "box": (0, 0, 320, 120)}), + ("bratty_catty", "wiki:Bratty_and_Catty_sprite.png", {"feet": True}), ("bird", "map:Waterfall_map.png:8466,578,15,19", {"keep": True, "clear": [(27, 33, 90), (27, 21, 72), (23, 13, 43)]}), ("tutu", "map:Waterfall_map.png:1240,1240,22,10", {"keep": True, "clear": [(23, 13, 43), (27, 21, 72), (27, 33, 90)]}), ("artifact", "map:Waterfall_map.png:10156,150,12,11", From 15e8bfa9833932c98430dd21c49712c1228602ab Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 17:02:33 +0000 Subject: [PATCH 17/19] Undertale: the CORE and Mettaton EX, up to the elevator to the castle The door north of the MTT Resort's lobby now leads into the CORE, as the Undertale Wiki and its map describe it (what's said is short and in our own words): - The approach, where two black shapes back away inside, and Alphys calls; the lobby, its elevator out of order (it works once the far side's reached); the fire pit that isn't on her map; the doorway, where Madjick ambushes Frisk. - The switch that turns off the force field and sends its lasers through (Alphys says orange, orange, blue; it's blue, blue, orange); the crossroads, east, no, north first: Knight Knight's ambush. - The laser bridge: Alphys cuts the power, a field on its own battery closes behind; at the wall of blue lasers the power keeps coming back (it flickers first): walk while it's off, freeze while it's on. - The Core Branch (a SAVE; Alphys gives up calling): the sage's path and its shooting puzzle (up, up, left, down, left, down, left, and two shots), the warrior's path and its three set fights and switch, or a minute's patience in front of the force field; its signs, a Glamburger and 100G in its trash cans, random encounters. - The End's bridge, the Core End (a SAVE, the elevator back), and Mettaton: he owns up to the monsters, the elevator and the maze, and to Alphys's plan. His box can't be hurt; when Alphys calls about the switch on his back, Turn him round and flip it. Then Mettaton EX's show: the ratings (4000 to start, falling while Frisk dawdles) rise with Boast (through his turn, unless he lands a hit), Pose (more the more hurt Frisk is), Heel Turn (the crowd cheers each hit), his brand's food, the Stick, a fight, a hit taken; Junk Food lowers them. His legs, bombs and blocks, arms, heart, bots, disco ball, bomb pairs, a union break, rewinding rows, his heart's lasers; his arms fall off after turn 11, his legs after 17 (ratings count double after). Past 12000 (10000 legless) the calls come in, and he runs out of power. - The hallway: Alphys tells Frisk what it takes to go home; the elevator up to the castle, where the game now ends. The CORE's monsters: Final Froggit, Whimsalot, Astigmatism, Madjick, Knight Knight (their stats, ACTs and spares from the wiki). Engine: bullets drawn as plain rectangles; a monster can end its battle at once (bt.result = BR_SCRIPTED). Tests: the Resort's route ends in the CORE now; a CORE route (Madjick and Knight Knight spared, the lasers, the power, the sage's puzzle, a Glamburger, Mettaton's show a hit, Alphys, the elevator). Docs and screenshots. --- README.md | 4 +- docs/play.md | 2 +- games/undertale/README.md | 17 +- games/undertale/docs/bridge.png | Bin 0 -> 3397 bytes games/undertale/docs/knight.png | Bin 0 -> 2843 bytes games/undertale/docs/mttex.png | Bin 0 -> 3132 bytes games/undertale/docs/sage.png | Bin 0 -> 1169 bytes games/undertale/src/battle.c | 5 + games/undertale/src/battle.h | 1 + games/undertale/src/bullets.c | 4 + games/undertale/src/core.c | 559 ++++++++++++++++++++++ games/undertale/src/coremon.c | 762 ++++++++++++++++++++++++++++++ games/undertale/src/data.bin | Bin 1120378 -> 1207512 bytes games/undertale/src/data.h | 247 +++++----- games/undertale/src/events.c | 2 + games/undertale/src/events.h | 6 +- games/undertale/src/flags.h | 18 +- games/undertale/src/hotland.h | 4 + games/undertale/src/htmon.c | 23 +- games/undertale/src/menu.c | 2 +- games/undertale/src/monsters.c | 3 +- games/undertale/src/monsters.h | 23 +- games/undertale/src/resort.c | 15 +- games/undertale/src/rooms.c | 3 + games/undertale/src/shoot.c | 3 +- games/undertale/src/shoot.h | 2 +- games/undertale/tests/check.py | 23 +- games/undertale/tests/core.path | 113 +++++ games/undertale/tests/resort.path | 6 +- games/undertale/tools/rooms.py | 63 ++- games/undertale/tools/sprites.py | 71 ++- 31 files changed, 1827 insertions(+), 154 deletions(-) create mode 100644 games/undertale/docs/bridge.png create mode 100644 games/undertale/docs/knight.png create mode 100644 games/undertale/docs/mttex.png create mode 100644 games/undertale/docs/sage.png create mode 100644 games/undertale/src/core.c create mode 100644 games/undertale/src/coremon.c create mode 100644 games/undertale/tests/core.path diff --git a/README.md b/README.md index 012ea84b..8162cd2c 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins, Snowdin, Waterfall, Hotland and the MTT Resort, from the golden flowers to the CORE's door
Download + Undertale
Undertale

The Ruins, Snowdin, Waterfall, Hotland and the CORE, from the golden flowers to the king's castle
Download More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins, Snowdin, Waterfall, Hotland and the MTT Resort are out, the CORE and New Home are next +- [ ] Undertale: the Ruins, Snowdin, Waterfall, Hotland, the MTT Resort and the CORE are out, New Home is next - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index f2ca4c9b..82a5730a 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall, Hotland and the MTT Resort. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. On the second floor, press the switches as the top conveyor belt carries you past them, and in Mettaton's news report, touch each bomb and defuse it while it's in the DEFUSE ZONE. When Muffet turns your SOUL purple, it keeps to three strings: **Up** and **Down** hop between them. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange makes you smell of oranges (and blue water's piranhas bite then), and purple soap slides you on and smells of lemons. When your SOUL turns yellow, **OK** shoots. At the MTT Resort, the desk rents you a room and the hotel's doors want room service. For now the game ends at the door of the CORE. +Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall, Hotland, the MTT Resort and the CORE. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. On the second floor, press the switches as the top conveyor belt carries you past them, and in Mettaton's news report, touch each bomb and defuse it while it's in the DEFUSE ZONE. When Muffet turns your SOUL purple, it keeps to three strings: **Up** and **Down** hop between them. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange makes you smell of oranges (and blue water's piranhas bite then), and purple soap slides you on and smells of lemons. When your SOUL turns yellow, **OK** shoots. At the MTT Resort, the desk rents you a room and the hotel's doors want room service. On the CORE's laser bridge, walk while the power is off and freeze when it comes back on. Mettaton EX's show is won on its ratings: Boast, Pose, a Heel Turn and his brand's food raise them. For now the game ends at the elevator up to the king's castle.
diff --git a/games/undertale/README.md b/games/undertale/README.md index 1d1bd507..98b085da 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins, Snowdin, Waterfall, all of Hotland and the MTT Resort, from the bed of golden flowers to the door of the CORE. The rest of the Underground is on the way. + The Ruins, Snowdin, Waterfall, all of Hotland, the MTT Resort and the CORE, from the bed of golden flowers to the elevator up to the king's castle. New Home is on the way.

@@ -30,7 +30,8 @@ * **Hotland's second floor:** Sans's hot dog stand and Heats Flamesman, the invisible path to the Art Club's room, the Stained Apron, the conveyor belt puzzle and its three switches, the vent puzzle, the Bad Opinion Zone, the Royal Guards, and Mettaton's news report, where everything is a bomb and the clock is running. * **Hotland's third floor:** the spiders' bake sale, the vent islands and their two shooting puzzles (the Diamond Boys, and Alphys asking you to watch anime), the conveyor belts past the laser drones, the spider entrance and Muffet's sticky lair, Mettaton's musical and the trapdoor to his tile puzzle against the clock, and the crossroads with the Nice Cream guy and Heats Flamesman, by the stairs up to the MTT Resort. * **The MTT Resort:** Sans out front, and dinner with him in the restaurant, where he tells you about the door in the forest; the lobby and its fountain, the MTT-Brand Burger Emporium with Burgerpants behind the counter, Bratty and Catty's shop up the alley, a night in the hotel, room service down the hall (and a dog behind door 4), and the door to the CORE. -* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane, Pyrope and the Royal Guards in Hotland, the news report's bombs, defused in the DEFUSE ZONE, Muffet, whose purple SOUL keeps to her strings, and Mettaton, worn down by the yellow SOUL's shots. +* **The CORE:** two black shapes backing away inside, its broken elevator, Madjick's ambush, the switch whose lasers Alphys gets backwards, Knight Knight north of the crossroads, the laser bridge where Alphys cuts the power (and it keeps coming back), and the Core Branch: the sage's path and its shooting puzzle, the warrior's path and its three fights, or a force field that a patient one just waits out. Then The End, Mettaton's last show, Alphys's confession in the last hallway, and the elevator up to the castle. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane, Pyrope and the Royal Guards in Hotland, the news report's bombs, defused in the DEFUSE ZONE, Muffet, whose purple SOUL keeps to her strings, and Mettaton, worn down by the yellow SOUL's shots; Final Froggit, Whimsalot, Astigmatism, Madjick and Knight Knight in the CORE, and Mettaton EX, whose show is won on its ratings. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -143,6 +144,14 @@ Dinner with Sans
Dinner with Sans at the MTT Resort Bratty and Catty's shop
Bratty and Catty's shop, up the alley + + The CORE's laser bridge
The laser bridge: freeze when the power's on + Knight Knight
Knight Knight, before her lullaby + + + The sage's path
The sage's path, two shots + Mettaton EX
Mettaton EX: keep the ratings up + ## How to play @@ -155,7 +164,7 @@ Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bo In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. The Tem Shop is the one shop that buys what you carry. When Undyne turns your SOUL green, it can't move: turn its shield with the arrows to block her spears. She can't be spared: run, and she'll chase you. -In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. On the second floor, the top conveyor belt carries you past three switches: press them one after another as you go by. In the vent puzzle, every panel you land on turns all the vents around, and the one at the top turns them back. To spare the Royal Guards, clean 02's armor, catch its green stars, then whisper to 01. In the news report, touch a bomb to face it, and Defuse it (or FIGHT it) while it's in the DEFUSE ZONE. On the third floor, ride the belt past the blue drones without a step. When Muffet turns your SOUL purple, it keeps to three strings: Up and Down hop between them, Left and Right move along. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange ones make you smell of oranges (and the blue water's piranhas bite then), purple soap slides you on and makes you smell of lemons, and blue next to yellow is electrified. After it, ACT and press the yellow button: your SOUL turns yellow, and OK shoots. At the MTT Resort, the front desk rents you a room for the night, and the hotel's doors down the hall want room service: bring what they ask for. +In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. On the second floor, the top conveyor belt carries you past three switches: press them one after another as you go by. In the vent puzzle, every panel you land on turns all the vents around, and the one at the top turns them back. To spare the Royal Guards, clean 02's armor, catch its green stars, then whisper to 01. In the news report, touch a bomb to face it, and Defuse it (or FIGHT it) while it's in the DEFUSE ZONE. On the third floor, ride the belt past the blue drones without a step. When Muffet turns your SOUL purple, it keeps to three strings: Up and Down hop between them, Left and Right move along. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange ones make you smell of oranges (and the blue water's piranhas bite then), purple soap slides you on and makes you smell of lemons, and blue next to yellow is electrified. After it, ACT and press the yellow button: your SOUL turns yellow, and OK shoots. At the MTT Resort, the front desk rents you a room for the night, and the hotel's doors down the hall want room service: bring what they ask for. On the CORE's laser bridge, walk while the power is off and freeze the moment it flickers back on. Against Mettaton, turn him round first; then it's a show: Boast, Pose, a Heel Turn, his brand's food and every hit you take make the ratings climb, and once they're high enough the show is over. Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. @@ -172,7 +181,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **The Ruins, Snowdin, Waterfall, Hotland and the MTT Resort, for now:** the door of the CORE ends the game, on a screen that says the rest of the Underground is still to come. The CORE and New Home come next, one at a time. +* **Everything up to New Home, for now:** the elevator up to the king's castle ends the game, on a screen that says the rest is still to come. New Home comes next. * **No music or sound:** the calculator has no speaker. * **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. diff --git a/games/undertale/docs/bridge.png b/games/undertale/docs/bridge.png new file mode 100644 index 0000000000000000000000000000000000000000..f14bc0416b55b74b396c1f7506f19b242462a53b GIT binary patch literal 3397 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 literal 0 HcmV?d00001 diff --git a/games/undertale/docs/knight.png b/games/undertale/docs/knight.png new file mode 100644 index 0000000000000000000000000000000000000000..fb0ef7df5ce619cc657fd712442cf79823b54fda GIT binary patch literal 2843 zcmah~c{~(a8=l78Ok^}9WQ~lX7-D3P?6OuSYh*3UOqemYaVN=Dx>`^e+{$*dHA%)Y z##$*xn(SFd3|)+|4P*VLZr^vm@2~It@&4Z5InR0D=bYbj&XeM3Zz&{jSO5S32w7X1 zIRgND&hTjR%A;G;ijhGAdmry3uhJef^l4N88Q+DL1$E=V z5YJ+Y_SkuqFFMJyTKbs-rOIoFaqX*t>Jy`|W<~XsD=T z6bpnLytgk^X2NGcv~Ph$tL=$YLX#1ZS9(Vc@=_UGf9%7$I*<6(N<(33h`+0e|$Ar-@Eq+VK7IkRJ2XOk7@S%CGNBB-fc}w!9Yzy zw=e2k4uLPR{cMU$u-j|4;`T8;9sb|rkH$ah(Xbdl^>)I8?vD~keoad)RH z48NFqazxf~9q5=C_9PCqqsR=$$NE@zFPmaW+A&X}XvvSnA8_3Z5__$5m*oNt!!juf z?5x&>8NKGIXJ*^sO9|;(p(yf!+eAJRw}>Q6F0en& zJ$h~Xe8>hKpKf2-k}Ksl>?t5Fk=A&6;BGbN2&eg)!xW<;?)VCf6t&vt+pJif{qFEB zCE@q?_6PIjzlfLGoAq36@ka7j#xV&CHqIhb?{2QN zf^4dCa{bVVxaRO*@@yq(wM$n&tI1mJB8F6`NRK}jXPygNJ#iQo$qVTV%dQhwhWJP| zp6q*n6uN%fHFBt;hxXjWTY6sPPPrOuqoh@sX?!mD#d=4TzL__q8(Ftpst;o%ujFdSgcz8}@{g?Bf z9N2q!1ip}Ug6qOv|Dfex-v{)?O5y0?T0yEN>MNvH)D2>Xh`-27Bbucm^ zt&xl*;37fxf^f3X^jLA!g_*W~k20^Yp`}qdPFXsM4O>Jq9^O>RFE0 zu2W=>pY72#IE=3$_ui81dyw-^gXcIXg5UGlY_DHAc`r9|3u#~JdeWs=6~Zf=bCZ$` zjF}s(1%H}0^bmQWwwwBUH-n8e6in%itJFG5ZB?q$%j!R4Oi-`bj0gq#Avz)VxpEhn zc&{4sSVnqQf~!Bhc^7&-vVWDzN=d<>WH%!1Wn1+kK8UTA)9`m+7dkq2P0%S5JI3W0 zn+iDCgL`iro3i3s`Xvpo%CRzbzFl0+!IkF(clEztx~W{|TTNOMh$@+XE}7ZTGqM{k zKGveTe$4Kz>X+hdKjpre5#{9`bj5r+LM4~U#}sPE;DX^6C6Ui!l> zVO=jw8Nbn(>kHX+vUWA`z-c&WFXUX$0^j9;wi!K-Yayu|o-&&Jxx#I$uRWa*%^u%{ NVr_13R$=OW<6o)5Mfm^# literal 0 HcmV?d00001 diff --git a/games/undertale/docs/mttex.png b/games/undertale/docs/mttex.png new file mode 100644 index 0000000000000000000000000000000000000000..17561aa7e6a5ed2ae624aca0b994655f936352c6 GIT binary patch literal 3132 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 OB;)Do=d#Wzp$PyzeC_f8 literal 0 HcmV?d00001 diff --git a/games/undertale/src/battle.c b/games/undertale/src/battle.c index 9bfa73b9..b9a1fdfa 100644 --- a/games/undertale/src/battle.c +++ b/games/undertale/src/battle.c @@ -444,6 +444,11 @@ void battle_update(uint32_t keys, uint32_t pressed) { if (bt.result == BR_SCRIPTED) battle_end(BR_SCRIPTED); return; } + /* (a monster's ways may end it at once: Mettaton, his switch flipped or his show a hit) */ + if (bt.result == BR_SCRIPTED) { + battle_end(BR_SCRIPTED); + return; + } for (int i = 0; i < bt.nmon; i++) { Monster *m = &bt.mon[i]; if (m->hurt) m->hurt--; diff --git a/games/undertale/src/battle.h b/games/undertale/src/battle.h index 12a65843..4d4b0eb1 100644 --- a/games/undertale/src/battle.h +++ b/games/undertale/src/battle.h @@ -102,6 +102,7 @@ typedef struct { int16_t angle; /* drawn turned (1/256 turns) */ uint8_t owner; /* the monster that made it */ } Bullet; +#define SPR_RECT 0xFFFF /* a bullet drawn as its box: a plain rectangle (white unless coloured) */ enum { BF_NOCLIP = 1, BF_ONCE = 2, BF_HIDDEN = 4, BF_BOX = 8, BF_FRONT = 16, BF_HARMLESS = 32, BF_SHIELD = 64, BF_PLAYER = 128 }; /* (shield: the green SOUL's blocks it; player: the yellow SOUL's own shot) */ diff --git a/games/undertale/src/bullets.c b/games/undertale/src/bullets.c index 4e21c697..dbc272fd 100644 --- a/games/undertale/src/bullets.c +++ b/games/undertale/src/bullets.c @@ -175,6 +175,10 @@ void bullets_draw(void) { if (b->kind == BK_NONE || (b->flags & BF_HIDDEN)) continue; uint16_t color = b->color == BC_BLUE ? rgb565(0x14A9FF) : b->color == BC_ORANGE ? rgb565(0xFCA600) : b->color == BC_GREEN ? rgb565(0x00C000) : b->color == BC_YELLOW ? rgb565(0xFFFF00) : 0; + if (b->spr == SPR_RECT) { + gfx_rect(b->x / FX - b->w / 2, b->y / FX - b->h / 2, b->w, b->h, color ? color : C_WHITE, b->alpha); + continue; + } if (b->spr == SPR_BONE) { gfx_bone(b->x / FX, b->y / FX, b->w, b->h, color ? color : C_WHITE, b->alpha); continue; diff --git a/games/undertale/src/core.c b/games/undertale/src/core.c new file mode 100644 index 00000000..313f8736 --- /dev/null +++ b/games/undertale/src/core.c @@ -0,0 +1,559 @@ +/* The CORE: its approach (two black shapes back away inside), the lobby and its broken elevator, the fire pit, the + * doorway's ambush (Madjick), the switch and its lasers (Alphys gets their order backwards), the crossroads and the + * room north (Knight Knight), the laser bridge (Alphys cuts the power; it keeps coming back), the Core Branch: the + * sage's path (its puzzle), the warrior's path (three fights, a switch) and the force field east that a patient one + * waits out; The End's bridge, the Core End, and Mettaton's last show; the hallway, Alphys, and the elevator up to + * the king's castle, where the game now ends. (As the Undertale Wiki describes them; what they say is ours, in + * short.) */ +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "gfx.h" +#include "hotland.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "res.h" +#include "save.h" +#include "shoot.h" +#include "snowdin.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } +static Obj *thing(int x, int y, int w, int h, int event, int name, int arg) { + Obj *o = obj_trigger(x, y, w, h, event, name); + if (o) o->flags = OF_TALK | OF_SOLID, o->arg = (int16_t)arg; + return o; +} +static Obj *touch(int x, int y, int w, int h, int event, int arg) { + Obj *o = obj_trigger(x, y, w, h, event, ACTOR_TRIGGER); + if (o) o->arg = (int16_t)arg; + return o; +} +static Obj *npc(int name, uint16_t spr, int x, int y) { + const uint16_t s[4] = {spr, spr, spr, spr}; + Obj *o = obj_npc(name, s, x, y, DIR_DOWN, 0); + if (o) o->flags &= (uint16_t)~OF_SOLID; + return o; +} +static void field(int x, int y, int w, int h) { + Obj *o = obj_trigger(x, y, w, h, EV_NONE, ACTOR_FIELD); + if (o) o->flags = OF_SOLID; +} +static void fields_down(void) { + for (Obj *o = obj_find(ACTOR_FIELD); o; o = obj_find(ACTOR_FIELD)) gone(o); +} + +/* Alphys's calls, one bit each (F_CORE_CALLS, then F_CORE_CALLS2) */ +enum { CALL_IN, CALL_LOBBY, CALL_LIFT, CALL_PIT, CALL_AMBUSH, CALL_SWITCH, CALL_ORDER, CALL_EAST, CALL_NORTH, + CALL_KNIGHT, CALL_POWER, CALL_STOP, CALL_BRANCH }; +static bool called(int n) { return flag(n < 8 ? F_CORE_CALLS : F_CORE_CALLS2) >> (n & 7) & 1; } +static void set_called(int n) { + int f = n < 8 ? F_CORE_CALLS : F_CORE_CALLS2; + set_flag(f, flag(f) | 1 << (n & 7)); +} +static void call_at(int x, int y, int w, int h, int n) { + if (!called(n)) touch(x, y, w, h, EV_CORE_CALL, n); +} + +/* ---------------------------------------------------------------- the lasers */ +/* the ambush's: three beams that sweep across from the bridge once the switch is pressed (blue, blue, orange); + * the bridge's: its emitters, and the wall of blue ones, while the power is on */ +#define AMB_Y0 1339 +#define AMB_Y1 1486 +#define BR_Y0 1300 +#define BR_Y1 1402 +static int sweep_t = -1; /* frames since the switch, -1 none */ +static int power_t; /* the bridge's power: on while power_t % CYCLE < ON */ +#define CYCLE 130 +#define ON 55 +static bool power_on; +static int laser_cool; +static const int16_t bridge_lasers[][2] = { /* x, blue */ + {1267, 1}, {1309, 1}, {1348, 0}, {1388, 1}, {1428, 0}, {1469, 1}, +}; +#define WALL_X0 1504 +#define WALL_X1 2000 +#define WALL_STEP 19 + +static int sweep_x(int i) { return 560 - (sweep_t - i * 60) * 3; } +static bool sweep_blue(int i) { return i < 2; } +static bool laser_hits(int x, bool blue, int y0, int y1) { + if (pl.x + 3 > x + 1 || pl.x + 17 < x - 1 || pl.y + 29 < y0 || pl.y + 20 > y1) return false; + return blue ? pl.moving : !pl.moving; +} +static void laser_hit(void) { + if (laser_cool || event_running()) return; + event_start(EV_CORE_LASER, NULL); +} +static void lasers_watch(void) { + if (laser_cool) laser_cool--; + if (g_room == ROOM_CORE_WEST && sweep_t >= 0) { + sweep_t++; + for (int i = 0; i < 3; i++) { + int x = sweep_x(i); + if (x < 560 && x > 100 && laser_hits(x, sweep_blue(i), AMB_Y0, AMB_Y1)) laser_hit(); + } + if (sweep_x(2) < 90) { + sweep_t = -1; + if (!called(CALL_ORDER)) event_start(EV_CORE_ORDER, NULL); + } + } + if (g_room == ROOM_CORE_BRIDGE && flag(F_CORE_POWER) == 1 && called(CALL_STOP)) { + power_t++; + power_on = power_t % CYCLE < ON; + if (power_on && power_t % CYCLE > 6) { /* (a moment to stop when it comes back on) */ + for (unsigned i = 0; i < sizeof bridge_lasers / sizeof bridge_lasers[0]; i++) + if (laser_hits(bridge_lasers[i][0], bridge_lasers[i][1], BR_Y0, BR_Y1)) laser_hit(); + for (int x = WALL_X0; x <= WALL_X1; x += WALL_STEP) + if (laser_hits(x, true, BR_Y0, BR_Y1)) laser_hit(); + } + } else power_on = false; +} +static void draw_beam(int x, int y0, int y1, bool blue) { + uint16_t c = blue ? rgb565(0x14A9FF) : rgb565(0xFCA600); + gfx_rect(x - 1 - cam_x, y0 - cam_y, 3, y1 - y0, c, (g_frame / 2) % 2 ? 255 : 200); +} + +void core_draw(void) { + if (world_room_info()->area != AREA_CORE) return; + for (int i = 0; i < MAX_OBJS; i++) { + const Obj *o = &objs[i]; + if (o->kind == OBJ_NONE || o->name != ACTOR_FIELD) continue; + uint16_t c = (g_frame / 3) % 2 ? rgb565(0x60FFFF) : rgb565(0x20A0C0); + gfx_rect(o->x - cam_x, o->y - cam_y, o->bw, o->bh, c, 200); + } + if (g_room == ROOM_CORE_WEST && sweep_t >= 0) + for (int i = 0; i < 3; i++) { + int x = sweep_x(i); + if (x < 560 && x > 100) draw_beam(x, AMB_Y0, AMB_Y1, sweep_blue(i)); + } + /* the bridge's: on until Alphys cuts the power, then on and off */ + bool on = g_room == ROOM_CORE_BRIDGE && (!flag(F_CORE_POWER) || power_on); + /* (the power flickers a moment before it comes back) */ + bool flicker = g_room == ROOM_CORE_BRIDGE && flag(F_CORE_POWER) == 1 && called(CALL_STOP) && power_t % CYCLE >= CYCLE - 20 && + g_frame % 4 < 2; + if (on || flicker) { + for (unsigned i = 0; i < sizeof bridge_lasers / sizeof bridge_lasers[0]; i++) + draw_beam(bridge_lasers[i][0], BR_Y0, BR_Y1, bridge_lasers[i][1]); + for (int x = WALL_X0; x <= WALL_X1; x += WALL_STEP) draw_beam(x, BR_Y0, BR_Y1, true); + } +} + +/* the force field by the east bridge: the sign says patience (a minute in front of it, and it's gone) */ +static int field_wait; +void core_update(void) { + if (world_room_info()->area != AREA_CORE) return; + lasers_watch(); + if (g_room == ROOM_CORE_BRANCH && !flag(F_CORE_FIELD)) { + if (pl.x > 2440 && pl.x < 2530 && pl.y > 830 && pl.y < 880) { + if (++field_wait >= 60 * 30) { + set_flag(F_CORE_FIELD, 1); + fields_down(); + event_start(EV_CORE_FIELD, NULL); + } + } else field_wait = 0; + } +} + +/* ---------------------------------------------------------------- the rooms */ +void core_setup(int room, int from) { + (void)from; + if (room < ROOM_CORE_APPROACH || room > ROOM_CORE_HALL) return; + sweep_t = -1, power_t = 0, field_wait = 0; + switch (room) { + case ROOM_CORE_APPROACH: + if (!flag(F_CORE_IN)) { + npc(ACTOR_ITEM, SPR_SAUSAGE, 316, 2560); + npc(ACTOR_ANY, SPR_SAUSAGE, 326, 2528); + touch(290, 2650, 60, 20, EV_CORE_APPROACH, 0); + } + break; + case ROOM_CORE_LOBBY: + call_at(298, 2080, 42, 30, CALL_LOBBY); + thing(296, 1986, 48, 54, EV_CORE_LIFT, ACTOR_DOOR, 0); + obj_sign(186, 1980, 28, 26, "* (A screen: CORE, the source of\n the Underground's power.)"); + break; + case ROOM_CORE_PIT: + call_at(440, 1800, 79, 20, CALL_PIT); + obj_sign(440, 1740, 79, 22, "* (A pit of fire, far below.\n You can feel its heat.)"); + break; + case ROOM_CORE_DOORWAY: + if (!flag(F_CORE_MADJICK)) touch(100, 1770, 120, 16, EV_CORE_MADJICK, 0); + break; + case ROOM_CORE_WEST: + call_at(119, 1420, 159, 16, CALL_AMBUSH); + thing(250, 1310, 20, 50, EV_CORE_SWITCH, ACTOR_SWITCH, 0); + if (!flag(F_CORE_SWITCH)) field(282, 1350, 6, 40); + call_at(740, 1339, 12, 66, CALL_EAST); + call_at(880, 1339, 12, 66, CALL_NORTH); + if (!flag(F_CORE_KNIGHT)) touch(766, 1150, 147, 14, EV_CORE_KNIGHT, 0); + break; + case ROOM_CORE_BRIDGE: + if (flag(F_CORE_POWER) < 2) { + call_at(1232, 1358, 12, 44, CALL_POWER); + call_at(1490, 1358, 12, 44, CALL_STOP); + touch(2062, 1300, 58, 12, EV_CORE_POWER, 0); + } + break; + case ROOM_CORE_BRANCH: + if (!called(CALL_BRANCH)) touch(2060, 1118, 58, 12, EV_CORE_BRANCH, 0); /* (on the way in) */ + obj_save(2080, 1100, "* (The air smells of ozone. It\n fills you with determination.)"); + obj_sign(2010, 1056, 20, 44, "* (North: the warrior's path.)\n* (West: the sage's path.)\n* (Any path leads to The End.)"); + obj_sign(2150, 1056, 20, 44, "* (East... The End.)"); + obj_sign(1670, 816, 22, 44, "* (Solve this puzzle, and The\n End will open.)"); + obj_sign(1770, 312, 22, 44, "* (Why not stop for a snack?)"); + obj_sign(2170, 816, 22, 44, "* (Get lost... and stay lost.)"); + obj_sign(2010, 576, 22, 44, "* (Cross the room to the north,\n and The End will open.)"); + obj_sign(2330, 816, 22, 44, "* (East! This way is The End.)"); + obj_sign(2470, 816, 22, 44, "* (I can't fight. I can't think.)\n* (But with patience, I'll make\n my way through.)"); + thing(1452, 834, 34, 28, EV_CORE_SAGE, ACTOR_ITEM, 0); + thing(1758, 372, 22, 20, EV_CORE_TRASH, ACTOR_ITEM, 0); + thing(2398, 372, 22, 20, EV_CORE_TRASH, ACTOR_ITEM, 1); + if (!flag(F_CORE_FIELD)) field(2524, 856, 10, 48); + break; + case ROOM_CORE_WARRIOR: + for (int i = flag(F_CORE_WARRIOR); i < 3; i++) touch(2220 + i * 130, 160, 10, 40, EV_CORE_WARRIOR, i); + thing(2660, 128, 20, 30, EV_CORE_WSWITCH, ACTOR_SWITCH, 0); + break; + case ROOM_CORE_END: + set_flag(F_CORE_END, 1); + obj_save(3478, 866, "* (The elevator to the king's\n castle must be past this door.)\n* (You're filled with determination.)"); + thing(3418, 806, 40, 50, EV_CORE_LIFT, ACTOR_DOOR, 1); + break; + case ROOM_CORE_MTT: + if (!flag(F_CORE_MTT)) { + Obj *m = npc(ACTOR_METTATON, SPR_MTT_OW, 3360, 500); + if (m) m->flags |= OF_ANIM, m->anim_speed = 5; + touch(3342, 620, 36, 12, EV_CORE_MTT, 0); + field(3342, 336, 36, 8); /* (the way out north: shut until the show's over) */ + } else { + Obj *m = npc(ACTOR_METTATON, flag(F_CORE_MTT) == 2 ? SPR_MTT_OW : SPR_MTTEX_OW, 3360, 500); + (void)m; + obj_sign(3346, 480, 30, 26, flag(F_CORE_MTT) == 2 ? "* (It's completely trashed.)" : "* (Mettaton. Out of power.)"); + } + break; + case ROOM_CORE_HALL: + if (!flag(F_CORE_HALL)) { + static const uint16_t s[4] = {SPR_ALPHYS_OW, SPR_ALPHYS_OW, SPR_ALPHYS_OW, SPR_ALPHYS_OW}; + Obj *a = obj_npc(ACTOR_ALPHYS, s, 3370, 230, DIR_UP, 0); + if (a) a->flags &= (uint16_t)~OF_SOLID; + touch(4220, 118, 10, 42, EV_CORE_HALL, 0); + } + thing(4278, 92, 46, 28, EV_CORE_LIFT, ACTOR_DOOR, 2); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +static int ev_approach(Ev *c) { + Obj *a = obj_get(ACTOR_ITEM), *b = obj_get(ACTOR_ANY); + EV_BEGIN; + if (c->self) gone(c->self); + /* two shapes, black, back away up the path, and in */ + WALK_TO(b, b->x, 2290, 2); + WALK(a, a->x, 2300, 2); + gone(obj_get(ACTOR_ITEM)), gone(obj_get(ACTOR_ANY)); + set_flag(F_CORE_IN, 1); + SAY(FACE_ALPHYS, "* Ring...|* Th-that's the CORE! We made it!|* ...wait. Were those\n monsters? Nobody's supposed\n to be in there...|* It's fine. Probably.\n* I'll guide you through!"); + EV_END; +} + +static int ev_call(Ev *c) { + EV_BEGIN; + if (c->self) c->v[0] = c->self->arg; + if (c->self) gone(c->self); + if (called(c->v[0])) return 1; + set_called(c->v[0]); + switch (c->v[0]) { + case CALL_LOBBY: + SAY(FACE_ALPHYS, "* Ring...|* The elevator in the middle\n goes right to the castle!\n* Head for it!"); + break; + case CALL_PIT: + SAY(FACE_ALPHYS, "* Ring...|* A pit of fire? That's not on\n my map...|* Um. Go back, and try the\n other way."); + break; + case CALL_AMBUSH: + SAY(FACE_ALPHYS, "* Ring...|* See that switch? It turns off\n the force field...|* ...but it sets off lasers!\n* Orange, orange, then blue.\n* You'll be fine!"); + break; + case CALL_ORDER: + SAY(FACE_ALPHYS, "* Ring...|* Wait. That was blue, blue,\n then orange.|* I had it backwards.\n* S-sorry..."); + break; + case CALL_EAST: + SAY(FACE_ALPHYS, "* Ring...|* East! Keep going east!"); + break; + case CALL_NORTH: + SAY(FACE_ALPHYS, "* Ring...|* N-no, wait! North!\n* Go north first!"); + break; + case CALL_POWER: + SAY(FACE_ALPHYS, "* Ring...|* Those lasers... I can't turn\n them off.|* So I'll cut the power to the\n whole room!"); + if (!flag(F_CORE_POWER)) set_flag(F_CORE_POWER, 1); + NARRATE("* (The lights go out.)"); + field(1228, 1356, 6, 48); /* (back west: a field on its own battery) */ + break; + case CALL_STOP: + SAY(FACE_ALPHYS, "* Ring...|* Stop! STOP MOVING!\n* The power's back on!|* I can't keep it off!\n* Move while it's off, and\n freeze when it's on!"); + break; + } + EV_END; +} + +/* the bridge crossed: its power stays off */ +static int ev_power(Ev *c) { + EV_BEGIN; + if (c->self) gone(c->self); + set_flag(F_CORE_POWER, 2); + fields_down(); + SAY(FACE_ALPHYS, "* Ring...|* Phew... you made it.\n* Everything's under control!\n* Totally!"); + EV_END; +} + +static int ev_laser(Ev *c) { + EV_BEGIN; + g_exclaim = 20; + WAIT(15); + BATTLE(FORM_LASERS); + laser_cool = 50; + EV_END; +} + +static int ev_switch(Ev *c) { + EV_BEGIN; + if (flag(F_CORE_SWITCH)) { + NARRATE("* (The switch is already pressed.)"); + return 1; + } + NARRATE("* (You press the switch.)\n* (The force field shuts off.)"); + set_flag(F_CORE_SWITCH, 1); + fields_down(); + sweep_t = 0; + EV_END; +} + +static int ev_madjick(Ev *c) { + EV_BEGIN; + if (c->self) gone(c->self); + SAY(FACE_ALPHYS, "* Ring...|* Watch out! Something's\n coming at you!"); + g_exclaim = 20; + WAIT(15); + BATTLE(FORM_MADJICK); + set_flag(F_CORE_MADJICK, bt.mon[0].killed ? 2 : 1); + SAY(FACE_ALPHYS, "* Ring...|* Are you okay?|* Why are there so many\n monsters in here...?"); + EV_END; +} + +static int ev_knight(Ev *c) { + EV_BEGIN; + if (c->self) gone(c->self); + g_exclaim = 20; + WAIT(15); + BATTLE(FORM_KNIGHT); + set_flag(F_CORE_KNIGHT, bt.mon[0].killed ? 2 : 1); + set_called(CALL_KNIGHT); + SAY(FACE_ALPHYS, "* Ring...|* Are you all right?!\n* I'm so sorry...|* Okay. East now. Really."); + EV_END; +} + +static int ev_branch(Ev *c) { + EV_BEGIN; + if (c->self) gone(c->self); + set_called(CALL_BRANCH); + SAY(FACE_ALPHYS, "* Ring...|* Okay, so, from here you go...\n* ...um...|* ...|* I don't know. My map's all\n wrong.|* I'm sorry. I'll... stop\n calling."); + EV_END; +} + +static int ev_sage(Ev *c) { + EV_BEGIN; + if (flag(F_CORE_SAGE)) { + NARRATE("* (The puzzle is solved.)"); + return 1; + } + shoot_open(SHOOT_SAGE); + WAIT_UNTIL(g_mode == MODE_WORLD); + if (shoot_result()) { + set_flag(F_CORE_SAGE, 1); + set_flag(F_CORE_FIELD, 1); + fields_down(); /* (the force field east, in this same room) */ + NARRATE("* (Far to the east, something\n hums, then goes quiet.)"); + } + EV_END; +} + +static int ev_warrior(Ev *c) { + static const uint8_t forms[3] = {FORM_WHIM_FROG, FORM_KNIGHT_MADJICK, FORM_FROG_ASTIG_WHIM}; + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (c->self) gone(c->self); + if (flag(F_CORE_WARRIOR) > c->v[0]) return 1; + g_exclaim = 20; + WAIT(15); + BATTLE(forms[c->v[0]]); + if (battle_result() != BR_FLED && battle_result() != BR_DIED) set_flag(F_CORE_WARRIOR, c->v[0] + 1); + EV_END; +} + +static int ev_wswitch(Ev *c) { + EV_BEGIN; + if (flag(F_CORE_WARRIOR) >= 4) { + NARRATE("* (The switch is already flipped.)"); + return 1; + } + NARRATE("* (You flip the switch.)\n* (Far away, something hums,\n then goes quiet.)"); + set_flag(F_CORE_WARRIOR, 4); + set_flag(F_CORE_FIELD, 1); + EV_END; +} + +static int ev_field(Ev *c) { + EV_BEGIN; + NARRATE("* (The force field flickers...\n and fades away.)"); + EV_END; +} + +static int ev_trash(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (flag(c->v[0] ? F_CORE_TRASH2 : F_CORE_TRASH1)) { + NARRATE("* (It's an empty trash can.)"); + return 1; + } + if (c->v[0]) { + NARRATE("* (There's 100G inside the\n trash can.)"); + sv.gold = (uint16_t)min_i(sv.gold + 100, 9999); + set_flag(F_CORE_TRASH2, 1); + } else if (item_add(ITEM_GLAMBURGER)) { + NARRATE("* (There's a Glamburger in the\n trash can. You take it.)"); + set_flag(F_CORE_TRASH1, 1); + } else NARRATE("* (There's a Glamburger inside.)\n* (You're carrying too much.)"); + EV_END; +} + +/* the elevators: the lobby's (it works once the far side's reached), the Core End's back to it; the last one, up + * to the castle */ +static int ev_lift(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (c->v[0] == 2) { + if (!flag(F_CORE_HALL)) { + NARRATE("* (The elevator to the king's\n castle.)"); + return 1; + } + NARRATE("* (Take the elevator up to the\n castle?)@Yes@No"); + if (CHOICE() == 1) return 1; + set_flag(F_CORE_DONE, 1); + sv.room = (int16_t)g_room, sv.x = 4285, sv.y = 125; + save_write_auto(); + menu_end_open(); + return 1; + } + if (c->v[0] == 0 && !flag(F_CORE_END)) { + NARRATE("* (The elevator doesn't work.)"); + if (!called(CALL_LIFT)) { + set_called(CALL_LIFT); + SAY(FACE_ALPHYS, "* Ring...|* It's not working?\n* B-but my map says...|* Okay. Um. Go left!\n* No, right! ...Either!"); + } + return 1; + } + NARRATE(c->v[0] ? "* (Take the elevator down to\n the lobby?)@Yes@No" : "* (Take the elevator to the\n Core End?)@Yes@No"); + if (CHOICE() == 1) return 1; + if (c->v[0]) FADE_TO(ROOM_CORE_LOBBY, 310, 2045, DIR_DOWN); + else FADE_TO(ROOM_CORE_END, 3428, 862, DIR_DOWN); + EV_END; +} + +/* Mettaton's room: the door locks; he tells Frisk the truth; his box, his switch, his new body */ +static int ev_mtt(Ev *c) { + Obj *m = obj_get(ACTOR_METTATON); + EV_BEGIN; + if (c->self) gone(c->self); + NARRATE("* (The door locks behind you.)"); + WAIT_UNTIL(cam_pan(3200, 420, 4)); /* (up to him) */ + text_set_top(0); + NARRATE("* OH YES. IT WAS ME.\n* THE MONSTERS. THE ELEVATOR.\n THE MAZE.|* AND ALL THOSE PUZZLES?\n* ALPHYS PLANNED THEM, SO SHE\n COULD SAVE YOU FROM ME.|* SHE WANTED TO BE YOUR HERO.\n* BUT I GOT BORED, DARLING."); + NARRATE("* WITH YOUR SOUL, I'LL CROSS THE\n BARRIER...|* ...AND BE A STAR UP THERE!\n* NOW... FOR THE GRAND FINALE!"); + text_set_top(-1); + BATTLE(FORM_MTT_BOX); + if (battle_result() == BR_DIED) { + cam_free(); + return 1; + } + text_set_top(0); + g_shake = 10; + NARRATE("* (Smoke pours out of Mettaton.)\n* OHHH MY...|* YOU FLIPPED MY SWITCH?\n* SO YOU'RE DYING TO SEE MY NEW\n BODY. HOW RUDE...|* LUCKY FOR YOU, I'VE BEEN\n ACHING TO SHOW IT OFF!"); + text_set_top(-1); + mttex_reset(); + BATTLE(FORM_MTT_EX); + if (battle_result() == BR_DIED) { + cam_free(); + return 1; + } + text_set_top(0); + m = obj_get(ACTOR_METTATON); + if (bt.mon[0].killed) { + set_flag(F_CORE_MTT, 2); + NARRATE("* (Mettaton falls back into his\n box. It's completely trashed.)"); + } else { + set_flag(F_CORE_MTT, 1); + m->spr[0] = m->spr[1] = m->spr[2] = m->spr[3] = SPR_MTTEX_OW, m->flags &= (uint16_t)~OF_ANIM; + NARRATE("* THESE RATINGS... THE BEST\n I'VE EVER HAD!|* AND... WE'RE GETTING CALLS?\n* GO AHEAD, CALLER!"); + NARRATE("* (A small, sad voice.)\n* oh... hi mettaton...|* i just... wanted to say...\n* your show is all i watch...|* please don't leave..."); + NARRATE("* MORE CALLS... ALL SAYING THE\n SAME THING.|* ...SO THE UNDERGROUND NEEDS\n ME MORE THAN I THOUGHT.|* THEN I'LL STAY.\n* AND YOU, DARLING...\n YOU CAN STAND UP TO ASGORE."); + NARRATE("* ...THOUGH THIS BODY EATS\n BATTERY LIKE...|* (Mettaton runs out of power.)"); + } + text_set_top(-1); + fields_down(); + /* Alphys, in through the door */ + { + static const uint16_t s[4] = {SPR_ALPHYS_OW, SPR_ALPHYS_OW, SPR_ALPHYS_OW, SPR_ALPHYS_OW}; + Obj *a = obj_npc(ACTOR_ALPHYS, s, 3360, 760, DIR_UP, 0); + if (a) a->flags &= (uint16_t)~OF_SOLID; + } + WALK(obj_get(ACTOR_ALPHYS), 3360, 600, 3); + if (flag(F_CORE_MTT) == 2) SAY(FACE_ALPHYS, "* I-I got the door open...\n* ...oh.|* Mettaton...|* ...let's just go."); + else SAY(FACE_ALPHYS, "* I-I got the door open! Are\n you okay?! Is Mettaton...|* ...he's just out of power.\n* Oh, thank goodness...|* Come on. The elevator's\n this way."); + gone(obj_get(ACTOR_ALPHYS)); + cam_free(); + EV_END; +} + +/* the hallway: by the elevator, Alphys tells Frisk the truth about the way home */ +static int ev_hall(Ev *c) { + Obj *a = obj_get(ACTOR_ALPHYS); + EV_BEGIN; + if (c->self) gone(c->self); + WALK(a, pl.x - 30, pl.y + 10, 3); + SAY(FACE_ALPHYS, "* W-wait! Before you go...|* There's something I didn't\n tell you.|* To leave, you need a human\n SOUL, and a monster's..."); + SAY(FACE_ALPHYS, "* ASGORE's the only one who\n can help you through...|* ...but he needs your SOUL\n for the barrier.|* To go home, you'll have to\n fight him. And..."); + SAY(FACE_ALPHYS, "* ...one of you won't come\n back.|* I'm sorry. I made it all up,\n so I'd seem like a hero.|* Good luck. You deserve a\n better friend than me."); + set_flag(F_CORE_HALL, 1); + a = obj_get(ACTOR_ALPHYS); + WALK(a, 3360, a->y, 3); + gone(obj_get(ACTOR_ALPHYS)); + EV_END; +} + +int core_event(Ev *c) { + switch (c->id) { + case EV_CORE_APPROACH: return ev_approach(c); + case EV_CORE_CALL: return ev_call(c); + case EV_CORE_ORDER: + if (!c->at) c->v[0] = CALL_ORDER; + return ev_call(c); + case EV_CORE_BRANCH: return ev_branch(c); + case EV_CORE_POWER: return ev_power(c); + case EV_CORE_LASER: return ev_laser(c); + case EV_CORE_SWITCH: return ev_switch(c); + case EV_CORE_MADJICK: return ev_madjick(c); + case EV_CORE_KNIGHT: return ev_knight(c); + case EV_CORE_SAGE: return ev_sage(c); + case EV_CORE_WARRIOR: return ev_warrior(c); + case EV_CORE_WSWITCH: return ev_wswitch(c); + case EV_CORE_FIELD: return ev_field(c); + case EV_CORE_TRASH: return ev_trash(c); + case EV_CORE_LIFT: return ev_lift(c); + case EV_CORE_MTT: return ev_mtt(c); + case EV_CORE_HALL: return ev_hall(c); + } + return -1; +} diff --git a/games/undertale/src/coremon.c b/games/undertale/src/coremon.c new file mode 100644 index 00000000..beee6b4d --- /dev/null +++ b/games/undertale/src/coremon.c @@ -0,0 +1,762 @@ +/* The CORE's monsters: Final Froggit, Whimsalot, Astigmatism, Madjick and Knight Knight (stats, ACTs and how they're + * spared from the Undertale Wiki's records of the game); then Mettaton's last show: his box until Frisk turns him + * round and flips his switch, and Mettaton EX with the show's ratings. Their words are short ones of our own. */ +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "items.h" +#include "monsters.h" +#include "res.h" +#include "world.h" + +/* ---------------------------------------------------------------- Final Froggit: mystify it, or two compliments + * or threats (a compliment lowers its ATTACK, a threat its DEFENSE) */ +static void act_ffroggit(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { + snprintf(t, (size_t)cap, "* You compliment Final Froggit.\n* It understood. Its ATTACK dropped."); + m->at = (int16_t)max_i(1, m->at - 2); + if (++m->state >= 2) m->spare = true; + } else if (act == 1) { + snprintf(t, (size_t)cap, "* You threaten Final Froggit.\n* It understood. Its DEFENSE dropped."); + m->df = (int16_t)(m->df - 2); + if (++m->state >= 2) m->spare = true; + } else if (!m->state2) { + snprintf(t, (size_t)cap, "* You do something mysterious.\n* Final Froggit sees it still has\n much to learn."); + m->state2 = 1, m->spare = true; + } else snprintf(t, (size_t)cap, "* You do something mysterious.\n* Nothing happens."); +} +static const char *talk_ffroggit(Battle *b, Monster *m) { + (void)b; + if (m->state2) return "(A thoughtful\ncroak.)"; + static const char *const lines[] = {"Skip, hop.", "Ribbit.", "Creak.", "Woof."}; + return lines[rnd_n(4)]; +} +static int attack_ffroggit(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_FROG_FLIES : ATK_FROG_JUMP; } + +/* ---------------------------------------------------------------- Whimsalot: console it, or pray twice */ +static void act_whimsalot(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { + snprintf(t, (size_t)cap, "* You tell Whimsalot what it's\n doing is all right."); + m->spare = true, m->state = 1; + } else if (act == 1) { + snprintf(t, (size_t)cap, "* You leap at Whimsalot,\n threateningly."); + m->state = 2; + } else { + snprintf(t, (size_t)cap, "* You kneel and pray for safety.\n* Whimsalot remembers its\n conscience."); + if (++m->state2 >= 2) m->spare = true; + m->state = 3; + } +} +static const char *talk_whimsalot(Battle *b, Monster *m) { + (void)b; + if (m->state == 1) return "I'm at\npeace now."; + if (m->state == 2) return "You don't\nscare me."; + if (m->state == 3) return "There's\nstill hope."; + static const char *const lines[] = {"My mind is\nmade up.", "Not this\ntime.", "No\nregrets.", "(Shine.)"}; + return lines[rnd_n(4)]; +} +static int attack_whimsalot(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_WHIM_RING : ATK_WHIM_COLS; } + +/* ---------------------------------------------------------------- Astigmatism: it says what it wants (pick on it, or + * don't); do as it says, and it's done. Challenging it makes the others with it want to stop */ +static void act_astig(Battle *b, Monster *m, int act, char *t, int cap) { + if (act == 2) { + bool others = false; + for (int i = 0; i < b->nmon; i++) { + Monster *o = &b->mon[i]; + if (o != m && o->alive && !o->gone) o->spare = true, others = true; + } + snprintf(t, (size_t)cap, others ? "* You stand up to Astigmatism.\n* The others are impressed." : "* You stand up to Astigmatism."); + m->state2 = 3; + return; + } + snprintf(t, (size_t)cap, act == 0 ? "* You pick on Astigmatism." : "* You don't pick on Astigmatism."); + if (m->state && act == m->state - 1) m->spare = true, m->state2 = 1; + else if (m->state) m->state2 = 2; +} +static const char *talk_astig(Battle *b, Monster *m) { + (void)b; + if (m->state2 == 1) return m->state == 1 ? "That's\nright!" : "Finally.\nSomeone\ngets it."; + if (m->state2 == 2) return m->state == 1 ? "Scared?" : "How\ndare you."; + if (m->state2 == 3) return "You dare\ndefy me?"; + if (!m->state) { + /* what it wants: 1 to be picked on, 2 not */ + m->state = (int16_t)(1 + rnd_n(2)); + return m->state == 1 ? "... Pick\non me." : "... Don't\npick on me."; + } + static const char *const lines[] = {"You've seen\nenough.", "Take a last\nlook.", "...", "... ..."}; + return lines[rnd_n(4)]; +} +static const char *flavor_astig(Battle *b, Monster *m) { + (void)b; + if (m->state2) m->state2 = 0; + return m->spare ? "* Astigmatism doesn't care about\n fighting anymore." : NULL; +} +static int attack_astig(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_LOOX_BOUNCE : ATK_LOOX_WORM; } + +/* ---------------------------------------------------------------- Madjick: clear your mind, then talk; or raise the + * Stick, a magic wand to it. Talking first dizzies Frisk (DEFENSE down) */ +static void act_madjick(Battle *b, Monster *m, int act, char *t, int cap) { + if (act == 0) { + if (m->state) { + snprintf(t, (size_t)cap, "* Madjick talks over you, to\n itself. It seems satisfied."); + m->spare = true; + } else { + snprintf(t, (size_t)cap, "* Madjick talks over you.\n* Its gibberish dizzies you...\n* Your DEFENSE drops."); + b->df_loss += 1; + } + } else if (act == 1) { + snprintf(t, (size_t)cap, "* You glare at its orbs.\n* They waver a little."); + if (++m->state2 >= 2) m->spare = true; + } else { + snprintf(t, (size_t)cap, "* You think of pollen and sunshine.\n* Your DEFENSE goes up."); + m->state = 1, b->df_loss -= 1; + } +} +static bool item_madjick(Battle *b, Monster *m, int item, char *t, int cap) { + (void)b; + if (item != ITEM_STICK) return false; + snprintf(t, (size_t)cap, "* You raise the Stick.\n* Madjick takes it for a wand!"); + m->spare = true, m->state = 2; + return true; +} +static const char *talk_madjick(Battle *b, Monster *m) { + (void)b; + if (m->state == 2) return "Ah! A fellow\nwizard!"; + static const char *const lines[] = {"Abracadabra.", "Alakazam!", "Hocus\npocus.", "Please and\nthank you."}; + return lines[rnd_n(4)]; +} +static const char *flavor_madjick(Battle *b, Monster *m) { + (void)b; + return m->spare ? "* Madjick believes you're a\n fellow wizard." : NULL; +} +static int attack_madjick(Battle *b, Monster *m) { (void)b, (void)m; return rnd_n(2) ? ATK_MADJICK_CHASER : ATK_MADJICK_CORNER; } + +/* ---------------------------------------------------------------- Knight Knight: three lullabies put her to sleep */ +static void act_knight(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b; + if (act == 0) { + if (m->spare) snprintf(t, (size_t)cap, "* You talk to Knight Knight.\n* She hums in her sleep..."); + else snprintf(t, (size_t)cap, "* You ask Knight Knight about her\n day. There's no answer."); + m->state2++; + } else { + m->state++; + if (m->state == 1) snprintf(t, (size_t)cap, "* You sing an old lullaby.\n* Knight Knight looks sleepy..."); + else if (m->state == 2) snprintf(t, (size_t)cap, "* You keep singing.\n* Her eyes start to close..."); + else if (m->state == 3) snprintf(t, (size_t)cap, "* You keep singing.\n* Knight Knight falls asleep."), m->spare = true; + else snprintf(t, (size_t)cap, "* You keep singing.\n* Nothing happens."); + } +} +static const char *talk_knight(Battle *b, Monster *m) { + (void)b; + if (m->spare) return "Zzzz..."; + if (m->state2 == 3) return "...... ......\n...... It's\nokay."; + static const char *const lines[] = {"Good knight.", "Farewell.", "Adieu.", "Close your\neyes...", "Goodbye."}; + return lines[rnd_n(5)]; +} +static const char *flavor_knight(Battle *b, Monster *m) { + (void)b; + return m->spare ? "* Knight Knight is snoring." : NULL; +} +static int attack_knight(Battle *b, Monster *m) { + (void)b; + if (m->spare) return ATK_NONE; + static const uint8_t pick[3] = {ATK_KNIGHT_MOON, ATK_KNIGHT_SUN, ATK_KNIGHT_STAR}; + return pick[rnd_n(3)]; +} + +/* ---------------------------------------------------------------- Mettaton, in his box: no hurting him. Alphys calls + * about the switch on his back; Turn (a mirror behind him!) and Frisk flips it */ +static void act_mttbox(Battle *b, Monster *m, int act, char *t, int cap) { + (void)m; + if (act == 0 && b->state[0]) { + snprintf(t, (size_t)cap, "* You point behind Mettaton:\n \"Look! A mirror!\"|* He turns to look...\n* ...and you flip his switch!"); + b->state[1] = 1; + } else snprintf(t, (size_t)cap, "* You look for a way around him.\n* There isn't one."); +} +static const char *talk_mttbox(Battle *b, Monster *m) { + (void)m; + if (b->state[1]) return "A MIRROR?\nWHERE?\n...OH NO."; + if (b->turn <= 1) return "NO MORE\nGAMES,\nDARLING."; + static const char *const lines[] = {"YOUR SOUL\nWILL MAKE ME\nA STAR!", "THE CROWD\nIS WAITING!", "STAY STILL,\nWON'T YOU?"}; + return lines[rnd_n(3)]; +} +static const char *flavor_mttbox(Battle *b, Monster *m) { + (void)m; + if (b->turn == 2 && !b->state[0]) { + b->state[0] = 1; + return "* Alphys calls: \"The switch on his\n back! Get him to turn around!\""; + } + return b->state[0] ? "* Mettaton blocks the way.\n* (Try turning him around.)" : "* Mettaton blocks the way."; +} +static bool hit_mttbox(Battle *b, Monster *m, int dmg) { + (void)b, (void)dmg; + m->dmg_shown = 0; + return true; +} +static int attack_mttbox(Battle *b, Monster *m) { (void)m; return b->state[1] ? -1 : ATK_MTT_BOXES; } +static bool ends_mttbox(Battle *b, Monster *m) { + (void)m; + if (b->state[1]) b->result = BR_SCRIPTED; /* (the battle ends here: the switch is flipped) */ + return false; +} + +/* ---------------------------------------------------------------- Mettaton EX: the show's ratings. They start at 4000 + * and fall while Frisk dawdles; Boast raises them through his turn (unless he lands a hit), Pose by how hurt Frisk + * is, Heel Turn has the crowd cheering every hit on Frisk; his brand's food, the Stick, a fight, a hit taken add + * more (Junk Food takes some away). Past 12000 (10000 once his legs are gone) his show is a hit, and it ends. His + * arms fall off after turn 11, his legs after turn 17; from then on, ratings count double */ +enum { EXR_START = 4000, EXR_MAX = 30000 }; +static struct { + int ratings, boast, heel, hits, fights, brand, glam, stick, steak, body, last_hp, popup, popup_t, done; + uint32_t last_frame; +} ex; +void mttex_reset(void) { + ex.ratings = EXR_START, ex.boast = ex.heel = ex.hits = ex.fights = ex.brand = ex.glam = ex.stick = ex.steak = 0; + ex.body = 0, ex.last_hp = sv.hp, ex.popup = 0, ex.popup_t = 0, ex.done = 0; +} +int mttex_ratings(void) { return ex.ratings; } +static int ex_target(void) { return ex.body >= 2 ? 10000 : 12000; } +static void ratings_add(int n) { + if (n > 0 && ex.body >= 2) n *= 2; + ex.ratings = min_i(EXR_MAX, max_i(0, ex.ratings + n)); + ex.popup = n, ex.popup_t = 45; +} +/* a hit on Frisk in his turn: Boast lost (the crowd's disappointed), or the crowd cheers */ +static void ex_hit_taken(void) { + if (ex.boast) { + ex.boast = 0; + ratings_add(-100); + return; + } + static const int16_t violence[5] = {50, 25, 20, 15, 10}; + ratings_add(violence[min_i(ex.hits, 4)] + (ex.heel ? 100 : 0)); + ex.hits++; +} +static void act_mttex(Battle *b, Monster *m, int act, char *t, int cap) { + (void)b, (void)m; + if (act == 0) { + snprintf(t, (size_t)cap, "* You say you won't get hit even\n once.\n* Ratings climb through his turn."); + ex.boast = 1; + } else if (act == 1) { + int n = sv.hp == 1 ? 600 : sv.hp < 4 ? 500 : sv.hp * 4 < sv.maxhp ? 400 : sv.hp * 2 < sv.maxhp ? 250 : sv.hp * 3 < sv.maxhp * 2 ? 150 : 100; + const char *how = n >= 500 ? "With the last of your strength,\n you pose. The audience screams." : + n >= 400 ? "Wounded as you are, you pose.\n The audience gasps." : + n >= 150 ? "Hurt as you are, you pose.\n The audience applauds." : "You pose dramatically.\n The audience nods."; + snprintf(t, (size_t)cap, "* %s", how); + ratings_add(n); + } else { + snprintf(t, (size_t)cap, "* You turn and sneer at the\n audience.\n* They want to see you hit!"); + ex.heel = 1; + } +} +static bool item_mttex(Battle *b, Monster *m, int item, char *t, int cap) { + (void)b, (void)m, (void)t, (void)cap; + switch (item) { + case ITEM_STICK: + snprintf(t, (size_t)cap, "* You throw the Stick.\n* Mettaton catches it in his teeth,\n and winks."); + ratings_add(ex.stick++ ? 1 : 700); + return true; + case ITEM_MYSTERY_KEY: + snprintf(t, (size_t)cap, "* You hold up the Mystery Key.\n* Mettaton pretends not to see it."); + return true; + case ITEM_GLAMBURGER: ratings_add(ex.glam++ ? 300 : 500); break; + case ITEM_STARFAIT: case ITEM_LEGENDARY_HERO: ratings_add(ex.brand++ ? 200 : 300); break; + case ITEM_STEAK: ratings_add(700); break; + case ITEM_JUNK_FOOD: ratings_add(-50); break; + } + return false; /* (eaten as ever) */ +} +static bool hit_mttex(Battle *b, Monster *m, int dmg) { + (void)b, (void)m, (void)dmg; + static const int16_t action[5] = {300, 200, 150, 100, 50}; + ratings_add(action[min_i(ex.fights++, 4)]); + return false; +} +static const char *talk_mttex(Battle *b, Monster *m) { + (void)m; + if (ex.ratings >= ex_target()) { + ex.done = 1; + return "OOH! THESE\nRATINGS!\nTHEY'RE\nINCREDIBLE!"; + } + if (b->turn == 11) return "OH MY! MY\nARMS!\nSTILL... THE\nSHOW GOES ON!"; + if (b->turn == 17) return "MY LEGS?!\n...FINE.\nTHE FINALE,\nTHEN!"; + if (b->turn == 10) return "A UNION\nBREAK,\nDARLING.\nENJOY IT."; + if (b->turn <= 1) return "LIGHTS!\nCAMERA!\nAND...\nGO!"; + static const char *const lines[] = {"ISN'T THIS\nBODY JUST\nDIVINE?", "SMILE FOR\nTHE CAMERA!", "THE CROWD\nLOVES YOU...\nFOR NOW!", + "RATINGS!\nRATINGS!", "LET'S MAKE\nTHIS\nBEAUTIFUL!", "ONE MORE\nTIME, WITH\nFEELING!"}; + return lines[rnd_n(6)]; +} +static const char *flavor_mttex(Battle *b, Monster *m) { + (void)m; + /* his limbs, after their turns */ + if (b->turn == 12 && ex.body < 1) ex.body = 1; + if (b->turn == 18 && ex.body < 2) ex.body = 2; + if (b->turn <= 1) return "* Mettaton EX makes his premiere!"; + if (ex.body == 2) return "* Mettaton's legs are gone.\n* He keeps on smiling."; + if (ex.body == 1) return "* Mettaton's arms are gone.\n* The show must go on."; + static const char *const lines[] = {"* Mettaton strikes a pose.", "* The audience watches, breathless.", + "* Smells like a premiere.", "* The spotlight is on you both."}; + return lines[rnd_n(4)]; +} +/* his turns, as the wiki lists them, shortened; from turn 18, the last two in turn */ +static int attack_mttex(Battle *b, Monster *m) { + (void)m; + static const uint8_t seq[] = {ATK_EX_LEGS, ATK_EX_BOMBS, ATK_EX_ARMS, ATK_EX_HEART, ATK_EX_BOTS, ATK_EX_DISCO, + ATK_EX_DISCO, ATK_EX_PAIRS, ATK_EX_PAIRS, ATK_EX_BREAK, ATK_EX_HEART, ATK_EX_REWIND, + ATK_EX_REWIND, ATK_EX_LEGS, ATK_EX_BOTS, ATK_EX_PAIRS, ATK_EX_HEART, ATK_EX_LASER, + ATK_EX_BOTS}; + int n = (int)sizeof seq; + int i = b->turn - 1; + if (i >= n) i = n - 2 + (i - n) % 2; + ex.last_hp = sv.hp; + return seq[max_i(0, i)]; +} +static bool ends_mttex(Battle *b, Monster *m) { + (void)m; + if (ex.done) b->result = BR_SCRIPTED; + return false; +} +static void draw_mttex(Battle *b, Monster *m, int x, int y) { + (void)b; + /* (the ratings fall while Frisk takes their time) */ + if (g_frame != ex.last_frame) { + ex.last_frame = g_frame; + if (battle_ui() != BUI_NONE && g_frame % 6 == 0) ex.ratings = max_i(0, ex.ratings - 1); + if (ex.popup_t) ex.popup_t--; + } + uint16_t s = m->hurt ? SPR_MTTEX_HURT : ex.body == 2 ? SPR_MTTEX_TOP : ex.body == 1 ? SPR_MTTEX_ARMLESS : SPR_MTTEX_B; + int fr = m->hurt || ex.body ? 0 : (int)(g_frame / 3); + if (m->dust) { + int a = 255 - m->dust * 4; + if (a > 0) gfx_sprite_color(s, 0, x, y, 0, C_WHITE, (uint8_t)a); + return; + } + gfx_sprite(s, fr, x, y - (s == SPR_MTTEX_TOP ? 50 : 0), 0, m->fade ? (uint8_t)max_i(0, 128 - m->fade * 4) : 255); + char r[32]; + snprintf(r, sizeof r, "RATINGS %d", ex.ratings); + gfx_text(FONT_SMALL, 226, 6, r, C_WHITE, 255); + if (ex.popup_t) { + snprintf(r, sizeof r, "%+d", ex.popup); + gfx_text(FONT_SMALL, 262, 16, r, ex.popup < 0 ? C_RED : C_YELLOW, 255); + } +} + +/* ---------------------------------------------------------------- the definitions */ +static const MonDef core_defs[MON_COUNT - MON_HT_COUNT] = { + [MON_FFROGGIT - MON_HT_COUNT] = { + .name = "Final Froggit", .spare_gold = 50, .hp = 100, .at = 8, .df = 0, .exp = 120, .gold = 80, + .spr_idle = SPR_FFROGGIT_B, .spr_hurt = SPR_FFROGGIT_HURT, .idle_speed = 6, .check = "Its future looks brighter and brighter.", + .acts = {"Compliment", "Threaten", "Mystify"}, .nacts = 3, + .neutral = {"* Final Froggit knows exactly why it's here.", "* Smells like mustard seed.", + "* Final Froggit hops up and down, ominously."}, + .low_hp = "* Final Froggit stands its ground.", .spareable = "* Final Froggit seems reluctant to fight you.", + .act = act_ffroggit, .talk = talk_ffroggit, .attack = attack_ffroggit}, + [MON_WHIMSALOT - MON_HT_COUNT] = { + .name = "Whimsalot", .spare_gold = 50, .hp = 95, .at = 8, .df = 0, .exp = 110, .gold = 80, + .spr_idle = SPR_WHIMSALOT_B, .spr_hurt = SPR_WHIMSALOT_HURT, .idle_speed = 6, .check = "It finally stopped worrying.", + .acts = {"Console", "Terrorize", "Pray"}, .nacts = 3, + .neutral = {"* Whimsalot spins its weapon around.", "* Smells like nightshade and bleach.", + "* Whimsalot flutters silently.", "* Whimsalot locks eyes with you."}, + .low_hp = "* Whimsalot's flying stutters.", .spareable = "* Whimsalot doesn't want to fight anymore.", + .act = act_whimsalot, .talk = talk_whimsalot, .attack = attack_whimsalot}, + [MON_ASTIG - MON_HT_COUNT] = { + .name = "Astigmatism", .spare_gold = 50, .hp = 120, .at = 8, .df = 0, .exp = 130, .gold = 85, + .spr_idle = SPR_ASTIG_B, .spr_hurt = SPR_ASTIG_HURT, .idle_speed = 8, .check = "This bully ALWAYS gets its way.", + .acts = {"Pick On", "Don't Pick", "Challenge"}, .nacts = 3, + .neutral = {"* Astigmatism gazes through your SOUL.", "* Astigmatism clicks its teeth.", "* Smells like glasses.", + "* Astigmatism gives you a hypnotic glare."}, + .low_hp = "* Astigmatism is watering.", + .act = act_astig, .talk = talk_astig, .attack = attack_astig, .flavor = flavor_astig}, + [MON_MADJICK - MON_HT_COUNT] = { + .name = "Madjick", .spare_gold = 60, .hp = 190, .at = 8, .df = 0, .exp = 150, .gold = 120, + .spr_idle = SPR_MADJICK_B, .spr_hurt = SPR_MADJICK_HURT, .idle_speed = 6, .check = "This magic mercenary only says magic words.", + .acts = {"Talk", "Stare", "Clear Mind"}, .nacts = 3, + .neutral = {"* Madjick does a mysterious jig.", "* Madjick flaunts its orbs.", "* Smells like magic.", + "* Madjick whispers arcane swear words."}, + .act = act_madjick, .talk = talk_madjick, .attack = attack_madjick, .flavor = flavor_madjick, .on_item = item_madjick}, + [MON_KNIGHT - MON_HT_COUNT] = { + .name = "Knight Knight", .spare_gold = 70, .hp = 230, .at = 8, .df = 2, .exp = 180, .gold = 150, .dy = 6, + .spr_idle = SPR_KNIGHT_B, .spr_hurt = SPR_KNIGHT_HURT, .idle_speed = 8, .check = "This mercenary swings the Good Morningstar.", + .acts = {"Talk", "Sing"}, .nacts = 2, + .neutral = {"* Knight Knight smashes her morningstar.", "* Knight Knight breathes deeply.", "* Smells like stardust.", + "* Knight Knight watches quietly."}, + .act = act_knight, .talk = talk_knight, .attack = attack_knight, .flavor = flavor_knight}, + [MON_MTT_BOX - MON_HT_COUNT] = { + .name = "Mettaton", .hp = 9999, .at = 6, .df = 0, .spr_idle = SPR_MTT_B, .spr_hurt = SPR_MTT_B, .idle_speed = 6, + .check = "His metal body makes him invincible.", .acts = {"Turn"}, .nacts = 1, + .flags = MF_BOSS | MF_NOT_KILLABLE, .act = act_mttbox, .talk = talk_mttbox, .attack = attack_mttbox, + .flavor = flavor_mttbox, .on_hit = hit_mttbox, .ends = ends_mttbox}, + [MON_MTT_EX - MON_HT_COUNT] = { + .name = "Mettaton EX", .hp = 1600, .at = 6, .df = 1, .exp = 800, .gold = 0, .spr_idle = SPR_MTTEX_B, + .spr_hurt = SPR_MTTEX_HURT, .idle_speed = 3, .check = "His weak point is his heart-shaped core.", + .acts = {"Boast", "Pose", "Heel Turn"}, .nacts = 3, + .flags = MF_BOSS, .act = act_mttex, .talk = talk_mttex, .attack = attack_mttex, .flavor = flavor_mttex, + .on_hit = hit_mttex, .draw = draw_mttex, .ends = ends_mttex, .on_item = item_mttex}, +}; +const MonDef *core_mon_def(int id) { return &core_defs[id - MON_HT_COUNT]; } + +static const Form core_forms[FORM_COUNT - FORM_HT_COUNT] = { + [FORM_ASTIG - FORM_HT_COUNT] = {{MON_ASTIG}, 1, "* Astigmatism draws near."}, + [FORM_WHIM_FROG - FORM_HT_COUNT] = {{MON_WHIMSALOT, MON_FFROGGIT}, 2, "* Whimsalot and Final Froggit appear."}, + [FORM_WHIM_ASTIG - FORM_HT_COUNT] = {{MON_WHIMSALOT, MON_ASTIG}, 2, "* Whimsalot and Astigmatism appear."}, + [FORM_FROG_ASTIG - FORM_HT_COUNT] = {{MON_FFROGGIT, MON_ASTIG}, 2, "* Final Froggit and Astigmatism appear."}, + [FORM_KNIGHT_MADJICK - FORM_HT_COUNT] = {{MON_KNIGHT, MON_MADJICK}, 2, "* Mercenaries step out of the\n shadows."}, + [FORM_FROG_ASTIG_WHIM - FORM_HT_COUNT] = {{MON_FFROGGIT, MON_ASTIG, MON_WHIMSALOT}, 3, "* What a nightmare!"}, + [FORM_KNIGHT - FORM_HT_COUNT] = {{MON_KNIGHT}, 1, "* Knight Knight blocks the way!"}, + [FORM_MADJICK - FORM_HT_COUNT] = {{MON_MADJICK}, 1, "* Madjick pops out of its hat!"}, + [FORM_MTT_BOX - FORM_HT_COUNT] = {{MON_MTT_BOX}, 1, "* Mettaton attacks!"}, + [FORM_MTT_EX - FORM_HT_COUNT] = {{MON_MTT_EX}, 1, "* Mettaton EX makes his premiere!"}, +}; +const Form *core_form(int form) { return &core_forms[form - FORM_HT_COUNT]; } + +/* random encounters in the Core Branch (Astigmatism alone just once) */ +int core_encounter(int room) { + if (room != ROOM_CORE_BRANCH) return -1; + static const uint8_t pool[] = {FORM_WHIM_FROG, FORM_WHIM_ASTIG, FORM_FROG_ASTIG, FORM_KNIGHT_MADJICK, + FORM_FROG_ASTIG_WHIM, FORM_KNIGHT, FORM_MADJICK}; + if (!flag(F_CORE_ASTIG)) { + set_flag(F_CORE_ASTIG, 1); + return FORM_ASTIG; + } + return pool[rnd_n((int)sizeof pool)]; +} + +/* ---------------------------------------------------------------- the attacks */ +static int bx0(void) { return bt.x0 + 3; } +static int bx1(void) { return bt.x1 - 3; } +static int by0(void) { return bt.y0 + 3; } +static int by1(void) { return bt.y1 - 3; } +#define P(v) ((v) * FX) +static Bullet *shot(uint16_t spr, int x, int y, int vx, int vy) { + Bullet *b = bullet_new(spr, P(x), P(y), vx, vy); + if (b) b->owner = (uint8_t)bt.atk_owner; + return b; +} +static Bullet *rect(int x, int y, int w, int h, int vx, int vy) { + Bullet *b = shot(SPR_RECT, x, y, vx, vy); + if (b) b->flags |= BF_BOX, b->w = (int16_t)w, b->h = (int16_t)h; + return b; +} +/* a shot of the yellow SOUL's within (rx, ry) of b: it's spent */ +static bool shot_at(const Bullet *b, int rx, int ry) { + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *s = &bullets[i]; + if (s->kind == BK_NONE || !(s->flags & BF_PLAYER)) continue; + if (abs_i(s->x - b->x) < P(rx) && abs_i(s->y - b->y) < P(ry)) { + s->kind = BK_NONE; + return true; + } + } + return false; +} +static int count_spr(uint16_t spr) { + int n = 0; + for (int i = 0; i < MAX_BULLETS; i++) n += bullets[i].kind != BK_NONE && bullets[i].spr == spr; + return n; +} + +/* Madjick: a chaser orb that leaves crosses behind; a corner orb, where the SOUL heads, firing crosses at it */ +static void atk_madjick_chaser(int t) { + static Bullet *orb; + if (t == 0) { + orb = shot(SPR_ORB, bx1() - 8, by0() + 8, 0, 0); + if (orb) orb->kind = BK_HOMING, orb->a = 3, orb->b = P(2), orb->r = 5; + } + if (orb && orb->kind == BK_HOMING && t % 14 == 7 && t < 150) { + Bullet *c = shot(SPR_STAR, orb->x / FX, orb->y / FX, 0, 0); + if (c) c->r = 3, c->life = 70; + } +} +static void atk_madjick_corner(int t) { + static Bullet *orb; + static int corner; + if (t == 0) corner = 0, orb = shot(SPR_ORB, bx1() - 6, by0() + 6, 0, 0); + if (!orb || orb->spr != SPR_ORB) return; + orb->flags |= BF_HARMLESS; + /* (it moves to the corner of the way the SOUL went last) */ + int c = soul_x() < board_cx() ? (soul_y() < board_cy() ? 1 : 2) : (soul_y() < board_cy() ? 0 : 3); + if (t % 30 == 0) corner = c; + int tx = corner == 1 || corner == 2 ? bx0() + 6 : bx1() - 6, ty = corner == 0 || corner == 1 ? by0() + 6 : by1() - 6; + orb->x += (P(tx) - orb->x) / 6, orb->y += (P(ty) - orb->y) / 6; + if (t % 12 == 6 && t < 150) { + int dx = soul_x() - orb->x / FX, dy = soul_y() - orb->y / FX, d = abs_i(dx) + abs_i(dy); + if (d) { + Bullet *s = shot(SPR_STAR, orb->x / FX, orb->y / FX, dx * P(3) / d, dy * P(3) / d); + if (s) s->r = 3; + } + } +} +/* Knight Knight: the Moon's meteors from the top left; the Sun's flares, spiralling out; her morningstars' slams */ +static void atk_knight_moon(int t) { + if (t % 6 == 0 && t < 150) { + int x = bx0() - 30 + rnd_n(bx1() - bx0()), y = by0() - 10; + Bullet *s = shot(SPR_STAR, x, y, P(2), P(3)); + if (s) s->r = 3; + } +} +static void atk_knight_sun(int t) { + static Bullet *sun; + if (t == 0) { + sun = shot(SPR_ORB, board_cx(), board_cy(), 0, 0); + if (sun) sun->r = 5; + } + if (t % 4 == 0 && t < 150) { + int a = t * 5; + for (int k = 0; k < 2; k++) { + int aa = a + k * 128; + Bullet *s = shot(SPR_STAR, board_cx(), board_cy(), gfx_cos(aa) * 2 * FX / 1024, gfx_sin(aa) * 2 * FX / 1024); + if (s) s->r = 3; + } + } + if (sun && t == 150) sun->kind = BK_NONE; +} +static void atk_knight_star(int t) { + /* five heads, at the top or the bottom; they shine a moment, then slam across */ + static int8_t top; + int k = t % 50; + if (k == 0 && t < 150) { + top = (int8_t)rnd_n(2); + int w = bx1() - bx0(); + for (int i = 0; i < 5; i++) { + if (i == rnd_n(5)) continue; + Bullet *s = shot(SPR_ORB, bx0() + w * (2 * i + 1) / 10, top ? by0() + 4 : by1() - 4, 0, 0); + if (s) s->r = 6, s->flags |= BF_HARMLESS, s->life = 50, s->alpha = 120; + } + } + if (k == 15) + for (int i = 0; i < MAX_BULLETS; i++) + if (bullets[i].kind != BK_NONE && bullets[i].spr == SPR_ORB && (bullets[i].flags & BF_HARMLESS)) + bullets[i].flags &= (uint8_t)~BF_HARMLESS, bullets[i].alpha = 255, bullets[i].vy = top ? P(5) : -P(5); +} + +/* Mettaton EX's. Shooting what he sends (the yellow SOUL) is good for the ratings, as his heart is */ +static void ex_watch_hits(void) { + if (sv.hp < ex.last_hp) ex_hit_taken(); + ex.last_hp = sv.hp; + if (ex.boast && bt.atk_t % 9 == 0) ratings_add(3 + (bt.atk_t / 9) % 2); +} +static void atk_ex_legs(int t) { + if (t % 26 == 0 && t < 130) { + bool left = rnd_n(2); + int y = by0() + 6 + rnd_n(by1() - by0() - 12); + Bullet *w = rect(left ? bx0() + 2 : bx1() - 2, y, 3, 9, 0, 0); /* the warning: where it comes */ + if (w) w->flags |= BF_HARMLESS, w->color = BC_ORANGE, w->life = 12; + Bullet *l = shot(SPR_EXLEG, left ? bx0() - 40 : bx1() + 40, y, left ? P(7) : -P(7), 0); + if (l) l->flags |= BF_BOX, l->w = 56, l->h = 7, l->angle = 64, l->c = 12, l->kind = BK_SCRIPT; + } + /* (after their warning, they kick across) */ + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *l = &bullets[i]; + if (l->kind != BK_SCRIPT || l->spr != SPR_EXLEG) continue; + if (l->c) l->c--; + else l->x += l->vx; + if (l->x < P(bx0() - 70) || l->x > P(bx1() + 70)) l->kind = BK_NONE; + } +} +/* rows of bombs and blocks; a shot bomb blows up its row and its column; with `rewind`, back up they come */ +static void ex_blast(int x, int y) { + Bullet *h = rect(board_cx(), y, bx1() - bx0(), 6, 0, 0); + if (h) h->life = 8, h->color = BC_WHITE; + Bullet *v = rect(x, board_cy(), 6, by1() - by0(), 0, 0); + if (v) v->life = 8; + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind == BK_NONE || (b->spr != SPR_EXBLOCK && b->spr != SPR_BOMB)) continue; + if (abs_i(b->y / FX - y) < 6 || abs_i(b->x / FX - x) < 6) b->kind = BK_NONE; + } +} +static void ex_rows(int t, bool rewind, int cells) { + int w = bx1() - bx0(), cw = w / cells; + if (t % 34 == 0 && t < (rewind ? 100 : 136)) { + int bomb = rnd_n(cells); + for (int k = 0; k < cells; k++) { + bool is_bomb = rewind ? k == bomb : k != bomb; + Bullet *b = shot(is_bomb ? SPR_BOMB : SPR_EXBLOCK, bx0() + cw * k + cw / 2, by0() - 8, 0, P(1)); + if (b) b->r = 6, b->flags |= BF_NOCLIP, b->kind = BK_SCRIPT, b->vy = P(1); + } + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || (b->spr != SPR_EXBLOCK && b->spr != SPR_BOMB)) continue; + if (rewind && t == 110) b->vy = -P(1); + b->y += b->vy; + if (shot_at(b, 7, 7)) { + ratings_add(20); + b->kind = BK_NONE; + if (b->spr == SPR_BOMB) ex_blast(b->x / FX, b->y / FX); + } + if (b->y > P(by1() + 30) || b->y < P(by0() - 40)) b->kind = BK_NONE; + } +} +/* pairs: a bomb beside a block; only the bomb's blast breaks the block */ +static void atk_ex_pairs(int t) { + int w = bx1() - bx0(); + if (t % 36 == 0 && t < 144) { + int side = rnd_n(2); + for (int k = 0; k < 2; k++) { + Bullet *b = shot(k == side ? SPR_BOMB : SPR_EXBLOCK, bx0() + w / 4 + k * w / 2, by0() - 8, 0, 0); + if (b) b->r = 6, b->flags |= BF_NOCLIP, b->kind = BK_SCRIPT, b->vy = P(1) + P(1) / 4; + } + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || (b->spr != SPR_EXBLOCK && b->spr != SPR_BOMB)) continue; + b->y += b->vy; + if (b->spr == SPR_BOMB && shot_at(b, 7, 7)) { + ratings_add(20); + int x = b->x / FX, y = b->y / FX; + b->kind = BK_NONE; + for (int j = 0; j < MAX_BULLETS; j++) /* its block, beside it */ + if (bullets[j].kind == BK_SCRIPT && bullets[j].spr == SPR_EXBLOCK && abs_i(bullets[j].y / FX - y) < 6) bullets[j].kind = BK_NONE; + Bullet *v = rect(x, board_cy(), 6, by1() - by0(), 0, 0); /* (and its column, up and down) */ + if (v) v->life = 8; + } else if (b->spr == SPR_EXBLOCK) shot_at(b, 7, 7); /* (a block just stops a shot) */ + if (b->y > P(by1() + 30)) b->kind = BK_NONE; + } +} +/* his long arms come down; shooting the box on one sends it back up */ +static void atk_ex_arms(int t) { + if (t % 40 == 0 && t < 120) { + int w = bx1() - bx0(); + for (int k = 0; k < 3; k++) { + int x = bx0() + w * (2 * k + 1) / 6 + (t / 40 % 2 ? 8 : -8); + Bullet *a = rect(x, by0() - 40, 4, 70, 0, 0); + if (!a) continue; + a->kind = BK_SCRIPT, a->vy = P(1), a->flags |= BF_NOCLIP, a->a = 1; + Bullet *box = shot(SPR_EXARM, x, by0() - 5, 0, 0); + if (box) box->kind = BK_SCRIPT, box->vy = P(1), box->flags |= BF_NOCLIP | BF_HARMLESS, box->a = 2, box->b = (int16_t)(a - bullets); + } + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || (b->a != 1 && b->a != 2)) continue; + b->y += b->vy; + if (b->a == 2 && b->vy > 0 && shot_at(b, 7, 8)) { + ratings_add(20); + b->vy = -P(3); + Bullet *arm = &bullets[b->b]; + if (arm->kind == BK_SCRIPT && arm->a == 1) arm->vy = -P(3); + } + if (b->y < P(by0() - 80) || b->y > P(by1() + 60)) b->kind = BK_NONE; + } +} +/* his heart, out of his waist: sparks in a ring, again and again; enough shots at it and his turn is over */ +static Bullet *heart; +static int heart_hp; +static void atk_ex_heart(int t, bool laser) { + if (t == 0) { + heart = shot(SPR_MTTHEART, board_cx(), by0() + 12, laser ? P(2) : P(1), 0); + if (heart) heart->kind = BK_SCRIPT, heart->flags |= BF_HARMLESS | BF_NOCLIP; + heart_hp = laser ? 25 : 20; + } + Bullet *h = heart; + if (!h || h->kind != BK_SCRIPT || h->spr != SPR_MTTHEART) return; + h->x += h->vx; + if (h->x < P(bx0() + 8) || h->x > P(bx1() - 8)) h->vx = -h->vx; + if (h->c) h->c--, h->alpha = h->c % 2 ? 90 : 255; + if (shot_at(h, 9, 8)) heart_hp--, h->c = 6, ratings_add(20); + if (t % 30 == 29) heart_hp--; /* (it runs down by itself, too) */ + if (heart_hp <= 0) { + h->kind = BK_NONE; + bt.atk_len = min_i(bt.atk_len, t + 20); + return; + } + if (!laser && t % 28 == 14) { + for (int k = 0; k < 8; k++) { + int a = k * 32 + t; + Bullet *s = shot(SPR_BOLT, h->x / FX, h->y / FX, gfx_cos(a) * 3 * FX / 2048, gfx_sin(a) * 3 * FX / 2048); + if (s) s->r = 3; + } + } + if (laser && t % 20 == 10) { /* three lines of sparks, at where the SOUL is */ + int dx = soul_x() - h->x / FX, dy = soul_y() - h->y / FX, d = abs_i(dx) + abs_i(dy); + if (d) + for (int k = -1; k <= 1; k++) { + Bullet *s = shot(SPR_BOLT, h->x / FX, h->y / FX, (dx + k * 12) * P(3) / d, dy * P(3) / d); + if (s) s->r = 3; + } + } +} +/* his bots: a swarm coming down; all shot, and his turn is over */ +static void atk_ex_bots(int t) { + if (t == 0) { + int w = bx1() - bx0(); + for (int k = 0; k < 9; k++) { + Bullet *b = shot(SPR_MTTMINI, bx0() + w * (k % 3 * 2 + 1) / 6, by0() - 14 - (k / 3) * 26, 0, 0); + if (b) b->kind = BK_SCRIPT, b->r = 7, b->flags |= BF_NOCLIP, b->vy = P(1) / 2, b->a = (int16_t)rnd_n(256); + } + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_MTTMINI) continue; + b->y += b->vy, b->a = (int16_t)(b->a + 4); + b->x += gfx_sin(b->a) * FX / 1024; + if (shot_at(b, 8, 10)) b->kind = BK_NONE, ratings_add(20); + if (b->y > P(by1() + 20)) b->kind = BK_NONE; + } + if (t > 10 && !count_spr(SPR_MTTMINI)) bt.atk_len = min_i(bt.atk_len, t + 10); +} +/* the disco ball: its beams sweep across the board, blue or white; a shot at the ball turns them */ +static void atk_ex_disco(int t, bool fast) { + static Bullet *ball; + static uint8_t col; + if (t == 0) { + ball = shot(SPR_DISCO, board_cx(), by0() + 8, 0, 0); + if (ball) ball->kind = BK_SCRIPT, ball->flags |= BF_HARMLESS | BF_NOCLIP; + col = BC_BLUE; + } + if (ball && ball->kind == BK_SCRIPT && ball->spr == SPR_DISCO && shot_at(ball, 9, 9)) { + col = col == BC_BLUE ? BC_WHITE : BC_BLUE; + ratings_add(5); + for (int i = 0; i < MAX_BULLETS; i++) + if (bullets[i].kind != BK_NONE && bullets[i].spr == SPR_RECT && bullets[i].a == 3) bullets[i].color = col; + } + int every = fast ? 22 : 34; + if (t > (fast ? 10 : 40) && t % every == 0 && t < 140) { + bool left = (t / every) % 2; + Bullet *b = rect(left ? bx0() : bx1(), board_cy(), 3, by1() - by0(), left ? P(fast ? 3 : 2) : -P(fast ? 3 : 2), 0); + if (b) b->color = col, b->a = 3, b->life = 120; + } +} + +int core_attack_length(int atk) { + switch (atk) { + case ATK_EX_BREAK: return 90; + case ATK_EX_REWIND: return 200; + default: return 165; + } +} + +void core_attack_run(Battle *b, int atk, int t) { + (void)b; + bool ex_atk = atk >= ATK_EX_LEGS; + if (t < 0) { + int w = atk == ATK_EX_BOMBS || atk == ATK_EX_REWIND ? 76 : atk == ATK_EX_PAIRS ? 44 : ex_atk ? 120 : 130; + board_set(w, ex_atk ? 110 : 100); + soul_set_mode(atk == ATK_EX_LEGS || atk == ATK_EX_BREAK || !ex_atk ? SOUL_RED : SOUL_YELLOW); + heart = NULL; + return; + } + if (ex_atk) ex_watch_hits(); + switch (atk) { + case ATK_MADJICK_CHASER: atk_madjick_chaser(t); break; + case ATK_MADJICK_CORNER: atk_madjick_corner(t); break; + case ATK_KNIGHT_MOON: atk_knight_moon(t); break; + case ATK_KNIGHT_SUN: atk_knight_sun(t); break; + case ATK_KNIGHT_STAR: atk_knight_star(t); break; + case ATK_EX_LEGS: atk_ex_legs(t); break; + case ATK_EX_BOMBS: ex_rows(t, false, 4); break; + case ATK_EX_REWIND: ex_rows(t, true, 4); break; + case ATK_EX_ARMS: atk_ex_arms(t); break; + case ATK_EX_HEART: atk_ex_heart(t, false); break; + case ATK_EX_LASER: atk_ex_heart(t, true); break; + case ATK_EX_BOTS: atk_ex_bots(t); break; + case ATK_EX_DISCO: atk_ex_disco(t, ex.hits < 2 && bt.turn >= 7); break; + case ATK_EX_PAIRS: atk_ex_pairs(t); break; + case ATK_EX_BREAK: break; + } +} diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index 7e7f61b6c5707911d8babb045c99d813f30518d1..aa5c826d0253e6bbe892e96a2415adf3193013fc 100644 GIT binary patch delta 113096 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 z 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 U2#^@p;d?{0lb>F1|A(Xfh|~m}l>h($ delta 47465 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 0) return r; r = res_event(c); if (r >= 0) return r; + r = core_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index 521971a4..efa20028 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -54,7 +54,11 @@ enum { EV_BAKESALE3, EV_SHOOT3, EV_HT3_CALL, EV_MUFFET, EV_MUSICAL, EV_TILE, EV_TILES3, EV_HEATS3, EV_HT3_ELEVATOR, EV_NICECREAM3, /* resort.c */ - EV_RES_SANS, EV_RES_SHOP, EV_RES_DOOR, EV_RES_DESK, EV_RES_CORE, + EV_RES_SANS, EV_RES_SHOP, EV_RES_DOOR, EV_RES_DESK, + /* core.c */ + EV_CORE_APPROACH, EV_CORE_CALL, EV_CORE_ORDER, EV_CORE_BRANCH, EV_CORE_POWER, EV_CORE_LASER, EV_CORE_SWITCH, + EV_CORE_MADJICK, EV_CORE_KNIGHT, EV_CORE_SAGE, EV_CORE_WARRIOR, EV_CORE_WSWITCH, EV_CORE_FIELD, EV_CORE_TRASH, + EV_CORE_LIFT, EV_CORE_MTT, EV_CORE_HALL, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index fd3f3c39..331b36df 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -161,7 +161,23 @@ enum { F_RES_BUN, F_RES_ROOM, /* the hotel's room: 1 paid for, 2 slept in */ F_RES_DOG, /* the Hot Dog slid under door 4 (for a Hush Puppy) */ - F_RES_CORE, /* the CORE's door reached (where the game now ends) */ + F_CORE_IN, /* the CORE's approach: the black shapes seen backing away inside */ + F_CORE_CALLS, /* Alphys's calls in the CORE, a bit each (core.c's CALL_*), then the rest */ + F_CORE_CALLS2, + F_CORE_MADJICK, /* the doorway's ambush, the room north of the crossroads: 1 spared, 2 killed */ + F_CORE_KNIGHT, + F_CORE_SWITCH, /* the switch by the laser ambush pressed */ + F_CORE_POWER, /* the laser bridge: 1 its power cut, 2 crossed */ + F_CORE_SAGE, /* the sage's path's puzzle solved */ + F_CORE_WARRIOR, /* the warrior's path: its fights won (1 to 3), 4 its switch flipped */ + F_CORE_FIELD, /* the force field before The End down */ + F_CORE_TRASH1, /* the trash cans: the Glamburger, the 100G */ + F_CORE_TRASH2, + F_CORE_ASTIG, /* Astigmatism met on its own (just once) */ + F_CORE_END, /* the Core End reached (the lobby's elevator works) */ + F_CORE_MTT, /* Mettaton EX: 1 his show a hit, 2 killed */ + F_CORE_HALL, /* Alphys's talk by the last elevator */ + F_CORE_DONE, /* the elevator up to the castle taken (where the game now ends) */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/hotland.h b/games/undertale/src/hotland.h index f10d2af9..e0a70eb4 100644 --- a/games/undertale/src/hotland.h +++ b/games/undertale/src/hotland.h @@ -20,4 +20,8 @@ void ht3_draw_top(void); /* over everything: the tile puzzle's clock */ int ht3_speed(int x, int y); void res_setup(int room, int from); int res_event(Ev *c); +void core_setup(int room, int from); /* core.c: the CORE */ +int core_event(Ev *c); +void core_update(void); /* its lasers, the force field's patience */ +void core_draw(void); /* under everything: the lasers, the force fields */ #endif diff --git a/games/undertale/src/htmon.c b/games/undertale/src/htmon.c index 41fc0a91..556c97f1 100644 --- a/games/undertale/src/htmon.c +++ b/games/undertale/src/htmon.c @@ -346,7 +346,7 @@ static const Form bomb_forms[BOMB_COUNT] = { [BOMB_GAME] = {{MON_BOMB}, 1, "* Defuse the game!"}, }; -static const MonDef ht_defs[MON_COUNT - MON_WF_COUNT] = { +static const MonDef ht_defs[MON_HT_COUNT - MON_WF_COUNT] = { [MON_VULKIN - MON_WF_COUNT] = { .name = "Vulkin", .spare_gold = 40, .hp = 20, .at = 8, .df = 0, .exp = 70, .gold = 40, .spr_idle = SPR_VULKIN_B, .spr_hurt = SPR_VULKIN_HURT, .idle_speed = 6, .check = "Thinks its lava makes people feel better.", @@ -399,9 +399,12 @@ static const MonDef ht_defs[MON_COUNT - MON_WF_COUNT] = { .flags = MF_BOSS | MF_NOT_KILLABLE, .act = act_mtt_tiles, .talk = talk_mtt_tiles, .attack = attack_mtt_tiles, .flavor = flavor_mtt_tiles, .on_hit = hit_mtt_tiles, .ends = ends_mtt_tiles}, }; -const MonDef *ht_mon_def(int id) { return id == MON_BOMB ? &bomb_defs[g_bomb_kind] : &ht_defs[id - MON_WF_COUNT]; } +const MonDef *ht_mon_def(int id) { + if (id >= MON_HT_COUNT) return core_mon_def(id); + return id == MON_BOMB ? &bomb_defs[g_bomb_kind] : &ht_defs[id - MON_WF_COUNT]; +} -static const Form ht_forms[FORM_COUNT - FORM_WF_COUNT] = { +static const Form ht_forms[FORM_HT_COUNT - FORM_WF_COUNT] = { [FORM_VULKIN - FORM_WF_COUNT] = {{MON_VULKIN}, 1, "* Vulkin strolls in, happy as can be."}, [FORM_TSUNDERPLANE - FORM_WF_COUNT] = {{MON_TSUNDERPLANE}, 1, "* Tsunderplane gets in the way!\n* Not on purpose or anything."}, [FORM_TSUNDER_VULKIN - FORM_WF_COUNT] = {{MON_VULKIN, MON_TSUNDERPLANE}, 2, @@ -416,7 +419,10 @@ static const Form ht_forms[FORM_COUNT - FORM_WF_COUNT] = { [FORM_MUFFET - FORM_WF_COUNT] = {{MON_MUFFET}, 1, "* Muffet blocks the way!"}, [FORM_MTT_TILES - FORM_WF_COUNT] = {{MON_MTT_TILES}, 1, "* Mettaton attacks!"}, }; -const Form *ht_form(int form) { return form == FORM_BOMB ? &bomb_forms[g_bomb_kind] : &ht_forms[form - FORM_WF_COUNT]; } +const Form *ht_form(int form) { + if (form >= FORM_HT_COUNT) return core_form(form); + return form == FORM_BOMB ? &bomb_forms[g_bomb_kind] : &ht_forms[form - FORM_WF_COUNT]; +} /* random encounters: past the Lab (the belts and the Magma Chamber); on the second floor, the crossroads and the * Bad Opinion Zone */ @@ -431,7 +437,7 @@ int ht_encounter(int room) { return pool[rnd_n(4)]; } } - return -1; + return core_encounter(room); } /* ---------------------------------------------------------------- the attacks */ @@ -678,10 +684,13 @@ static void atk_mtt_yellow(int t) { } } -int ht_attack_length(int atk) { return atk == ATK_MUFFET_PET ? 150 : 160; } +int ht_attack_length(int atk) { return atk >= ATK_HT_COUNT ? core_attack_length(atk) : atk == ATK_MUFFET_PET ? 150 : 160; } void ht_attack_run(Battle *b, int atk, int t) { - (void)b; + if (atk >= ATK_HT_COUNT) { + core_attack_run(b, atk, t); + return; + } if (t < 0) { bool muffet = atk >= ATK_MUFFET_SPIDERS && atk <= ATK_MUFFET_PET; board_set(muffet ? 190 : atk == ATK_TSUNDER_BOMBS || atk == ATK_PYROPE_ROPE ? 150 : atk == ATK_MTT_BOXES ? 140 : 120, diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index 33e7d578..3ecb2917 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -383,7 +383,7 @@ void menu_gameover_open(void) { void menu_end_open(void) { g_mode = MODE_END; t = 0; - writer_start(&w, "Up to the door of the CORE,\npast the MTT Resort...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); + writer_start(&w, "Up to the king's castle,\nthrough the CORE...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/monsters.c b/games/undertale/src/monsters.c index 32198797..c8660e7f 100644 --- a/games/undertale/src/monsters.c +++ b/games/undertale/src/monsters.c @@ -320,7 +320,8 @@ int form_setup(int form, Battle *b) { } /* Toriel and Flowey can't be fled from; Napstablook can */ if (form == FORM_TORIEL || form == FORM_FLOWEY || form == FORM_PAPYRUS || form == FORM_MAD_DUMMY || - form == FORM_RGUARDS || form == FORM_BOMB || form == FORM_MUFFET || form == FORM_MTT_TILES) + form == FORM_RGUARDS || form == FORM_BOMB || form == FORM_MUFFET || form == FORM_MTT_TILES || form == FORM_MTT_BOX || + form == FORM_MTT_EX) b->no_flee = true; b->captures = form == FORM_PAPYRUS; return 0; diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h index 71abbc63..1562888a 100644 --- a/games/undertale/src/monsters.h +++ b/games/undertale/src/monsters.h @@ -13,7 +13,9 @@ enum { MON_AARON = MON_SNOW_COUNT, MON_WOSHUA, MON_MOLDBYGG, MON_SHYREN, MON_MAD_DUMMY, MON_TEMMIE, MON_UNDYNE, MON_WF_COUNT, /* Hotland (htmon.c) */ MON_VULKIN = MON_WF_COUNT, MON_TSUNDERPLANE, MON_PYROPE, MON_METTATON, MON_RG01, MON_RG02, MON_BOMB, MON_MUFFET, - MON_MTT_TILES, MON_COUNT + MON_MTT_TILES, MON_HT_COUNT, + /* the CORE */ + MON_FFROGGIT = MON_HT_COUNT, MON_WHIMSALOT, MON_ASTIG, MON_MADJICK, MON_KNIGHT, MON_MTT_BOX, MON_MTT_EX, MON_COUNT }; /* formations: who is fought */ @@ -30,7 +32,10 @@ enum { FORM_MOLDBYGG_WOSHUA, FORM_SHYREN, FORM_MAD_DUMMY, FORM_TEMMIE, FORM_TEMMIE_MOLDBYGG, FORM_UNDYNE, FORM_WF_COUNT, /* Hotland (Mettaton's shows and a laser's alarm play their own way: htshows.c) */ FORM_VULKIN = FORM_WF_COUNT, FORM_TSUNDERPLANE, FORM_TSUNDER_VULKIN, FORM_PYROPE, FORM_PYROPE2, FORM_MTT_QUIZ, - FORM_MTT_COOK, FORM_LASERS, FORM_RGUARDS, FORM_BOMB, FORM_MUFFET, FORM_MTT_TILES, FORM_COUNT + FORM_MTT_COOK, FORM_LASERS, FORM_RGUARDS, FORM_BOMB, FORM_MUFFET, FORM_MTT_TILES, FORM_HT_COUNT, + /* the CORE */ + FORM_ASTIG = FORM_HT_COUNT, FORM_WHIM_FROG, FORM_WHIM_ASTIG, FORM_FROG_ASTIG, FORM_KNIGHT_MADJICK, FORM_FROG_ASTIG_WHIM, + FORM_KNIGHT, FORM_MADJICK, FORM_MTT_BOX, FORM_MTT_EX, FORM_COUNT }; enum { @@ -49,7 +54,12 @@ enum { /* Hotland */ ATK_VULKIN_THUNDER = ATK_WF_COUNT, ATK_VULKIN_FIRE, ATK_TSUNDER_BOMBS, ATK_TSUNDER_DIVE, ATK_PYROPE_BOMBS, ATK_PYROPE_ROPE, ATK_RG_TEAM, ATK_MUFFET_SPIDERS, ATK_MUFFET_CROISSANTS, ATK_MUFFET_DONUTS, ATK_MUFFET_PET, - ATK_MTT_BOXES, ATK_MTT_YELLOW, ATK_COUNT + ATK_MTT_BOXES, ATK_MTT_YELLOW, ATK_HT_COUNT, + /* the CORE */ + ATK_MADJICK_CHASER = ATK_HT_COUNT, ATK_MADJICK_CORNER, ATK_KNIGHT_MOON, ATK_KNIGHT_SUN, ATK_KNIGHT_STAR, + /* (Mettaton EX's from here on) */ + ATK_EX_LEGS, ATK_EX_BOMBS, ATK_EX_REWIND, ATK_EX_ARMS, ATK_EX_HEART, ATK_EX_LASER, ATK_EX_BOTS, ATK_EX_DISCO, + ATK_EX_PAIRS, ATK_EX_BREAK, ATK_COUNT }; /* a formation: up to three monsters, and what the first turn says */ @@ -75,6 +85,13 @@ const struct MonDef *ht_mon_def(int id); void ht_attack_run(struct Battle *b, int atk, int t); int ht_attack_length(int atk); int ht_encounter(int room); +const Form *core_form(int form); /* coremon.c */ +const struct MonDef *core_mon_def(int id); +void core_attack_run(struct Battle *b, int atk, int t); +int core_attack_length(int atk); +int core_encounter(int room); +void mttex_reset(void); /* before Mettaton EX's battle: the show's ratings back to the start */ +int mttex_ratings(void); extern int g_bomb_kind; /* the bomb fought next (BOMB_*: htmon.c) */ enum { BOMB_DOG, BOMB_WATER, BOMB_SCRIPT, BOMB_BALL, BOMB_PRESENT, BOMB_GAME, BOMB_COUNT }; #endif diff --git a/games/undertale/src/resort.c b/games/undertale/src/resort.c index d4432141..d96c13bd 100644 --- a/games/undertale/src/resort.c +++ b/games/undertale/src/resort.c @@ -1,5 +1,5 @@ /* The MTT Resort: the street outside (Sans, and dinner with him in the restaurant), the lobby (its fountain, the - * MTT-Brand Burger Emporium, the elevator that's out of order, the door north to the CORE), the hotel's hallway and + * MTT-Brand Burger Emporium, the elevator that's out of order, the door north to the CORE: core.c), the hotel's hallway and * its room service. (As the Undertale Wiki describes them; what they say is ours, in short.) */ #include #include "event.h" @@ -49,7 +49,6 @@ void res_setup(int room, int from) { obj_sign(1432, 284, 22, 34, "* Out of order?! The ONE\n elevator to the capital?!"); obj_sign(1394, 320, 52, 34, "* The elevator's broken, so\n we're trying to fit in all\n the guests going up."); obj_sign(1290, 510, 22, 22, "* (A box. It's locked tight.)"); - thing(1182, 84, 76, 56, EV_RES_CORE, ACTOR_DOOR, 0); break; case ROOM_RES_DINER: obj_sign(820, 330, 60, 52, "* Welcome to the restaurant!|* ...you needed a reservation,\n darling. Sorry."); @@ -169,24 +168,12 @@ static int ev_door(Ev *c) { EV_END; } -static int ev_core(Ev *c) { - EV_BEGIN; - NARRATE("* (The door to the CORE.)\n* (Go through?)@Yes@No"); - if (CHOICE() == 1) return 1; - set_flag(F_RES_CORE, 1); - sv.room = (int16_t)g_room, sv.x = 1205, sv.y = 150; - save_write_auto(); - menu_end_open(); - EV_END; -} - int res_event(Ev *c) { switch (c->id) { case EV_RES_SANS: return ev_sans(c); case EV_RES_SHOP: return ev_shop(c); case EV_RES_DOOR: return ev_door(c); case EV_RES_DESK: return ev_desk(c); - case EV_RES_CORE: return ev_core(c); } return -1; } diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index d8f9c12c..cec9cc11 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -25,6 +25,7 @@ void room_setup(int room, int from) { ht2_setup(room, from); ht3_setup(room, from); res_setup(room, from); + core_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ @@ -37,6 +38,7 @@ void room_update(void) { ht1_update(); ht2_update(); ht3_update(); + core_update(); } /* what a room draws on its floor, under everything (world.c) */ @@ -46,6 +48,7 @@ void room_draw_floor(void) { ht1_draw(); ht2_draw(); ht3_draw(); + core_draw(); } /* what a room draws over everything (a clock) */ diff --git a/games/undertale/src/shoot.c b/games/undertale/src/shoot.c index 7e74cad3..5ff1e098 100644 --- a/games/undertale/src/shoot.c +++ b/games/undertale/src/shoot.c @@ -3,7 +3,7 @@ * A grid of blocks stands between Frisk's ship, below, and the target, above. Each arrow pushes every dark block one * cell that way, where there's room inside the grid; the light blocks never move. Z shoots straight up: a shot * breaks the first dark block it meets, a light one stops it, and a clear way hits the target. Two shots a try on - * the first floor, one on the third: out of them, it starts over. (The rules are worked out from the solutions the Undertale Wiki gives for them; the + * the first floor and in the CORE, one on the third: out of them, it starts over. (The rules are worked out from the solutions the Undertale Wiki gives for them; the * grids are the game's, as its screenshots show them.) */ #include #include "game.h" @@ -21,6 +21,7 @@ static const Puzzle puzzles[SHOOT_COUNT] = { [SHOOT_LEFT] = {4, 4, 2, 2, {"# #", "ooo ", " #o#", "#oo "}}, [SHOOT_NORTH] = {5, 5, 2, 1, {"## o#", " o # ", " #o o", " o o#", "## ##"}}, [SHOOT_SOUTH] = {5, 4, 3, 1, {"###o ", " o#", "###o ", "###o#"}}, + [SHOOT_SAGE] = {5, 5, 2, 2, {"## # ", " #o# ", " oooo", " #o# ", " # ##"}}, /* (up, up, left, down, left, down, left) */ }; #define CELL 24 diff --git a/games/undertale/src/shoot.h b/games/undertale/src/shoot.h index 5aedca33..fcfa2786 100644 --- a/games/undertale/src/shoot.h +++ b/games/undertale/src/shoot.h @@ -2,7 +2,7 @@ #ifndef UT_SHOOT_H #define UT_SHOOT_H #include -enum { SHOOT_RIGHT, SHOOT_LEFT, SHOOT_NORTH, SHOOT_SOUTH, SHOOT_COUNT }; /* (the first floor's, then the third's) */ +enum { SHOOT_RIGHT, SHOOT_LEFT, SHOOT_NORTH, SHOOT_SOUTH, SHOOT_SAGE, SHOOT_COUNT }; /* (the first floor's, the third's, the CORE's) */ void shoot_open(int id); /* MODE_SHOOT until solved or left */ int shoot_result(void); /* 1 solved, 0 left */ void shoot_update(uint32_t keys, uint32_t pressed); diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index cccd6655..d67949bd 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -38,7 +38,7 @@ ITEM_OLD_TUTU, ITEM_BALLET_SHOES, ITEM_QUICHE, ITEM_PUNCH_CARD, ITEM_ARTIFACT, ITEM_ASTRONAUT_FOOD = range(17, 23) ITEM_BURNT_PAN, ITEM_INSTANT_NOODLES, ITEM_HOT_DOG, ITEM_STAINED_APRON = 28, 29, 30, 31 ITEM_NICE_CREAM = 13 -ITEM_STARFAIT = 32 +ITEM_STARFAIT, ITEM_GLAMBURGER = 32, 33 def run(args, frames, saves=None, what=""): @@ -277,17 +277,32 @@ def check(cond, msg): check(ITEM_NICE_CREAM in s["items"], f"Hotland's third floor: no Nice Cream: {s['items']}") # the MTT Resort: dinner with Sans, a Starfait from Burgerpants, a night in the hotel (200G), room service and the -# dog's door (nothing to give), up to the CORE's door +# dog's door (nothing to give), through the door north into the CORE if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--gold", "400", "--room", str(ROOMS["HT_CROSS3"]), "--at", "7550,420", "--path-file", os.path.join(HERE, "resort.path")], 5000, what="the MTT Resort") - check(s and s["mode"] == MODE_END and s["room"] == ROOMS["RES_LOBBY"], f"the MTT Resort did not end at the CORE: {s}") + check(s and s["mode"] == MODE_WORLD and s["room"] == ROOMS["CORE_APPROACH"], f"the MTT Resort did not end in the CORE: {s}") if s: - for name, v in (("HT_FLOOR3", 1), ("RES_SANS", 1), ("RES_ROOM", 2), ("RES_CORE", 1), ("RES_TEA", 0), ("RES_DOG", 0)): + for name, v in (("HT_FLOOR3", 1), ("RES_SANS", 1), ("RES_ROOM", 2), ("RES_TEA", 0), ("RES_DOG", 0)): check(flag(s, name) == v, f"the MTT Resort: F_{name} is {flag(s, name)}, not {v}") check(s["gold"] == 140, f"the MTT Resort: the Starfait or the room went wrong: {s['gold']}") check(ITEM_STARFAIT in s["items"], f"the MTT Resort: no Starfait: {s['items']}") +# the CORE: Madjick and Knight Knight spared, the switch's lasers, the bridge's power, the sage's puzzle, a Glamburger, +# Mettaton turned round and his show a hit, Alphys by the last elevator, up to the castle +if not QUICK: + s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["RES_LOBBY"]), "--at", "1210,160", + "--path-file", os.path.join(HERE, "core.path")], 24000, what="the CORE") + check(s and s["mode"] == MODE_END and s["room"] == ROOMS["CORE_HALL"], f"the CORE did not end at the castle's elevator: {s}") + if s: + for name, v in (("CORE_IN", 1), ("CORE_MADJICK", 1), ("CORE_KNIGHT", 1), ("CORE_SWITCH", 1), ("CORE_POWER", 2), + ("CORE_SAGE", 1), ("CORE_FIELD", 1), ("CORE_TRASH1", 1), ("CORE_END", 1), ("CORE_MTT", 1), + ("CORE_HALL", 1), ("CORE_DONE", 1)): + check(flag(s, name) == v, f"the CORE: F_{name} is {flag(s, name)}, not {v}") + check(s["kills"] == 0, f"the CORE: {s['kills']} killed on the friendly way") + check(s["gold"] == 130, f"the CORE: Madjick's and Knight Knight's gold went wrong: {s['gold']}") + check(ITEM_GLAMBURGER in s["items"], f"the CORE: no Glamburger from the trash can: {s['items']}") + if failures: print("\n".join("FAIL " + f for f in failures)) sys.exit(1) diff --git a/games/undertale/tests/core.path b/games/undertale/tests/core.path new file mode 100644 index 00000000..2f52d7a9 --- /dev/null +++ b/games/undertale/tests/core.path @@ -0,0 +1,113 @@ +# The CORE, from the MTT Resort's lobby (play it with --room 161 --at 1210,160 --name Frisk --noenc --god): its +# approach, the lobby (the elevator's out of order), the doorway's Madjick (clear mind, then talk), the switch and its +# lasers, the crossroads and Knight Knight north (three lullabies), the laser bridge and its power cut, the Core +# Branch: the sage's puzzle (up, up, left, down, left, down, left, two shots) and a Glamburger from a trash can; The +# End, Mettaton (turned round; then his show, boasting every turn until the ratings are high enough), the hallway +# and Alphys, the elevator up to the castle +w5 +1210,120 +1210,110 +w30 +go:310,2640 +310,2620 +talk +w20 +go:310,2300 +310,2280 +talk +w20 +go:310,2080 +310,2070 +talk +go:320,2022 +u +z +talk +go:200,1985 +200,1960 +w20 +go:150,1740 +seq:3,1 +talk +w20 +go:160,1520 +160,1490 +w20 +go:160,1440 +go:255,1345 +u +z +talk +w200 +talk +go:530,1370 +go:830,1300 +go:830,1140 +seq:2,2,2 +talk +go:830,1370 +go:1180,1370 +1236,1370 +talk +w20 +go:1470,1370 +1500,1370 +talk +go:2080,1370 +go:2080,1320 +talk +go:2080,1160 +2080,1120 +talk +w10 +go:1760,1110 +go:1760,374 +u +z +talk +go:1760,860 +go:1470,844 +u +z +w10 +u +w4 +u +w4 +l +w4 +d +w4 +l +w4 +d +w4 +l +w4 +z +w20 +z +w60 +talk +go:2400,870 +go:2580,870 +2700,870 +w20 +go:3348,872 +3348,836 +w20 +go:3348,600 +act:1 +talk +w30 +go:3352,345 +3352,320 +w20 +go:4200,130 +4240,130 +talk +go:4288,100 +u +z +pick:0 +w60 diff --git a/games/undertale/tests/resort.path b/games/undertale/tests/resort.path index 3dd02a82..c9ddbf29 100644 --- a/games/undertale/tests/resort.path +++ b/games/undertale/tests/resort.path @@ -1,6 +1,6 @@ # the MTT Resort, up the crossroads' stairs (play it with --room 159 --at 7550,420 --name Frisk --noenc --god # --gold 400): Sans out front, dinner with him; the lobby, a Starfait from Burgerpants; a room at the desk, door 2 -# and its bed; doors 1 and 4 (nothing to give); the CORE's door +# and its bed; doors 1 and 4 (nothing to give); through the door north, into the CORE w5 7550,410 7550,276 @@ -58,7 +58,5 @@ go:1500,396 1470,396 w10 go:1210,122 -u -z -pick:0 +1210,100 w60 diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index 24ebbfc8..7223e3af 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -197,6 +197,22 @@ AREAS.append(dict(name="resort", map="MTT_Resort_map.png", floor=RES_FLOOR, margin=0, close=True, patches=[("copy", 1289, 818, 26, 36, 1131, 818)])) # Sans out front (a sprite here) +# the CORE: blue steel, mesh and purple bridges; the floors are cut by their rectangles (its walls are drawn in the +# same blues). The black sausages (only there on the way to the true ending), Mettaton in his room and Alphys in the +# last hallway are the map's: off it (Mettaton and Alphys are objects here) +CORE_FLOOR = [(33, 81, 164), (31, 130, 228), (34, 105, 164), (36, 62, 141), (71, 154, 204), (85, 121, 151), + (67, 97, 107), (51, 70, 62), (71, 101, 103), (54, 52, 156), (78, 77, 189), (29, 28, 90), (69, 102, 153), + (32, 29, 112), (30, 74, 218), (15, 62, 216), (22, 101, 221), (85, 116, 138), (131, 44, 66), (70, 32, 58), + (225, 148, 55), (169, 132, 94), (145, 96, 11), (166, 165, 237), (18, 14, 53), (244, 254, 190), + (59, 58, 138)] +AREAS.append(dict(name="core", map="CORE_map.png", floor=CORE_FLOOR, margin=0, close=True, patches=[ + ("erase", 117, 1653, 30, 50, "ring"), ("erase", 462, 1759, 32, 50, "ring"), ("erase", 826, 1088, 28, 54, "ring"), + ("erase", 2096, 832, 28, 50, "ring"), ("erase", 2646, 164, 34, 48, "ring"), ("erase", 3344, 466, 34, 36, "ring", []), + ("copy", 3624, 112, 36, 52, 3560, 112), # (Alphys, in the last hallway: the hallway further on, over her) + # the force field before The End (an object here, drawn while it's up): the bridge 32 pixels on, over it + ("copy", 2551, 836, 22, 84, 2519, 836), +])) + ROOMS = [ # the landing: the bed of golden flowers, a hallway, the Delta Rune arch dict(name="area1", area="ruins", rect=(0, 5900, 680, 260), title="Ruins", margin=0, @@ -610,7 +626,7 @@ floor_rects=[(1080, 278, 380, 162), (1080, 440, 280, 98), (1060, 380, 20, 60), (1460, 380, 20, 60), (1200, 136, 40, 142), (1200, 538, 40, 72)], doors=[((1195, 600, 50, 6), "res_outside", (1205, 840), "down"), ((1060, 380, 6, 60), "res_diner", (1030, 396), "left"), - ((1474, 380, 6, 60), "res_hall", (1488, 396), "right")]), + ((1474, 380, 6, 60), "res_hall", (1488, 396), "right"), ((1200, 132, 40, 8), "core_approach", (310, 2700), "up")]), dict(name="res_diner", area="resort", rect=(60, 220, 1000, 300), title="MTT Resort", floor_colors=RES_DINER + RES_FLOOR, floor_rects=[(82, 342, 698, 156), (780, 382, 280, 56)], doors=[((1054, 380, 6, 60), "res_lobby", (1068, 396), "right")]), @@ -620,6 +636,51 @@ dict(name="res_room", area="resort", rect=(1640, 0, 200, 250), title="MTT Resort", floor_rects=[(1644, 84, 192, 116), (1720, 200, 40, 50)], doors=[((1720, 232, 40, 8), "res_hall", (1735, 364), "down")]), + # the CORE: its approach up from the Resort, the lobby (its elevator out of order) and the two rooms north of it + dict(name="core_approach", area="core", rect=(160, 2200, 330, 560), title="CORE", + floor_rects=[(300, 2290, 40, 470), (270, 2690, 100, 70)], + fix=[("walk", 300, 2290, 40, 170)], # (the way in, lit blue) + doors=[((300, 2752, 40, 8), "res_lobby", (1210, 150), "down"), ((304, 2292, 32, 8), "core_lobby", (310, 2090), "up")]), + dict(name="core_lobby", area="core", rect=(160, 1930, 330, 210), title="CORE", + floor_rects=[(177, 2040, 305, 75), (177, 1977, 63, 63), (402, 1977, 59, 63), (298, 2115, 42, 25)], + doors=[((300, 2134, 40, 6), "core_approach", (310, 2302), "down"), ((180, 1972, 40, 6), "core_doorway", (150, 1860), "up"), + ((420, 1972, 44, 6), "core_pit", (470, 1860), "up")]), + dict(name="core_doorway", area="core", rect=(95, 1490, 130, 410), title="CORE", + floor_rects=[(100, 1582, 120, 238), (140, 1819, 40, 80), (142, 1492, 38, 92)], + fix=[("walk", 142, 1492, 38, 92)], # (its doorway, north) + doors=[((140, 1892, 40, 8), "core_lobby", (190, 1985), "down"), ((142, 1492, 38, 8), "core_west", (150, 1460), "up")]), + dict(name="core_pit", area="core", rect=(430, 1680, 100, 220), title="CORE", + floor_rects=[(440, 1761, 79, 75), (461, 1836, 37, 62)], + doors=[((461, 1892, 37, 8), "core_lobby", (432, 1985), "down")]), + # the laser ambush (its switch), the crossroads and the room north of it + dict(name="core_west", area="core", rect=(100, 990, 1140, 540), title="CORE", + floor_rects=[(119, 1339, 159, 147), (125, 1486, 77, 34), (278, 1356, 265, 32), (543, 1339, 694, 66), + (796, 1236, 65, 105), (819, 1196, 53, 42), (766, 1068, 147, 130)], + doors=[((125, 1512, 77, 8), "core_doorway", (150, 1505), "down"), ((1228, 1360, 12, 40), "core_bridge", (1236, 1362), "right")]), + # the laser bridge (the power cut), up to the Core Branch + dict(name="core_bridge", area="core", rect=(1220, 1140, 920, 340), title="CORE", + floor_rects=[(1220, 1358, 845, 44), (2062, 1145, 58, 270)], + doors=[((1220, 1360, 6, 40), "core_west", (1200, 1362), "left"), ((2062, 1145, 58, 8), "core_branch", (2080, 1098), "up")]), + # the Core Branch: three columns, three bridges; west the sage's path (its puzzle), east the force field to The End + dict(name="core_branch", area="core", rect=(1390, 280, 1220, 870), title="Core Branch", + floor_rects=[(1740, 357, 60, 785), (2060, 282, 58, 860), (2379, 357, 60, 785), (1710, 357, 120, 83), + (2340, 357, 120, 83), (1740, 620, 700, 42), (1400, 862, 1210, 38), (1620, 1102, 820, 40)], + doors=[((2060, 1142, 58, 8), "core_bridge", (2080, 1160), "down"), ((2060, 282, 58, 8), "core_warrior", (2080, 255), "up"), + ((2602, 862, 8, 38), "core_end", (2670, 860), "right")]), + # the warrior's path: its three fights, its switch + dict(name="core_warrior", area="core", rect=(2050, 60, 700, 240), title="CORE", + floor_rects=[(2060, 160, 100, 60), (2060, 218, 60, 72), (2160, 160, 460, 40), (2620, 160, 80, 60)], + doors=[((2060, 290, 60, 8), "core_branch", (2080, 300), "down")]), + # The End: the bridge, the Core End (a SAVE, the elevator to the lobby, the door to Mettaton) + dict(name="core_end", area="core", rect=(2650, 750, 880, 260), title="Core End", + floor_rects=[(2660, 852, 600, 46), (3260, 852, 240, 66)], + doors=[((2660, 852, 6, 46), "core_branch", (2580, 862), "left"), ((3342, 856, 36, 8), "core_mtt", (3348, 740), "up")]), + dict(name="core_mtt", area="core", rect=(3250, 230, 280, 550), title="CORE", open=True, + floor_rects=[(3342, 330, 36, 450), (3282, 460, 156, 120), (3302, 440, 116, 160), (3322, 420, 76, 200)], + doors=[((3342, 772, 36, 8), "core_end", (3348, 862), "down"), ((3342, 330, 36, 8), "core_hall", (3355, 212), "up")]), + dict(name="core_hall", area="core", rect=(3320, 60, 1100, 190), title="CORE", + floor_rects=[(3340, 118, 1022, 42), (3340, 158, 60, 92)], + doors=[((3340, 242, 60, 8), "core_mtt", (3348, 345), "down")]), ] # rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index c5b1fc90..fc5e3f3f 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -237,12 +237,61 @@ def gen_star(): return [im] +def gen_exblock(): + # Mettaton EX's blocks: a white square, a black ring in it (only the bomb beside it breaks it) + im = _img(14, 14) + d = ImageDraw.Draw(im) + d.rectangle([0, 0, 13, 13], fill=(255, 255, 255, 255)) + d.ellipse([3, 3, 10, 10], fill=(0, 0, 0, 255)) + d.ellipse([5, 5, 8, 8], fill=(255, 255, 255, 255)) + return [im] + + +def gen_exleg(): + # one of his legs, kicking in from the side: black, long, a pink boot + im = _img(9, 60) + d = ImageDraw.Draw(im) + d.rectangle([1, 0, 7, 46], fill=(40, 40, 40, 255), outline=(255, 255, 255, 255)) + d.polygon([(0, 46), (8, 46), (8, 56), (4, 59), (0, 59)], fill=(255, 90, 170, 255)) + return [im] + + +def gen_mttheart(): + # his heart, out of the box on his waist: pink, a white rim + im = _img(16, 14) + d = ImageDraw.Draw(im) + d.polygon([(0, 3), (3, 0), (8, 3), (12, 0), (15, 3), (15, 6), (8, 13), (0, 6)], fill=(255, 255, 255, 255)) + d.polygon([(2, 3), (4, 2), (8, 5), (11, 2), (13, 3), (13, 6), (8, 11), (2, 6)], fill=(255, 60, 140, 255)) + return [im] + + +def gen_disco(): + # the disco ball: a grey ball of little squares + im = _img(16, 16) + d = ImageDraw.Draw(im) + d.ellipse([0, 0, 15, 15], fill=(190, 190, 200, 255)) + for k in range(3, 15, 4): + d.line([(k, 1), (k, 14)], fill=(110, 110, 130, 255)) + d.line([(1, k), (14, k)], fill=(110, 110, 130, 255)) + return [im] + + +def gen_exarm(): + # a piece of his long arms, coming down: a segment, a box on it to shoot + im = _img(10, 12) + d = ImageDraw.Draw(im) + d.rectangle([3, 0, 6, 11], fill=(255, 255, 255, 255)) + d.rectangle([0, 3, 9, 8], fill=(255, 190, 40, 255), outline=(255, 255, 255, 255)) + return [im] + + GEN = {"otile": gen_otile, "snowball": gen_snowball, "bone": gen_bone, "orb": gen_orb, "snowflake": gen_snowflake, "iceshard": gen_iceshard, "present": gen_present, "knife": gen_knife, "dogpaw": gen_dogpaw, "heartbullet": gen_heartbullet, "spear": gen_spear, "note": gen_note, "drop": gen_drop, "arm": gen_arm, "debris": gen_debris, "arrow": gen_arrow, "plane": gen_plane, "bomb": gen_bomb, "cloud": gen_cloud, "bolt": gen_bolt, "star": gen_star, "croissant": gen_croissant, "donut": gen_donut, - "mttmini": gen_mttmini} + "mttmini": gen_mttmini, "exblock": gen_exblock, "exleg": gen_exleg, "mttheart": gen_mttheart, + "disco": gen_disco, "exarm": gen_exarm} SNOW_CLEAR = [(133, 163, 216), (114, 129, 177), (139, 163, 186), (180, 192, 201), (195, 207, 216)] PAP_GIF = "move:Papyrus_screenshot_back_and_forth.gif:0,280,640,450:" @@ -405,6 +454,26 @@ def gen_star(): # Bratty and Catty's alley: its trash cans and door, the two of them in front ("shop_bratty", "wiki:Bratty_and_Catty_sprite_shop.png", {"keep": True, "box": (0, 0, 320, 120)}), ("bratty_catty", "wiki:Bratty_and_Catty_sprite.png", {"feet": True}), + # the CORE: its monsters (their idle animations thinned out), Mettaton EX (whole, without arms, then just his + # top: the armless one cut at the waist), his box, a black sausage cut from the map, the shapes of his attacks + ("ffroggit_b", "wiki:Final_Froggit_battle_idle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 4}), + ("ffroggit_hurt", "wiki:Final_Froggit_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("whimsalot_b", "wiki:Whimsalot_battle_idle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 4}), + ("whimsalot_hurt", "wiki:Whimsalot_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("astig_b", "wiki:Astigmatism_battle_idle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 27}), + ("astig_hurt", "wiki:Astigmatism_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("madjick_b", "wiki:Madjick_battle_idle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 4}), + ("madjick_hurt", "wiki:Madjick_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("knight_b", "wiki:Knight_Knight_battle_idle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 50}), + ("knight_hurt", "wiki:Knight_Knight_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("mttex_b", "wiki:Mettaton_EX_battle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 3}), + ("mttex_hurt", "wiki:Mettaton_EX_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("mttex_armless", "wiki:Mettaton_EX_battle_armless.png", {"feet": True, "clear_bg": True}), + ("mttex_top", "wiki:Mettaton_EX_battle_armless.png", {"feet": True, "clear_bg": True, "box": (0, 0, 106, 70)}), + ("mttex_ow", "wiki:Mettaton_EX_overworld_limbless.png", {"feet": True}), + ("sausage", "map:CORE_map.png:117,1653,30,50", {"keep": True, "clear": [(33, 81, 164), (31, 130, 228), (34, 105, 164), + (36, 62, 141), (71, 154, 204)]}), + *[(n, "gen:" + n, {"center": True}) for n in ["exblock", "exleg", "mttheart", "disco", "exarm"]], ("bird", "map:Waterfall_map.png:8466,578,15,19", {"keep": True, "clear": [(27, 33, 90), (27, 21, 72), (23, 13, 43)]}), ("tutu", "map:Waterfall_map.png:1240,1240,22,10", {"keep": True, "clear": [(23, 13, 43), (27, 21, 72), (27, 33, 90)]}), ("artifact", "map:Waterfall_map.png:10156,150,12,11", From ad70fbc229b5d7b2328c96aca240468031cc3453 Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 17:36:25 +0000 Subject: [PATCH 18/19] Undertale: New Home, Asgore, Omega Flowey and the neutral ending The CORE's last elevator now goes up to New Home, as the Undertale Wiki and its map describe it (what's said is short and in our own words): - The elevator (and one back down), the grey city's street, the front yard and its SAVE. - Asgore's home: the stairs down chained shut, a note on the chain, a key in the kitchen and one in the hallway; the children's room and its two presents, the Worn Dagger (+15 AT) and the Heart Locket (+15 DF); the room under renovations, his room. - The basement's two corridors, where the story of Asriel and the first human is told as Frisk walks (in eleven short parts), and the elevator at its far end (the street's works once it's reached). - The Last Corridor: Sans, what EXP and LOVE are, and his judgment (no EXP: no LOVE gained; his brother; what comes next is Frisk's). - The throne room's entrance (a SAVE), Asgore watering his flowers, the coffins below, and the room before the barrier ("The End"). - The barrier: Asgore asks if Frisk is ready, breaks MERCY with his trident and fights (his fire's helix, rain, rings and hands, his trident's blue and orange sweeps; talking with no EXP, or Toriel's pie, lowers his guard, and it falls on its own after turn 20). Beaten, he kneels: kill him, or spare him and hear him out, and Flowey's pellets finish him. - Flowey takes the six SOULs: Omega Flowey, not turn by turn: his eyes' shots, flamethrowers, a closing ring of pellets, vines, bombs, finger guns; now and then a SOUL fights for him (the light blue's knives, the orange's fists, the blue's stars and shoes, the purple's words, the green's pans, the yellow's gun) until Frisk reaches the ACT button among its attack and calls for help: its attack heals then. All six helped, they turn on him, and FIGHT comes down to be reached. At 0 HP the SOUL won't give up. Beaten, Flowey is spared or killed. - Through the barrier, Sans's call after: who rules now (the lady from the Ruins if she was spared, else Undyne and Papyrus), Mettaton's show, and the king gone; then THE END. Engine: a battle's MERCY can be broken (only FIGHT, ACT and ITEM); the end screen takes its words. Tools: fetch.py gathers New Home's wiki pages too. Tests: the CORE's route ends in New Home now; a New Home route (the keys, the presents, the story, Sans, the throne room, Asgore fought and spared, Omega Flowey, Flowey spared, the end); the test driver stops reading on at the end. Docs and screenshots. --- README.md | 6 +- docs/play.md | 2 +- games/undertale/README.md | 21 +- games/undertale/docs/asgore.png | Bin 0 -> 4198 bytes games/undertale/docs/asgorehome.png | Bin 0 -> 5215 bytes games/undertale/docs/lastcorridor.png | Bin 0 -> 4623 bytes games/undertale/docs/omega.png | Bin 0 -> 1710 bytes games/undertale/docs/throne.png | Bin 0 -> 15245 bytes games/undertale/src/battle.c | 9 +- games/undertale/src/battle.h | 4 + games/undertale/src/core.c | 8 +- games/undertale/src/coremon.c | 14 +- games/undertale/src/data.bin | Bin 1207512 -> 1398172 bytes games/undertale/src/data.h | 242 ++++++++------ games/undertale/src/events.c | 3 + games/undertale/src/events.h | 3 + games/undertale/src/flags.h | 15 +- games/undertale/src/items.c | 2 + games/undertale/src/items.h | 3 + games/undertale/src/menu.c | 4 +- games/undertale/src/menu.h | 2 +- games/undertale/src/monsters.c | 3 +- games/undertale/src/monsters.h | 16 +- games/undertale/src/newhome.c | 342 +++++++++++++++++++ games/undertale/src/newhome.h | 7 + games/undertale/src/nhmon.c | 452 ++++++++++++++++++++++++++ games/undertale/src/rooms.c | 2 + games/undertale/src/text.c | 2 + games/undertale/tests/check.py | 20 +- games/undertale/tests/newhome.path | 70 ++++ games/undertale/tests/play.c | 4 + games/undertale/tools/fetch.py | 5 +- games/undertale/tools/rooms.py | 48 +++ games/undertale/tools/sprites.py | 61 +++- 34 files changed, 1232 insertions(+), 138 deletions(-) create mode 100644 games/undertale/docs/asgore.png create mode 100644 games/undertale/docs/asgorehome.png create mode 100644 games/undertale/docs/lastcorridor.png create mode 100644 games/undertale/docs/omega.png create mode 100644 games/undertale/docs/throne.png create mode 100644 games/undertale/src/newhome.c create mode 100644 games/undertale/src/newhome.h create mode 100644 games/undertale/src/nhmon.c create mode 100644 games/undertale/tests/newhome.path diff --git a/README.md b/README.md index 8162cd2c..7c23fe8f 100644 --- a/README.md +++ b/README.md @@ -79,10 +79,10 @@ These are too big to fit next to NumPlay, so each one is its own app. Install it Celeste
Celeste

The whole climb, with every B-side and C-side
Download Champion Island
Champion Island

The whole island and its seven sports
Download - Undertale
Undertale

The Ruins, Snowdin, Waterfall, Hotland and the CORE, from the golden flowers to the king's castle
Download + Undertale
Undertale

The whole Underground, from the golden flowers to the barrier and the neutral ending
Download - More on the way
The rest of Undertale, The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap + More on the way
The Binding of Isaac, Plants vs. Zombies, Doom and more: see the roadmap @@ -174,7 +174,7 @@ Filmed on my own calculator, no emulator. - [x] The Final Earth 2 - [x] The Powder Toy (NumPowder) - [x] Block Blast -- [ ] Undertale: the Ruins, Snowdin, Waterfall, Hotland, the MTT Resort and the CORE are out, New Home is next +- [x] Undertale: the whole Underground, from the Ruins to New Home and the neutral ending - [ ] The Binding of Isaac - [ ] Plants vs. Zombies - [ ] Doom diff --git a/docs/play.md b/docs/play.md index 82a5730a..202aa867 100644 --- a/docs/play.md +++ b/docs/play.md @@ -268,7 +268,7 @@ Undertale comes as its own app, `Undertale.nwa`: it is too big to share the calc | **toolbox**, **shift** or **var** | The menu: ITEM, STAT, CELL (C in the game) | | **Home** | Keep the moment and quit | -Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall, Hotland, the MTT Resort and the CORE. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. On the second floor, press the switches as the top conveyor belt carries you past them, and in Mettaton's news report, touch each bomb and defuse it while it's in the DEFUSE ZONE. When Muffet turns your SOUL purple, it keeps to three strings: **Up** and **Down** hop between them. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange makes you smell of oranges (and blue water's piranhas bite then), and purple soap slides you on and smells of lemons. When your SOUL turns yellow, **OK** shoots. At the MTT Resort, the desk rents you a room and the hotel's doors want room service. On the CORE's laser bridge, walk while the power is off and freeze when it comes back on. Mettaton EX's show is won on its ratings: Boast, Pose, a Heel Turn and his brand's food raise them. For now the game ends at the elevator up to the king's castle. +Name the fallen human, then walk and talk your way through the Ruins, Snowdin, Waterfall, Hotland, the MTT Resort, the CORE and New Home. In a battle, FIGHT attacks (press **OK** when the bar crosses the middle), ACT checks a monster or does something to it, ITEM eats, and MERCY spares a monster that no longer wants to fight, or flees. Then move your SOUL to dodge; when it turns blue, it falls, and **Up** jumps; when it turns green, it stays put, and the arrows turn its shield to block. On ice you slide until something stops you. In Snowdin Town, walk into the shop to buy, and into the inn to rest. In Waterfall, walk into a bridge seed to push it into the water, where it blooms into a flower you can walk on; the bell calls the seeds back. A green bullet heals you. Walk up to a star and press **OK** to SAVE. Home keeps the moment you were at, and the next start is back there. Your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. The Tem Shop in Temmie Village also buys what you carry. In Hotland, steam vents throw you over the lava, orange lasers hit you if you stand still and blue ones if you move, and in a shooting puzzle the arrows push the dark blocks and Z shoots. On the second floor, press the switches as the top conveyor belt carries you past them, and in Mettaton's news report, touch each bomb and defuse it while it's in the DEFUSE ZONE. When Muffet turns your SOUL purple, it keeps to three strings: **Up** and **Down** hop between them. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange makes you smell of oranges (and blue water's piranhas bite then), and purple soap slides you on and smells of lemons. When your SOUL turns yellow, **OK** shoots. At the MTT Resort, the desk rents you a room and the hotel's doors want room service. On the CORE's laser bridge, walk while the power is off and freeze when it comes back on. Mettaton EX's show is won on its ratings: Boast, Pose, a Heel Turn and his brand's food raise them. In New Home, find both keys to unchain the stairs. Asgore breaks MERCY, so you'll have to fight him. Against Omega Flowey, dodge, and reach the ACT button that comes down among a SOUL's attack; once all six SOULs are on your side, reach FIGHT. The game ends at the neutral ending.
diff --git a/games/undertale/README.md b/games/undertale/README.md index 98b085da..589adcd2 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -8,7 +8,7 @@

Fall into the Underground as a human child, on the NumWorks calculator.
- The Ruins, Snowdin, Waterfall, all of Hotland, the MTT Resort and the CORE, from the bed of golden flowers to the elevator up to the king's castle. New Home is on the way. + The whole Underground, from the bed of golden flowers to the barrier: the Ruins, Snowdin, Waterfall, Hotland, the MTT Resort, the CORE and New Home, to the neutral ending.

@@ -31,7 +31,8 @@ * **Hotland's third floor:** the spiders' bake sale, the vent islands and their two shooting puzzles (the Diamond Boys, and Alphys asking you to watch anime), the conveyor belts past the laser drones, the spider entrance and Muffet's sticky lair, Mettaton's musical and the trapdoor to his tile puzzle against the clock, and the crossroads with the Nice Cream guy and Heats Flamesman, by the stairs up to the MTT Resort. * **The MTT Resort:** Sans out front, and dinner with him in the restaurant, where he tells you about the door in the forest; the lobby and its fountain, the MTT-Brand Burger Emporium with Burgerpants behind the counter, Bratty and Catty's shop up the alley, a night in the hotel, room service down the hall (and a dog behind door 4), and the door to the CORE. * **The CORE:** two black shapes backing away inside, its broken elevator, Madjick's ambush, the switch whose lasers Alphys gets backwards, Knight Knight north of the crossroads, the laser bridge where Alphys cuts the power (and it keeps coming back), and the Core Branch: the sage's path and its shooting puzzle, the warrior's path and its three fights, or a force field that a patient one just waits out. Then The End, Mettaton's last show, Alphys's confession in the last hallway, and the elevator up to the castle. -* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane, Pyrope and the Royal Guards in Hotland, the news report's bombs, defused in the DEFUSE ZONE, Muffet, whose purple SOUL keeps to her strings, and Mettaton, worn down by the yellow SOUL's shots; Final Froggit, Whimsalot, Astigmatism, Madjick and Knight Knight in the CORE, and Mettaton EX, whose show is won on its ratings. +* **New Home:** the grey city, Asgore's home (two keys for the chained stairs, two presents in the children's room), the story of Asriel and the first human told down its basement's corridors, the Last Corridor where Sans judges you, Asgore among the flowers of his throne room, the coffins below, and the barrier: Asgore, your choice, Flowey and the six SOULs, and the way out. +* **Battles like in the game:** FIGHT with the timing bar, ACT, ITEM and MERCY, and your SOUL dodging each monster's own attacks in the box: Froggit, Whimsun, Moldsmal, Loox, Vegetoid, Migosp, Napstablook and Toriel in the Ruins; Snowdrake, Ice Cap, Gyftrot, Jerry, Chilldrake, Glyde, Doggo, Lesser Dog, Dogamy and Dogaressa, Greater Dog and Papyrus, whose blue attack makes your SOUL fall, in Snowdin; Aaron, Woshua, Moldbygg, Shyren, Temmie, Mad Dummy, who can't be hurt, and Undyne, who turns your SOUL green, in Waterfall; Vulkin, Tsunderplane, Pyrope and the Royal Guards in Hotland, the news report's bombs, defused in the DEFUSE ZONE, Muffet, whose purple SOUL keeps to her strings, and Mettaton, worn down by the yellow SOUL's shots; Final Froggit, Whimsalot, Astigmatism, Madjick and Knight Knight in the CORE, and Mettaton EX, whose show is won on its ratings; Asgore, who breaks MERCY, and Omega Flowey with the six human SOULs in New Home. * **Spare or fight:** every monster can be spared, and Flowey at the door remembers what you did. Lose to Papyrus and he only locks you in his shed. * **Saved like in the game:** SAVE at the stars, with the room and the time played. The C menu has your ITEM, STAT and CELL. Home keeps the moment you were at, and your save is also copied into `undertale_saves.py`, so installing the app again doesn't erase it. @@ -152,6 +153,18 @@ The sage's path
The sage's path, two shots Mettaton EX
Mettaton EX: keep the ratings up + + Asgore's home
Asgore's home, the stairs chained shut + The Last Corridor
The Last Corridor: Sans's judgment + + + The throne room
Asgore among his flowers + Asgore's battle
Asgore at the barrier, MERCY broken + + + Omega Flowey
Omega Flowey and the six SOULs + + ## How to play @@ -164,7 +177,7 @@ Snowdin brings new things: when Papyrus turns your SOUL blue, it falls to the bo In Waterfall, walk into a bridge seed to push it: in the water it blooms into a flower you can walk on, and the bell calls the seeds back. A green bullet heals you instead of hurting. Talk to the piano to play it, and keep an umbrella for the rain. The Tem Shop is the one shop that buys what you carry. When Undyne turns your SOUL green, it can't move: turn its shield with the arrows to block her spears. She can't be spared: run, and she'll chase you. -In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. On the second floor, the top conveyor belt carries you past three switches: press them one after another as you go by. In the vent puzzle, every panel you land on turns all the vents around, and the one at the top turns them back. To spare the Royal Guards, clean 02's armor, catch its green stars, then whisper to 01. In the news report, touch a bomb to face it, and Defuse it (or FIGHT it) while it's in the DEFUSE ZONE. On the third floor, ride the belt past the blue drones without a step. When Muffet turns your SOUL purple, it keeps to three strings: Up and Down hop between them, Left and Right move along. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange ones make you smell of oranges (and the blue water's piranhas bite then), purple soap slides you on and makes you smell of lemons, and blue next to yellow is electrified. After it, ACT and press the yellow button: your SOUL turns yellow, and OK shoots. At the MTT Resort, the front desk rents you a room for the night, and the hotel's doors down the hall want room service: bring what they ask for. On the CORE's laser bridge, walk while the power is off and freeze the moment it flickers back on. Against Mettaton, turn him round first; then it's a show: Boast, Pose, a Heel Turn, his brand's food and every hit you take make the ratings climb, and once they're high enough the show is over. +In Hotland, conveyor belts carry you and steam vents throw you over the lava (the one in the middle of the puzzle hub turns each time). Keep moving through orange lasers and stand still for blue ones. In a shooting puzzle, the arrows push every dark block one cell and Z shoots: break your way to the target in two shots. In Mettaton's quiz, move your SOUL onto an answer and press OK; Alphys signals the right one. Alphys's upgrade puts the Dimensional Box in your phone's CELL. On the second floor, the top conveyor belt carries you past three switches: press them one after another as you go by. In the vent puzzle, every panel you land on turns all the vents around, and the one at the top turns them back. To spare the Royal Guards, clean 02's armor, catch its green stars, then whisper to 01. In the news report, touch a bomb to face it, and Defuse it (or FIGHT it) while it's in the DEFUSE ZONE. On the third floor, ride the belt past the blue drones without a step. When Muffet turns your SOUL purple, it keeps to three strings: Up and Down hop between them, Left and Right move along. In the tile puzzle, red tiles are walls, yellow ones shock you back, orange ones make you smell of oranges (and the blue water's piranhas bite then), purple soap slides you on and makes you smell of lemons, and blue next to yellow is electrified. After it, ACT and press the yellow button: your SOUL turns yellow, and OK shoots. At the MTT Resort, the front desk rents you a room for the night, and the hotel's doors down the hall want room service: bring what they ask for. On the CORE's laser bridge, walk while the power is off and freeze the moment it flickers back on. Against Mettaton, turn him round first; then it's a show: Boast, Pose, a Heel Turn, his brand's food and every hit you take make the ratings climb, and once they're high enough the show is over. In New Home, find both keys to unchain the stairs down. Asgore breaks MERCY: you'll have to fight him, and then choose. Against Omega Flowey there are no turns: dodge, and when a SOUL fights for him, reach the ACT button that comes down among its attack to call for help. Once all six are on your side, reach FIGHT. Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) shows your items, your STAT and the phone numbers you have. @@ -181,7 +194,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh ## Good to know * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. -* **Everything up to New Home, for now:** the elevator up to the king's castle ends the game, on a screen that says the rest is still to come. New Home comes next. +* **The neutral ending:** the game plays from the start to the barrier and the neutral ending, with Sans's call after. The true pacifist ending (the True Lab, Asriel) and the genocide route aren't in it. * **No music or sound:** the calculator has no speaker. * **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. diff --git a/games/undertale/docs/asgore.png b/games/undertale/docs/asgore.png new file mode 100644 index 0000000000000000000000000000000000000000..91a53273ad02621e76e3960dee3e2954ea7d4b4f GIT binary patch literal 4198 zcmYkAc{J4D|Ht1<46+qzNFrHEvPBFfOCn3kz7wUzI@U18GKG&pwrtr_C|iuJm}V^5 zWnW@2wh(5le?SQ?4!wgFaZ*eqrq1R~r%l&+ zp4wc&v`*|f+1p#wEM|u4>rn3F%CYO4{ni6t4!brNDF!JQ*d0MP7NE=o9kWL{*CHS8 zn2;eUj&8bAma?fftWOiMEn%rUR@8UDA=GFXTfzSG6S${aX#AzN`ZK)|YC{16m@236 z+j2mW|7=s`dcs>bqLANW4d~H>edGN(%~T$c{KGZ9_$>pe8RI8EZoMy_Gc>58VNBc- zf#7~6K124TNv^^)E-5!mN(#$_4%u$_1Pq_rXG`1`+Xqq}}FeW@Tk>o-W*{T_aptWjJn ztdI63P&lUpo}baVhsnRRP9zDM_u6ha^hk>K%F+aftfjd%SUa*qzUh5vZ>ug|`pcAm z_}b;=#yTZ4C1Gm;x7n{Epx-3#m-WcEkb;64PM(Ehn%p&FW8n<(+F15(JU>q=eA$ZrGQAW zzGck{S@J7W&K`%!l2Q}X<(i8%V%{yw0%T5Hr@{tG%0e>I2BL0(wZQD(joya{C(^7} zC6HbNO zz6w`g7HA!fC)A%)bf8su+K++D2F3 z{>u;ZaR5Y4ECx7S^sU158>d#zl%KEY$&Tw$xRU3=hI0_jj`VeN(huFayAn~a)5zkU zs+n_6)tq7|4iKeFDK-@w`2Re+yfj0#h@d1-{5)d(u+o}PV58V#&IO3vu3?(eTH7A~ z@mO(GdF3e3&snAa6htLIWo<8-nHpWq6>|N_w9hvPRPXGJrAp(hs49$_bJNf0IqII; z4RM1aA2-Fh#G7RjUmcmjtc2vju@k8_fob;mvwqE!x`u^nZ?~}Ymt9Mzn*R`zdX1n-bUuZIZS(BcMgO(&-6VnOoC>(Ky(0m z>xoU1a?P1mF-sN{Ey+z`Lu&KZ^j^5hep5Eg)9 zG2{>V@Q51RUi|X5I8c;wu)~v(b*s75UG6uLZB3)dJYTh4<;>F>Yi1@g&TGSYqpxOE zPGgY7-!CErXe4o?6NOM22f9B)_!aI0dM_dB_#Q|nq>M>!KYI5L&u1Qft&d;X5mWWD zjp!sLz7ZQ!mrmUFp|W?B1mm*C(VyOrQMs}kM;~Lm{U==NTyP%wsr5jFd+)owG26gJ z0xPIzhUH!7@l<|4M{9Q~Q)BOk+SRS7ZgSn#?&}b##pnIdOA^RTDWHf|a)VPyLgD9> za`@J__8wb7uT|^!XTNFrJ17l^sUGm#3l+ZGKJ_6Z3!*Bo_GOpO7?3P3pE18L|LXnt zOWBcx$&oOEM69s;pDevb=Lky2Uc4dD3Zs2TKcO})nO!CbMo3l9<-YyRB2tkCTO>TO z5+bF`CB2FPG@99`sj#Kt={GKdi?aMNr0O*=Wg1&K7H6T-q}o6&Dd?2$`x3xWm?5)% z_soW81P~0MSXene!vx!go$jEfTP@LK2oqWDRKRh%a{ZC@aTl8|w?_RgRkq>pdk2(4 z2^y+mZ!SDGlJp7`)V6gD?3@43Wa8far~KBH0&6HGutC9sLS3L z@-HOb=ibb+APKNiNzGW5Wxu|(P}X-anWhR?u+!Mb{Djfy{c)e1y;!ofny`FN0)@}) za;Ue^JGtSjAnuu!P$o!7(pz-woV#K+By^?a4O8%w$&f^~{=`7~*c2ZcFZJ0LA{BJ3+L0f}1O%Iq z($zn{?K+ZOEc1%++z*!R)!QFaeb4ve3h4|vFfVKOnhOyY*-oJ#rcML13Q!B7MUjjL zJ2oW~w%7&{W0Y0kx`t?P%ZC9)EFUwWq|=hZz$Pv0zf#n`2;Du+1GiFcV^RFH&%34*5yQL?`& zRLtE+&8PH1Waa3UnW{g$D613~fT(fZbl6T}gA$aG64FFZT~yovDozOfadE80E#M62;7Y2EHbIRs2p;F~RCf|hL!BS)&n zB|q7jFgFw00KA<)uiIovP-AEIHFDzlA+3T zmlkhtNW=dG5v~e`)G4Z^L{dF@CBA4sq-fiO7r3D4#$i3=< zV^!|ulK--P33V&=s%!S5awpMyi36P(mjYf4S=oDLcY+6@+n-b1{>ae->z63Wn5-}C zg{k397Pb5n>?Pfi)aPcf-1tb=b=|I z6+YQfwpwnf46&^`+mY$Gnwavu=L7lZjtt*K0}s9KDqImD#M0hu%+K z?B(Oei(%|^Lq~@+c{bV;c;r$SE(_o9-LAcQ49{_i0$n(Z>fW6ikXDuahAx2)D|`>i zvOlW!2y&gbm8U_%uMOR9SIEm*s$>eBq#hiJPCt{{Riyh{X0=N`F!AV$el{3i6C*sOT9TfuhkQ*maf?$zb7dPiMa!Wc(G#pMvJP^W4o(OFG0fvCcOB6fJ8fa(f z-ZxmjI9@4!$UW1`f^!8A*T?6D=J~B* zu68WpidYBsM(d#Wy)~)=n#d>#KqTFzNaW{;Qisi@Igy;FR5B~B^lHKK=WOR@^Q#cz z+*?Lvel)giD&IxbuH*@VaWkhL@$^w{8|GW3%b-^}M(hJ#^L`sSs&AOA8z>uIU*np= z0+2$jz3Ve_7m>v4Z&bc_TC~V>YZ#HQHZOfPB@o-`WZ&8uOwaD$WpFxd)pVILreuyL zos#76TRsxf>nSds-SsYq$@_`CLJwl3bpR1Obn-Y$@dP26%ENj==p!c+M9jY!0|AaHAp9LE@Pos}GufZ1afIZxp z%`M_=#Ly6<>hiq+<6*6|Gb{;0bCQ|mwO56QPTmX@^|asJ-4PXrJd1XmU*1~LQkDPw zi1aTK+}b7ZK$2lX`p5By41O4suep~6kSE!%h?k|Y1LDZj@6U!*6%48JuxMuyaBV04 zYc=daDz-4PsETD^An7mfG7qlEQvCU826a@9QH~GkfJWeU$EpM)z*gv>E9Vb=qvUlv z(vnQi}~hSjBbk9$%9V zZ$=}eNre;+u&XA#*lIGhAb?EFqlR>Xw4Wk*wb{h}Z*ef3eoH4I_($sY#ITkavu#2T zsOFkcxEZ}NZi4+V=$;?-5kmHs*p!ZhQuVIRN)czxeWR+Inuin;A;&$J_xvVK5in6I z_b$1w`*Z;+b$qR`&-L-cFzwM~&>S%pA@}$+5}Ox4xaH)@F?iS+p0Sic-pqZpl%3C; zE37RgR!gdcFO7M9eKO-QEg;Kkrzxc?6*G8m#CmS2-2PY9vWok653ZARvfHJ1=M1z+ z`rP(w8ZA_~ctwrK3GDmsEO5e~T#TYuNy01bl6So4xqK|=Uem(2qto{t4;mGrnd}ZU z__K#8KI&m?39!P8ym$Uz?qW#OfgX{D$?xGp1S>ezW@k(0s6*y>*0Ah2#{u!m>L9_2 zj!}w>6J}##^c1JEW8W7zZE5LBI2j#I{e&1%TiMJcw5${xXrtVn(tpb@fBN?K<8PC- zX3mugF?e;I~u)LR~;{ziUZ$uA4R?hW{md1|qvSfFqz z^#+UC=0xPQWnCW0A0B&dsjxvM)|3Jh+pR2~;rZ4t=Ru?J=^L?|@}~lLi@*xqplp8P zc=2^_8+~8({>aq5>F<8o(D{5aKD4T;({FT$79xP`5+>c`B7hcL9QF4B(xTH|Y(4T*KvC>6@}H|u(}WM8;(Bg+U8Mu`KSwb+ r4h5w7=QNpJsZ-kGj3$-7ivS^N3+Rq&Z1If$1Hj;piEgE~bJYI;%qK&j literal 0 HcmV?d00001 diff --git a/games/undertale/docs/asgorehome.png b/games/undertale/docs/asgorehome.png new file mode 100644 index 0000000000000000000000000000000000000000..8d330ca9b357d4d02809aff3a48e033cf21660b2 GIT binary patch literal 5215 zcmV-l6rk&gP)-ro4k0HeP_TWn4GopcLS@>r@@@`J+0Y&EA$Gd3?w%&{F0n;=2%(3%duei5 zLJu{z18Z5QR)=lkz*6rBP|YHa*yeK&n&dZTIlBFVFK&^XJXHKlA-y zggkmP^EA>|zwi6KKXc+=|NNL7XKk%st*sD{GG)6GV=sI(falbHr^El>Xtr@t0MLb# zBZUI}BZQ0;3JVK!xF`TR>yS#02UemkfDVp z$U+04R|G~D8UR>m0Dx=@jVv?(nh6+LXaF=8aFU(ljpofBj2{NMu+St*7P@R#tf^w@ z!bO$eUhB(8w5rfBFp`*AXf4!B2q|5-Sh{f0nkwpI766DQU|a$K46)G2LIZVxX$mD^ zWTAnY>Ycf4;X1%V1CSdFO)wT3C`RYoZCr#<7J9$a87UNCp@CBBExa;`>yVa(roF6+ zqeUeF5MZHWWT7Ds0F3f`P{l&W%R(0mBkfi%(ckXuJ0AJ%={@gNa4gZC|#CX0m;e4HS60^aX*=pPNjF*<>%(&!^ql>0Gi8UB%~ zmp*##OQl;ZO`^FA@@t_f`VQnc+Up4S(ri3ErV|521#HH+E2>@=v}0)4tyMbbnLUSw zfrejJ^i5Vy=U_!{k!kngG)7Tp3wd%Ie^l@Qfj{X^` zVJ1`tRjgwR6E;v+z)?9o`k6iM?eBR$MlHiXwwl}Q(QjY3h7XT^4)3CQtzsbv#?#NI za1m5*1AA_zaVAVt&@pVoF_wehp6YYII4mTjQ*E!U)fX1#*4FAqwvZ1FcF&wU7H

%uzUggX_cDE;BP7whT^l4FuEg51DNTShS_tM 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 Z{{xcQi|1@A65{{>002ovPDHLkV1l7z!*u`v literal 0 HcmV?d00001 diff --git a/games/undertale/docs/lastcorridor.png b/games/undertale/docs/lastcorridor.png new file mode 100644 index 0000000000000000000000000000000000000000..7f1c9092c1ed8916d595e90ff2aa9f8eb8b7939c GIT binary patch literal 4623 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 TZ9CbKf9BKCHqa{3K!p7Z=m-{- literal 0 HcmV?d00001 diff --git a/games/undertale/docs/omega.png b/games/undertale/docs/omega.png new file mode 100644 index 0000000000000000000000000000000000000000..69c7b5f8f435a0e207daa614f7b00aba40caf72c GIT binary patch literal 1710 zcmbVNc~H_@6b2L#m(&)YnTa`R_T1}PS%zhq^-4^$up%+hiWZ@?6vYK?voc#;c;+%` zW@$<h4YHEs0TH;E9OD>R*CfFnJ{q!|&nr7ZV@6LQ@?m6?_d*^&}&bjgXF>cx# zh8hqEM0?Nfon8as$FKuvW%H7vDGj6GV&Nb`tx6#B7DQ_is zDFpJ&Ech4i5y~Xyx?=4EN@tavZv%mT==Amw&YX^cXU_?73FdHJ3TS8vcJ5$D1 zBfrj!WBCC$Nj3MinL}UvH=VV;nfLw!K8tg|x*9Fx%D*WT!_zY8OjUq*4gSS#x83jm z6mCv>ktVE5yf!rq8f7>m`F^)DyjY|du5!DytK{-z23z1c&@S34w3w8g8|WRPWR&S> zNolktY6BIFex}L*lhI#3Z{>rd9gE+Au>~(eTNI(g3oAn6I1c+sXNn$%9}PYzCK@j4 z>Q56gM@38=VYX)2BIQkB344Z{{fSYgUl{K3mK@Dyo?^tc`R-cL#8@V|TqQX7X!dJ@ zQHQ(VHoyc#Obiqn2V!0gqlcW43+1>09j)_Xo9i2f2II=gHpSF_K}ouZd~a*C=|;;>{Bd!PdNqhCwHe8kfrU89HP~yPpQM z9z1`htndbr<`WF1!rMdp{OuSL0z7IVMQR`q}hW|On3K# zicymETWhEh#DrYAuf1l^;?4T?#Z*z%SYMnC>$Uh85xc%Y6+?mPpz4D=Gpcckr&pbW zJpk-)4;F=nm{Off9SM<^998s;YS83U8)aMTFpuAJ!GQ)hA^}3zbrOSnvv~zEa3dn% zdO`?)+a-~b;7A{UsK)x7?mTGxECx=Uh|!r#T1LKt8bd%;A|z+ANslTf+B~!{YYn3Sln!OZPv&OZi~hpA z_5mM14Ipk%-j!vz1zPz*^K{AB7P*vFa~co8FxGs7tJ5dMG%)dagpom;uve7q0v_=M zkmx`-P9SsnUQqwEn7YBgEoL`gaX(evk0i)$U%rR-hPi?Yv$>q|+|u)Hjm$HZ(`90n9yWy~wX83h{tesV zhm2g$HNW+e`=mL6X_@|3(#No+1MvY)(%35>8=5wjyrY;XkWSR`qYA%S_{kKmLs;Yv z&4qz+-A#jZWRreue7ka}nm9U269Ao#cj{K@rjxr)!2WM~x?ujgcJ|HU$*IyrJv+pc zG6%wUZRqa;;x?N4Eqe1j9Nyx&;t;8Jk_SI|bT0w+^O*WU!|e;*3le_RaAB5xCz%+J zf1`9bwQo(Q0}FXUw!NBS&3%ZTd>kydQy#vUBWqdTZa1++lce?GP<|t=1nsrMxTuJ@#ecehf}Ph+IU$bPq|0Ysw0hsD`XWerI~;La@w}84xbmg&q6SYn-yvdj2@FU z4O_0xM&g_>t&Qt&F8pYj`ziSY8!^y_5Jvvq8u7Aconv`D<4#8E8@Apd6mP<@U3v$L zwd}XjsPMlzs?ke9ZY7@zi1yB^Y_;ZKx(CxdNF{qu iHS7vpHUH`S*8=7i9zzn?r literal 0 HcmV?d00001 diff --git a/games/undertale/docs/throne.png b/games/undertale/docs/throne.png new file mode 100644 index 0000000000000000000000000000000000000000..6e1bd43ae16c6d92fc07996f1820ddd842beaf51 GIT binary patch literal 15245 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%0A(zISO2JEf@&&S>Q_ zIwgZ9zDZkH+F>}0JlSQH)=;AlRf%LFLEdgHZDMtdKJUuVW=vur4Bqe0G4K_a;WJ_= zsb*5V@FP{eka5o5@*b()!6>Rvm*Fbz?cqExi>6XA02YjV7=G1na~dcLVW&Rlpa&oV zG-4G#mC%1Jcm_)G!u&T`u-XYavn5D#3u_UB7Bv}68oa9w>!7@p?mMdnr&Rr%hNt02 zSl3>hFHm>+0Uj@tenU3CY}q=SK_ZIte(Sf2;@DinboRbq)|Y64PrP3@@h_llGyD|v zIwG8fnSs07JgoXXcV9RA<{WzmU1C`tC7b#qY?0%1QNZp4fGQNIsJIriO~Zi%uQCs! zPdT#FXzoJYqbMAo1VQT+AO4fvxBr&6%4(kBRglfv@ypsDEIfr`z~0-!`*P7k)&yo! z%0jG*p@c0m$JYO=yD{`r(TK^?WHWRXKFv{ft=7TQ+FDwBKep(cMqe&Nd1#BsFhr#g z<&%QIJ(kz(8&ghF#A+I=@!!4aqDPXEZ3T&?AUu@wLw*1?31oe)u7?Vj87Ww4W}ySp zF|v^ZW7t%7I1*O)FRI3?9o{QEmuYj zMD(ZmB5Zr@OGDL69u&`bkD&n zD1K=i4N!O+$?63vD*ItmaVib(>`-)jaxjHo)Eh2LD-T#?^4UMo2d1;{3 z)e+kQ7VWrlbU_eHh8}e8o%d$(>FOW{Zj)D0KVmM6%6KFrJT(={tQjksss=-e9DaU6 zokTBtasK4v1SVuBw~ZW9eDV9RQuHFr&5ul1B?AgqN3>|sTjJ`xAH?BkbH(Y3ga2HC zPcFOlLgArD3lG2PH|QUAp3RUSGL>pd>-e_gMIigzGvK7H^3sp9J7?!7G^H6QaymX* z_eaT)M=+H#-D*)HuiLS9?VE=V(G+vtwFf3Hz<6)5CQ_9nPZUdV7Ag#1F~#u-paEva75-y zxdD{80xb|=R%dfhOHWTrJar+|^UXQe@H>3`Z#Tlvy3qUnljjXyXV~wYZPiH)Pt@45 zSxjigC9jjPQOr8@1^o_2HL@i}(b%>r87^gtOZ(8>>WY9m+{Bd9oO@$PU8|i2!nJfO z9+m1^i`Z6`F{02U8pn?{I5orAttu|cM5zaxn9 zm*zFwfZx4H zK_FAEEDjNH={zn_=^=1XcCK+L{_iw=&fccQotNN~FVWIOY7B-|l^hL~B{gO6x%=ON zjDW04UwszDTnwl+s5umtbZ^xO3Yru)gy+-#2z3EX!Il4|+!)YBES+&yw4iY(0NT~* zGtWfey$v-?JSYe) z}-6F0m2c{1Tl|zf3I&^^>2Yo{#VC~B+-_k zr`%hL%6GXC|GXtkk$py$eWn``$qPCEjFAPE{>FTh-%LPF1jJkl%3QYWGMm9B)R5r-G|hxE#Y^3qo;Qk#v%WEtCK-c} zw!CJ>+^6@qmj?jH!@SO^YR$Iuo9SIhT!q<=+k4{|T-o|~`B0U~dwChuINekM=c;W>nK&eVLDdYU-| zEVY49uJFes*@y^7N>rzyrU=yI)F13h=#n`@|{=l#SVG2d(Dj`g2T?`OLV@dnH} zQ2MfcQN><4`mv|hR1F^GZ6QVP9}Ca`~L0W5mO12arvRE2#e4 zL2f$l0!u$2O2HSfwWkTKJ_dA)1+m{fj_oex>9hBcYd={OU~p4u9dTSI_Il0gAESrE z8RdPE+)^w^7T|Trc6kLF9iAr%6;NSkvB12Ha1zzp+aitYqkJ+ MX%(qj31IO50pEpk7XSbN literal 0 HcmV?d00001 diff --git a/games/undertale/src/battle.c b/games/undertale/src/battle.c index b9a1fdfa..72d0e310 100644 --- a/games/undertale/src/battle.c +++ b/games/undertale/src/battle.c @@ -12,7 +12,8 @@ #include "monsters.h" #include "world.h" -/* the battles that play their own way: Flowey's first (flowey.c), Mettaton's shows and a laser's alarm (htshows.c) */ +/* the battles that play their own way: Flowey's first (flowey.c), Mettaton's shows and a laser's alarm (htshows.c), + * Omega Flowey's (nhmon.c) */ typedef struct { int form; void (*start)(void); @@ -24,6 +25,7 @@ static const Script scripts[] = { {FORM_MTT_QUIZ, quiz_start, quiz_update, quiz_draw}, {FORM_MTT_COOK, cook_start, cook_update, cook_draw}, {FORM_LASERS, lasers_start, lasers_update, lasers_draw}, + {FORM_OMEGA, omega_start, omega_update, omega_draw}, }; static const Script *script; @@ -345,6 +347,7 @@ static void menu_input(uint32_t pressed) { case P_MENU: if (pressed & K_LEFT) bt.button = (bt.button + 3) & 3; if (pressed & K_RIGHT) bt.button = (bt.button + 1) & 3; + if (bt.no_mercy && bt.button == 3) bt.button = pressed & K_LEFT ? 2 : 0; if (pressed & K_Z) { bt.target = 0, bt.act = 0, bt.item = 0, bt.mercy = 0, bt.page = 0; if (bt.button == B_FIGHT || bt.button == B_ACT) bt.phase = P_TARGET; @@ -620,6 +623,10 @@ void battle_draw_buttons(void) { static const uint16_t spr[4] = {SPR_FIGHTBT, SPR_TALKBT, SPR_ITEMBT, SPR_SPAREBT}; bool menu = bt.phase >= P_MENU && bt.phase <= P_MERCY; for (int i = 0; i < 4; i++) { + if (i == 3 && bt.no_mercy) { /* (its pieces, where it was) */ + for (int k = 0; k < 4; k++) gfx_rect(button_x[3] + 6 + k * 14, BUTTON_Y + 14 + (k % 2) * 6, 6, 3, rgb565(0xFF8020), 160); + continue; + } bool on = menu && bt.button == i; gfx_sprite(spr[i], on ? 1 : 0, button_x[i], BUTTON_Y, 0, 255); if (on && bt.phase == P_MENU) gfx_sprite(SPR_HEART, 0, button_x[i] + 8, BUTTON_Y + 11, 0, 255); diff --git a/games/undertale/src/battle.h b/games/undertale/src/battle.h index 4d4b0eb1..d6c4047d 100644 --- a/games/undertale/src/battle.h +++ b/games/undertale/src/battle.h @@ -130,6 +130,7 @@ typedef struct Battle { int bar_x, bar_dir; /* FIGHT: the bar, 1/16 px */ int strike_t, strike_dmg; bool flee_ok, scripted, no_flee, no_buttons; + bool no_mercy; /* MERCY broken (Asgore's): only FIGHT, ACT and ITEM */ bool captures; /* no death: at 0 HP the battle ends, HP 1 (Papyrus captures you) */ int result; int exp_won, gold_won; @@ -193,6 +194,9 @@ int cook_won(void); /* the substitute reached in time */ void lasers_start(void); void lasers_update(uint32_t keys, uint32_t pressed); void lasers_draw(void); +void omega_start(void); /* nhmon.c: Omega Flowey */ +void omega_update(uint32_t keys, uint32_t pressed); +void omega_draw(void); /* the monsters and formations (monsters.c) */ const MonDef *mon_def(int id); diff --git a/games/undertale/src/core.c b/games/undertale/src/core.c index 313f8736..fda6263c 100644 --- a/games/undertale/src/core.c +++ b/games/undertale/src/core.c @@ -3,7 +3,7 @@ * room north (Knight Knight), the laser bridge (Alphys cuts the power; it keeps coming back), the Core Branch: the * sage's path (its puzzle), the warrior's path (three fights, a switch) and the force field east that a patient one * waits out; The End's bridge, the Core End, and Mettaton's last show; the hallway, Alphys, and the elevator up to - * the king's castle, where the game now ends. (As the Undertale Wiki describes them; what they say is ours, in + * the king's castle (newhome.c). (As the Undertale Wiki describes them; what they say is ours, in * short.) */ #include #include "battle.h" @@ -442,9 +442,7 @@ static int ev_lift(Ev *c) { NARRATE("* (Take the elevator up to the\n castle?)@Yes@No"); if (CHOICE() == 1) return 1; set_flag(F_CORE_DONE, 1); - sv.room = (int16_t)g_room, sv.x = 4285, sv.y = 125; - save_write_auto(); - menu_end_open(); + FADE_TO(ROOM_NH_TOWN, 90, 4545, DIR_DOWN); return 1; } if (c->v[0] == 0 && !flag(F_CORE_END)) { @@ -480,7 +478,7 @@ static int ev_mtt(Ev *c) { } text_set_top(0); g_shake = 10; - NARRATE("* (Smoke pours out of Mettaton.)\n* OHHH MY...|* YOU FLIPPED MY SWITCH?\n* SO YOU'RE DYING TO SEE MY NEW\n BODY. HOW RUDE...|* LUCKY FOR YOU, I'VE BEEN\n ACHING TO SHOW IT OFF!"); + NARRATE("* (Smoke pours out of Mettaton.)\n* WELL, WELL...|* MY SWITCH, DARLING? COULDN'T\n WAIT FOR MY NEW LOOK?|* NAUGHTY. BUT FINE...\n* IT'S TIME FOR MY PREMIERE!"); text_set_top(-1); mttex_reset(); BATTLE(FORM_MTT_EX); diff --git a/games/undertale/src/coremon.c b/games/undertale/src/coremon.c index beee6b4d..6973ba00 100644 --- a/games/undertale/src/coremon.c +++ b/games/undertale/src/coremon.c @@ -346,7 +346,7 @@ static void draw_mttex(Battle *b, Monster *m, int x, int y) { } /* ---------------------------------------------------------------- the definitions */ -static const MonDef core_defs[MON_COUNT - MON_HT_COUNT] = { +static const MonDef core_defs[MON_CORE_COUNT - MON_HT_COUNT] = { [MON_FFROGGIT - MON_HT_COUNT] = { .name = "Final Froggit", .spare_gold = 50, .hp = 100, .at = 8, .df = 0, .exp = 120, .gold = 80, .spr_idle = SPR_FFROGGIT_B, .spr_hurt = SPR_FFROGGIT_HURT, .idle_speed = 6, .check = "Its future looks brighter and brighter.", @@ -397,9 +397,9 @@ static const MonDef core_defs[MON_COUNT - MON_HT_COUNT] = { .flags = MF_BOSS, .act = act_mttex, .talk = talk_mttex, .attack = attack_mttex, .flavor = flavor_mttex, .on_hit = hit_mttex, .draw = draw_mttex, .ends = ends_mttex, .on_item = item_mttex}, }; -const MonDef *core_mon_def(int id) { return &core_defs[id - MON_HT_COUNT]; } +const MonDef *core_mon_def(int id) { return id >= MON_CORE_COUNT ? nh_mon_def(id) : &core_defs[id - MON_HT_COUNT]; } -static const Form core_forms[FORM_COUNT - FORM_HT_COUNT] = { +static const Form core_forms[FORM_CORE_COUNT - FORM_HT_COUNT] = { [FORM_ASTIG - FORM_HT_COUNT] = {{MON_ASTIG}, 1, "* Astigmatism draws near."}, [FORM_WHIM_FROG - FORM_HT_COUNT] = {{MON_WHIMSALOT, MON_FFROGGIT}, 2, "* Whimsalot and Final Froggit appear."}, [FORM_WHIM_ASTIG - FORM_HT_COUNT] = {{MON_WHIMSALOT, MON_ASTIG}, 2, "* Whimsalot and Astigmatism appear."}, @@ -411,7 +411,7 @@ static const Form core_forms[FORM_COUNT - FORM_HT_COUNT] = { [FORM_MTT_BOX - FORM_HT_COUNT] = {{MON_MTT_BOX}, 1, "* Mettaton attacks!"}, [FORM_MTT_EX - FORM_HT_COUNT] = {{MON_MTT_EX}, 1, "* Mettaton EX makes his premiere!"}, }; -const Form *core_form(int form) { return &core_forms[form - FORM_HT_COUNT]; } +const Form *core_form(int form) { return form >= FORM_CORE_COUNT ? nh_form(form) : &core_forms[form - FORM_HT_COUNT]; } /* random encounters in the Core Branch (Astigmatism alone just once) */ int core_encounter(int room) { @@ -724,6 +724,7 @@ static void atk_ex_disco(int t, bool fast) { } int core_attack_length(int atk) { + if (atk >= ATK_CORE_COUNT) return nh_attack_length(atk); switch (atk) { case ATK_EX_BREAK: return 90; case ATK_EX_REWIND: return 200; @@ -732,7 +733,10 @@ int core_attack_length(int atk) { } void core_attack_run(Battle *b, int atk, int t) { - (void)b; + if (atk >= ATK_CORE_COUNT) { + nh_attack_run(b, atk, t); + return; + } bool ex_atk = atk >= ATK_EX_LEGS; if (t < 0) { int w = atk == ATK_EX_BOMBS || atk == ATK_EX_REWIND ? 76 : atk == ATK_EX_PAIRS ? 44 : ex_atk ? 120 : 130; diff --git a/games/undertale/src/data.bin b/games/undertale/src/data.bin index aa5c826d0253e6bbe892e96a2415adf3193013fc..61ae5ba85ecbbfeef3ed3f76d197b5a8bf951b75 100644 GIT binary patch delta 180346 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 x-zM$}IL=1(EJw8ZS=^TmI~|RIqnb^UnYP delta 50215 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
    ?(JRD(`6 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℘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 x= 0) return r; r = core_event(c); if (r >= 0) return r; + r = nh_event(c); + if (r >= 0) return r; return 1; } diff --git a/games/undertale/src/events.h b/games/undertale/src/events.h index efa20028..cbfbf5a2 100644 --- a/games/undertale/src/events.h +++ b/games/undertale/src/events.h @@ -59,6 +59,9 @@ enum { EV_CORE_APPROACH, EV_CORE_CALL, EV_CORE_ORDER, EV_CORE_BRANCH, EV_CORE_POWER, EV_CORE_LASER, EV_CORE_SWITCH, EV_CORE_MADJICK, EV_CORE_KNIGHT, EV_CORE_SAGE, EV_CORE_WARRIOR, EV_CORE_WSWITCH, EV_CORE_FIELD, EV_CORE_TRASH, EV_CORE_LIFT, EV_CORE_MTT, EV_CORE_HALL, + /* newhome.c */ + EV_NH_LIFT, EV_NH_KEY, EV_NH_CHAIN, EV_NH_UP, EV_NH_GIFT, EV_NH_STORY, EV_NH_SANS, EV_NH_THRONE, EV_NH_COFFIN, + EV_NH_BARRIER, EV_NH_CALL, EV_COUNT }; /* Toriel's calls on the way (EV_CALL's v[0]) */ diff --git a/games/undertale/src/flags.h b/games/undertale/src/flags.h index 331b36df..26a1fad6 100644 --- a/games/undertale/src/flags.h +++ b/games/undertale/src/flags.h @@ -177,7 +177,20 @@ enum { F_CORE_END, /* the Core End reached (the lobby's elevator works) */ F_CORE_MTT, /* Mettaton EX: 1 his show a hit, 2 killed */ F_CORE_HALL, /* Alphys's talk by the last elevator */ - F_CORE_DONE, /* the elevator up to the castle taken (where the game now ends) */ + F_CORE_DONE, /* the elevator up to the castle taken */ + F_NH_IN, /* New Home reached */ + F_NH_KEY1, /* Asgore's home: the kitchen's key, the hallway's */ + F_NH_KEY2, + F_NH_CHAIN, /* the chain on the stairs down unlocked */ + F_NH_DAGGER, /* the presents opened: the Worn Dagger, the Heart Locket */ + F_NH_LOCKET, + F_NH_STORY, /* the basement's story: how many parts told */ + F_NH_LIFT, /* the basement's far end reached (the street's elevator works) */ + F_NH_SANS, /* Sans's judgment heard */ + F_NH_THRONE, /* Asgore met in the throne room */ + F_NH_ASGORE, /* Asgore, beaten: 1 spared (Flowey killed him), 2 killed */ + F_NH_FLOWEY, /* Omega Flowey, beaten: 1 spared, 2 killed */ + F_NH_DONE, /* through the barrier: the end */ FLAG_COUNT = 256 }; #endif diff --git a/games/undertale/src/items.c b/games/undertale/src/items.c index 9909283f..c3df682a 100644 --- a/games/undertale/src/items.c +++ b/games/undertale/src/items.c @@ -75,6 +75,8 @@ static const ItemInfo items[ITEM_COUNT] = { [ITEM_MYSTERY_KEY] = {"Mystery Key", "MystryKey", IT_SPECIAL, 0, 0, 0, "A key, too bent to go on\n your keychain.", "", 500}, [ITEM_HUSH_PUPPY] = {"Hush Puppy", "HushPupy", IT_FOOD, 65, 0, 0, "A spell that keeps a dog\n from casting magic.", "* You eat the Hush Puppy.\n* Dog-magic is neutralized.", 150}, + [ITEM_WORN_DAGGER] = {"Worn Dagger", "WornDG", IT_WEAPON, 0, 15, 0, "Good for cutting plants and\n vines.", "", 250}, + [ITEM_HEART_LOCKET] = {"Heart Locket", "H.Locket", IT_ARMOR, 0, 0, 15, "It says \"Best Friends\n Forever.\"", "", 250}, }; const ItemInfo *item_info(int id) { return &items[id >= 0 && id < ITEM_COUNT ? id : 0]; } diff --git a/games/undertale/src/items.h b/games/undertale/src/items.h index 3c9a96e3..bbf04478 100644 --- a/games/undertale/src/items.h +++ b/games/undertale/src/items.h @@ -49,6 +49,9 @@ enum { ITEM_COWBOY_HAT, ITEM_MYSTERY_KEY, ITEM_HUSH_PUPPY, + /* New Home */ + ITEM_WORN_DAGGER, + ITEM_HEART_LOCKET, ITEM_COUNT }; enum { IT_FOOD, IT_WEAPON, IT_ARMOR, IT_SPECIAL }; diff --git a/games/undertale/src/menu.c b/games/undertale/src/menu.c index 3ecb2917..d65379c7 100644 --- a/games/undertale/src/menu.c +++ b/games/undertale/src/menu.c @@ -380,10 +380,10 @@ void menu_gameover_open(void) { } /* ---------------------------------------------------------------- the end of what there is */ -void menu_end_open(void) { +void menu_end_open(const char *text) { g_mode = MODE_END; t = 0; - writer_start(&w, "Up to the king's castle,\nthrough the CORE...|The rest of the underground\nis still to come...", 40, 90, FONT_MAIN); + writer_start(&w, text, 40, 90, FONT_MAIN); w.speed = 2; } diff --git a/games/undertale/src/menu.h b/games/undertale/src/menu.h index 8e2ecbf5..2da2a526 100644 --- a/games/undertale/src/menu.h +++ b/games/undertale/src/menu.h @@ -6,7 +6,7 @@ void menu_title_open(void); void menu_open(void); void menu_save_open(void); void menu_gameover_open(void); -void menu_end_open(void); /* at Hotland's edge: what comes next isn't made yet */ +void menu_end_open(const char *text); /* the end: its words, a page at a time */ void menu_update(uint32_t keys, uint32_t pressed); void menu_draw(void); void game_new(const char *name); diff --git a/games/undertale/src/monsters.c b/games/undertale/src/monsters.c index c8660e7f..313b9358 100644 --- a/games/undertale/src/monsters.c +++ b/games/undertale/src/monsters.c @@ -321,9 +321,10 @@ int form_setup(int form, Battle *b) { /* Toriel and Flowey can't be fled from; Napstablook can */ if (form == FORM_TORIEL || form == FORM_FLOWEY || form == FORM_PAPYRUS || form == FORM_MAD_DUMMY || form == FORM_RGUARDS || form == FORM_BOMB || form == FORM_MUFFET || form == FORM_MTT_TILES || form == FORM_MTT_BOX || - form == FORM_MTT_EX) + form == FORM_MTT_EX || form == FORM_ASGORE) b->no_flee = true; b->captures = form == FORM_PAPYRUS; + b->no_mercy = form == FORM_ASGORE; return 0; } const char *form_text(int form) { return form >= FORM_RUINS_COUNT ? snow_form(form)->text : forms[form].text; } diff --git a/games/undertale/src/monsters.h b/games/undertale/src/monsters.h index 1562888a..8c610dfc 100644 --- a/games/undertale/src/monsters.h +++ b/games/undertale/src/monsters.h @@ -15,7 +15,9 @@ enum { MON_VULKIN = MON_WF_COUNT, MON_TSUNDERPLANE, MON_PYROPE, MON_METTATON, MON_RG01, MON_RG02, MON_BOMB, MON_MUFFET, MON_MTT_TILES, MON_HT_COUNT, /* the CORE */ - MON_FFROGGIT = MON_HT_COUNT, MON_WHIMSALOT, MON_ASTIG, MON_MADJICK, MON_KNIGHT, MON_MTT_BOX, MON_MTT_EX, MON_COUNT + MON_FFROGGIT = MON_HT_COUNT, MON_WHIMSALOT, MON_ASTIG, MON_MADJICK, MON_KNIGHT, MON_MTT_BOX, MON_MTT_EX, MON_CORE_COUNT, + /* New Home */ + MON_ASGORE = MON_CORE_COUNT, MON_OMEGA, MON_COUNT }; /* formations: who is fought */ @@ -35,7 +37,9 @@ enum { FORM_MTT_COOK, FORM_LASERS, FORM_RGUARDS, FORM_BOMB, FORM_MUFFET, FORM_MTT_TILES, FORM_HT_COUNT, /* the CORE */ FORM_ASTIG = FORM_HT_COUNT, FORM_WHIM_FROG, FORM_WHIM_ASTIG, FORM_FROG_ASTIG, FORM_KNIGHT_MADJICK, FORM_FROG_ASTIG_WHIM, - FORM_KNIGHT, FORM_MADJICK, FORM_MTT_BOX, FORM_MTT_EX, FORM_COUNT + FORM_KNIGHT, FORM_MADJICK, FORM_MTT_BOX, FORM_MTT_EX, FORM_CORE_COUNT, + /* New Home */ + FORM_ASGORE = FORM_CORE_COUNT, FORM_OMEGA, FORM_COUNT }; enum { @@ -59,7 +63,9 @@ enum { ATK_MADJICK_CHASER = ATK_HT_COUNT, ATK_MADJICK_CORNER, ATK_KNIGHT_MOON, ATK_KNIGHT_SUN, ATK_KNIGHT_STAR, /* (Mettaton EX's from here on) */ ATK_EX_LEGS, ATK_EX_BOMBS, ATK_EX_REWIND, ATK_EX_ARMS, ATK_EX_HEART, ATK_EX_LASER, ATK_EX_BOTS, ATK_EX_DISCO, - ATK_EX_PAIRS, ATK_EX_BREAK, ATK_COUNT + ATK_EX_PAIRS, ATK_EX_BREAK, ATK_CORE_COUNT, + /* New Home */ + ATK_ASG_HELIX = ATK_CORE_COUNT, ATK_ASG_RAIN, ATK_ASG_RINGS, ATK_ASG_HANDS, ATK_ASG_TRIDENT, ATK_COUNT }; /* a formation: up to three monsters, and what the first turn says */ @@ -90,6 +96,10 @@ const struct MonDef *core_mon_def(int id); void core_attack_run(struct Battle *b, int atk, int t); int core_attack_length(int atk); int core_encounter(int room); +const Form *nh_form(int form); /* nhmon.c */ +const struct MonDef *nh_mon_def(int id); +void nh_attack_run(struct Battle *b, int atk, int t); +int nh_attack_length(int atk); void mttex_reset(void); /* before Mettaton EX's battle: the show's ratings back to the start */ int mttex_ratings(void); extern int g_bomb_kind; /* the bomb fought next (BOMB_*: htmon.c) */ diff --git a/games/undertale/src/newhome.c b/games/undertale/src/newhome.c new file mode 100644 index 00000000..e8b34260 --- /dev/null +++ b/games/undertale/src/newhome.c @@ -0,0 +1,342 @@ +/* New Home, the capital: the elevator up from the CORE, the grey street to Asgore's home; his home (the stairs down + * chained shut, a key in the kitchen and one in the hallway, two presents in the children's room); the basement's + * corridors, where the story of Asriel and the first human is told as Frisk walks; the Last Corridor and Sans's + * judgment; the throne room, Asgore among his flowers; the coffins below; the barrier, Asgore's battle and Frisk's + * choice; Flowey, the six SOULs and Omega Flowey; the way out, and Sans's call after. (As the Undertale Wiki describes + * them; what they say is ours, in short.) */ +#include +#include "battle.h" +#include "event.h" +#include "events.h" +#include "game.h" +#include "gfx.h" +#include "hotland.h" +#include "items.h" +#include "menu.h" +#include "monsters.h" +#include "newhome.h" +#include "res.h" +#include "save.h" +#include "snowdin.h" +#include "world.h" + +static void gone(Obj *o) { o->kind = OBJ_NONE; } +static Obj *thing(int x, int y, int w, int h, int event, int name, int arg) { + Obj *o = obj_trigger(x, y, w, h, event, name); + if (o) o->flags = OF_TALK | OF_SOLID, o->arg = (int16_t)arg; + return o; +} +static Obj *touch(int x, int y, int w, int h, int event, int arg) { + Obj *o = obj_trigger(x, y, w, h, event, ACTOR_TRIGGER); + if (o) o->arg = (int16_t)arg; + return o; +} +static Obj *npc(int name, uint16_t spr, int x, int y, int dir) { + const uint16_t s[4] = {spr, spr, spr, spr}; + Obj *o = obj_npc(name, s, x, y, dir, 0); + if (o) o->flags &= (uint16_t)~OF_SOLID; + return o; +} + +/* the story, told in the basement as Frisk walks (in short, in our words): corridor 1, then 2 */ +#define NSTORY 11 +static const int16_t story_x[NSTORY] = {1650, 1850, 2050, 2250, 2450, 2800, 3200, 3600, 4000, 4350, 4650}; +static const char *const story[NSTORY] = { + "* Long ago, a human child fell\n into the RUINS, hurt, and cried\n out for help.", + "* The king's son, ASRIEL, found\n the child and brought it back\n to the castle.", + "* The two became like brother and\n sister. The king and queen\n raised the child as their own.|* Down here, there was hope\n again.", + "* But one day, the child became\n gravely ill.", + "* Its one wish was to see the\n flowers of its home village.\n* There was no way to grant it.|* The next day, the child was\n gone.", + "* Grieving, ASRIEL took the\n child's SOUL into himself, and\n grew powerful.|* He passed through the barrier,\n bearing the child home.", + "* In the village, he found a bed\n of golden flowers, and laid the\n child there.|* The villagers saw him beside\n their dead child, and believed\n he had killed it.", + "* They attacked him with all\n their strength. He could have\n wiped them out.|* Instead, he held back. He only\n smiled, and left.", + "* Badly hurt, ASRIEL came home\n and collapsed. His dust settled\n over the garden.", + "* In one night, the king and\n queen had lost both children.|* So the king made a decree: any\n human who fell here would die.|* With enough SOULs, the barrier\n could be broken.", + "* Soon, now. King ASGORE will\n free us all.|* ...why aren't you smiling?\n* Aren't you glad?\n* Soon, you'll be free.", +}; + +void nh_setup(int room, int from) { + (void)from; + if (room < ROOM_NH_TOWN || room > ROOM_NH_WALL) return; + set_flag(F_NH_IN, 1); + switch (room) { + case ROOM_NH_TOWN: + thing(76, 4490, 48, 46, EV_NH_LIFT, ACTOR_DOOR, 0); + thing(280, 4272, 44, 38, EV_NH_LIFT, ACTOR_DOOR, 1); + obj_save(416, 4546, "* (The city's quiet. It fills you\n with determination.)"); + obj_save(1670, 3175, "* (Home, sweet home... someone's.\n You're filled with determination.)"); + obj_sign(1735, 3140, 20, 20, "* (A box. Its lid won't budge.)"); + break; + case ROOM_NH_HOUSE: + thing(1640, 2815, 60, 30, EV_NH_CHAIN, ACTOR_ITEM, 0); + obj_sign(1765, 2800, 22, 44, "* (A note, hung on the chain.)|* (\"Howdy! I'm in the garden.\n If you need to talk, come by.\")|* (\"The keys are in the kitchen\n and the hallway.\")"); + thing(1290, 2575, 50, 24, EV_NH_KEY, ACTOR_ITEM, 0); + thing(2374, 2808, 20, 32, EV_NH_KEY, ACTOR_ITEM, 1); + obj_sign(2198, 2808, 22, 32, "* (\"Room under renovations.\")"); + thing(1906, 2618, 24, 22, EV_NH_GIFT, ACTOR_ITEM, 0); + thing(1994, 2604, 24, 22, EV_NH_GIFT, ACTOR_ITEM, 1); + obj_sign(1290, 2735, 80, 45, "* (A fireplace. It's warm, but\n not too hot to touch.)"); + obj_sign(2300, 2560, 60, 40, "* (A huge bed. A flowered\n blanket hangs over its end.)"); + break; + case ROOM_NH_BASEMENT: + touch(1533, 2293, 8, 94, EV_NH_UP, 0); + for (int i = flag(F_NH_STORY); i < NSTORY; i++) + touch(story_x[i], i < 5 ? 2293 : 2143, 10, i < 5 ? 94 : 67, EV_NH_STORY, i); + thing(4805, 2108, 50, 35, EV_NH_LIFT, ACTOR_DOOR, 2); + break; + case ROOM_NH_LAST: + obj_save(4690, 2370, "* (Golden light pours in. You're\n filled with determination.)"); + if (!flag(F_NH_SANS)) touch(5300, 2335, 10, 75, EV_NH_SANS, 0); + break; + case ROOM_NH_THALL: + obj_save(6100, 1787, "* (The throne room is just ahead.\n You're filled with determination.)"); + obj_sign(5910, 1750, 22, 40, "* (Throne Room.)"); + break; + case ROOM_NH_THRONE: + if (!flag(F_NH_THRONE)) { + npc(ACTOR_ITEM, SPR_ASGORE_OW, 6018, 1357, DIR_UP); + touch(5903, 1500, 215, 10, EV_NH_THRONE, 0); + } + obj_sign(5963, 1110, 60, 50, "* (A big throne. Beside it, a\n second one under a sheet.)"); + break; + case ROOM_NH_COFFINS: + thing(6360, 2897, 34, 50, EV_NH_COFFIN, ACTOR_ITEM, 0); + for (int i = 1; i < 6; i++) obj_sign(6360 + i * 46, 2897, 34, 50, "* (A coffin for a human. It's\n empty... it's been opened.)"); + break; + case ROOM_NH_BARRIER: + obj_save(6340, 962, "* (The end is close. It fills\n you with determination.)"); + break; + case ROOM_NH_WALL: + if (!flag(F_NH_ASGORE)) { + npc(ACTOR_ITEM, SPR_ASGORE_OW, 6342, 760, DIR_DOWN); + touch(6190, 795, 320, 20, EV_NH_BARRIER, 0); + } else obj_sign(6250, 620, 160, 120, "* (The barrier. Past it, there's\n nothing left to stop you.)"); + break; + } +} + +/* ---------------------------------------------------------------- the events */ +/* the elevators: down to the CORE; the street's to the far end of the basement (once it's been reached); back */ +static int ev_lift(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (c->v[0] == 1 && !flag(F_NH_LIFT)) { + NARRATE("* (The elevator isn't working\n yet.)"); + return 1; + } + NARRATE(c->v[0] == 0 ? "* (Take the elevator back down\n to the CORE?)@Yes@No" : "* (Take the elevator?)@Yes@No"); + if (CHOICE() == 1) return 1; + if (c->v[0] == 0) FADE_TO(ROOM_CORE_HALL, 4285, 125, DIR_DOWN); + else if (c->v[0] == 1) FADE_TO(ROOM_NH_BASEMENT, 4740, 2150, DIR_DOWN); + else FADE_TO(ROOM_NH_TOWN, 292, 4325, DIR_DOWN); + EV_END; +} + +static int ev_key(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (flag(c->v[0] ? F_NH_KEY2 : F_NH_KEY1)) { + NARRATE(c->v[0] ? "* (Nothing else here.)" : "* (A note: \"Help yourself to\n anything you want!\")"); + return 1; + } + if (!c->v[0]) NARRATE("* (A note: \"Help yourself to\n anything you want!\")"); + set_flag(c->v[0] ? F_NH_KEY2 : F_NH_KEY1, 1); + NARRATE("* (You found a key.)"); + EV_END; +} + +static int ev_chain(Ev *c) { + EV_BEGIN; + if (!flag(F_NH_CHAIN)) { + if (!flag(F_NH_KEY1) || !flag(F_NH_KEY2)) { + NARRATE(flag(F_NH_KEY1) || flag(F_NH_KEY2) ? "* (The stairs are chained shut.\n One lock is still closed.)" + : "* (The stairs down are chained\n shut. Two locks.)"); + return 1; + } + NARRATE("* (You unlock the chain.)"); + set_flag(F_NH_CHAIN, 1); + } + FADE_TO(ROOM_NH_BASEMENT, 1560, 2320, DIR_RIGHT); + EV_END; +} + +static int ev_up(Ev *c) { + EV_BEGIN; + FADE_TO(ROOM_NH_HOUSE, 1660, 2856, DIR_DOWN); + EV_END; +} + +static int ev_gift(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (flag(c->v[0] ? F_NH_LOCKET : F_NH_DAGGER)) { + NARRATE("* (An empty box.)"); + return 1; + } + NARRATE("* (A present, wrapped up.)\n* (Open it?)@Yes@No"); + if (CHOICE() == 1) return 1; + if (!item_add(c->v[0] ? ITEM_HEART_LOCKET : ITEM_WORN_DAGGER)) { + NARRATE("* (You're carrying too much.)"); + return 1; + } + set_flag(c->v[0] ? F_NH_LOCKET : F_NH_DAGGER, 1); + NARRATE(c->v[0] ? "* (Inside, a heart-shaped locket.)\n* (You take it.)" : "* (Inside, an old dagger.)\n* (You take it.)"); + EV_END; +} + +static int ev_story(Ev *c) { + EV_BEGIN; + c->v[0] = c->self ? c->self->arg : 0; + if (c->self) gone(c->self); + if (flag(F_NH_STORY) > c->v[0]) return 1; + set_flag(F_NH_STORY, c->v[0] + 1); + NARRATE(story[c->v[0]]); + if (c->v[0] == NSTORY - 1) set_flag(F_NH_LIFT, 1); + EV_END; +} + +/* the Last Corridor: Sans, and what EXP and LOVE are */ +static int ev_sans(Ev *c) { + Obj *s = obj_get(ACTOR_SANS); + EV_BEGIN; + if (c->self) gone(c->self); + s = obj_sans(pl.x + 110, pl.y + 29, DIR_LEFT); + (void)s; + SAY(FACE_SANS, "* so, you've made it this far.\n* soon you'll meet the king.|* together, you'll decide the\n future of this world.|* so now, you'll be judged.\n* for every bit of EXP you've\n earned."); + SAY(FACE_SANS, "* what's EXP? \"execution\n points.\" a measure of how\n much you've hurt others.|* the more you kill, the easier\n it gets to stop caring.|* that's your LOVE: your \"level\n of violence.\""); + if (flag(F_PAPYRUS) == 2) SAY(FACE_SANS, "* ...and you killed my brother.\n* i hope it was worth it."); + if (sv.exp == 0) + SAY(FACE_SANS, "* but you never gained any LOVE.\n* you stayed... you.|* heh. no LOVE... but lots of\n love. know what i mean?|* ...or not. that's ok."); + else SAYF(FACE_SANS, "* you've got some LOVE now.\n* LV %d.|* but there's still good in you.\n* i can tell.", sv.lv); + SAY(FACE_SANS, "* anyway. what happens next...\n* we leave up to you."); + set_flag(F_NH_SANS, 1); + gone(obj_get(ACTOR_SANS)); + EV_END; +} + +/* the throne room: Asgore and his flowers */ +static int ev_throne(Ev *c) { + Obj *a = obj_get(ACTOR_ITEM); + EV_BEGIN; + if (c->self) gone(c->self); + SAY(FACE_ASGORE, "* Dum dum dum...|* Oh? Is someone there?\n* Just a moment! I have to\n finish watering these.|* Howdy! How can I..."); + a = obj_get(ACTOR_ITEM); + a->dir = DIR_DOWN; + SAY(FACE_ASGORE, "* ...oh.|* I so wish we could have tea,\n like any other afternoon.|* But... you know how this must\n be.|* When you are ready, come to\n the next room."); + a = obj_get(ACTOR_ITEM); + WALK(a, 5968, a->y, 2); + a = obj_get(ACTOR_ITEM); + WALK(a, 5968, 1110, 2); + gone(obj_get(ACTOR_ITEM)); + set_flag(F_NH_THRONE, 1); + EV_END; +} + +static int ev_coffin(Ev *c) { + EV_BEGIN; + SAYF(FACE_NONE, "* (A coffin. The name on it is\n \"%s\".)|* (It's been opened.)", sv.name); + EV_END; +} + +/* Sans's call, after: how things turned out (what Frisk did decides it) */ +static int ev_call_after(Ev *c) { + EV_BEGIN; + SAY(FACE_SANS, "* ring...|* heya. it's me, sans.\n* figured you'd want to know\n how it went down here."); + if (flag(F_TORIEL_FIGHT) == 1) SAY(FACE_SANS, "* the lady from the ruins came\n back. she runs things now.|* she teaches at the school,\n too. guess she always\n wanted to."); + else if (flag(F_PAPYRUS) != 2 && flag(F_UNDYNE) != 2) SAY(FACE_SANS, "* undyne's in charge now, and\n papyrus is her right hand.|* they're keeping everyone safe."); + else SAY(FACE_SANS, "* nobody's really in charge.\n* it's... not great."); + if (flag(F_CORE_MTT) == 1) SAY(FACE_SANS, "* mettaton's back on tv.\n* the ratings are through the\n roof."); + if (flag(F_CORE_MTT) == 2) SAY(FACE_SANS, "* no more of mettaton's shows,\n though. folks miss him."); + SAY(FACE_SANS, "* the king's gone. and the barrier\n is still up.|* but we're getting by.|* so don't worry about us, kid.\n* live your life up there.|* see ya."); + EV_END; +} + +/* the barrier: Asgore, his battle, Frisk's choice; Flowey and the six SOULs; out */ +static int ev_barrier(Ev *c) { + Obj *a = obj_get(ACTOR_ITEM); + EV_BEGIN; + if (c->self) gone(c->self); + (void)a; + SAY(FACE_ASGORE, "* Here it is: the barrier.\n* The wall that holds us all\n underground.|* Anything left to do?\n* Go and do it first.@Ready@Not yet"); + if (CHOICE() == 1) { + SAY(FACE_ASGORE, "* I see. Take your time."); + FADE_TO(ROOM_NH_BARRIER, 6415, 985, DIR_DOWN); + return 1; + } + SAY(FACE_ASGORE, "* ...Then let us begin.|* Human... I am glad we met.|* Farewell."); + NARRATE("* (Asgore swings his trident.)\n* (Your MERCY button breaks.)"); + BATTLE(FORM_ASGORE); + if (battle_result() == BR_DIED) return 1; + NARRATE("* (Asgore is on his knees.)\n* (What will you do?)@Kill@Spare"); + c->v[0] = CHOICE(); + if (c->v[0] == 0) { + set_flag(F_NH_ASGORE, 2); + sv.kills++; + NARRATE("* (Asgore turns to dust.)"); + } else { + set_flag(F_NH_ASGORE, 1); + SAY(FACE_ASGORE, "* ...after everything I've done,\n you would spare me?|* I declared war the day my\n son died. I swore to take\n every human SOUL...|* ...but I never wanted any\n of it. I only wanted hope\n back."); + SAY(FACE_ASGORE, "* Human... I am so sorry.|* Could you... stay with me? We\n could be like a family..."); + g_shake = 10; + NARRATE("* (White pellets rain down on\n Asgore.)\n* (He turns to dust.)"); + } + gone(obj_get(ACTOR_ITEM)); + /* Flowey, where Asgore was */ + { + static const uint16_t s[4] = {SPR_FLOWEY, SPR_FLOWEY, SPR_FLOWEY, SPR_FLOWEY}; + Obj *f = obj_npc(ACTOR_FLOWEY, s, 6336, 740, DIR_DOWN, 0); + if (f) f->flags &= (uint16_t)~OF_SOLID; + } + SAY(FACE_FLOWEY, "* Heh. You fool.|* Still haven't figured it out?|* Down here, you kill, or you\n get killed."); + SAY(FACE_FLOWEY, "* And now... his six SOULs are\n MINE."); + g_shake = 16; + NARRATE("* (The six SOULs rise from their\n jars, and gather around\n Flowey.)"); + BATTLE(FORM_OMEGA); + set_flag(F_NH_FLOWEY, 3); /* (beaten: spared or killed below) */ + SAY(FACE_FLOWEY, "* ...|* Why...?|* Why are you being so... nice\n to me?|* I can't understand.\n* I just can't understand..."); + NARRATE("* (Flowey is beaten.)\n* (What will you do?)@Spare@Kill"); + if (CHOICE() == 0) { + set_flag(F_NH_FLOWEY, 1); + SAY(FACE_FLOWEY, "* ...you're letting me go? I'll\n just come back, you know.|* ...|* ...you make no sense."); + NARRATE("* (Flowey sinks into the ground.)"); + } else { + set_flag(F_NH_FLOWEY, 2); + NARRATE("* (Flowey is gone.)"); + } + gone(obj_get(ACTOR_FLOWEY)); + NARRATE("* (With the six SOULs' power, you\n cross the barrier.)|* (The sun is rising.)"); + set_flag(F_NH_DONE, 1); + sv.room = (int16_t)ROOM_NH_BARRIER, sv.x = 6400, sv.y = 985; + save_write_auto(); + /* Sans's call, then the end */ + c->v[1] = 1; + EV_END; +} + +int nh_event(Ev *c) { + switch (c->id) { + case EV_NH_LIFT: return ev_lift(c); + case EV_NH_KEY: return ev_key(c); + case EV_NH_CHAIN: return ev_chain(c); + case EV_NH_UP: return ev_up(c); + case EV_NH_GIFT: return ev_gift(c); + case EV_NH_STORY: return ev_story(c); + case EV_NH_SANS: return ev_sans(c); + case EV_NH_THRONE: return ev_throne(c); + case EV_NH_COFFIN: return ev_coffin(c); + case EV_NH_BARRIER: { + int r = ev_barrier(c); + if (r && flag(F_NH_DONE) && c->v[1] == 1) { /* (on to the call) */ + c->id = EV_NH_CALL, c->at = NULL, c->v[1] = 0; + return 0; + } + return r; + } + case EV_NH_CALL: { + int r = ev_call_after(c); + if (r) menu_end_open("THE END|You went home. The monsters\nstayed underground.|(A neutral ending.)"); + return r; + } + } + return -1; +} diff --git a/games/undertale/src/newhome.h b/games/undertale/src/newhome.h new file mode 100644 index 00000000..21c76a16 --- /dev/null +++ b/games/undertale/src/newhome.h @@ -0,0 +1,7 @@ +/* Undertale: New Home (newhome.c), its battles (nhmon.c: Asgore, Omega Flowey). */ +#ifndef UT_NEWHOME_H +#define UT_NEWHOME_H +#include "event.h" +void nh_setup(int room, int from); +int nh_event(Ev *c); +#endif diff --git a/games/undertale/src/nhmon.c b/games/undertale/src/nhmon.c new file mode 100644 index 00000000..e0b1edce --- /dev/null +++ b/games/undertale/src/nhmon.c @@ -0,0 +1,452 @@ +/* New Home's battles: Asgore at the barrier (the Undertale Wiki's records of the game: his HP, his ACT, how his + * guard drops, his fire and his trident; he breaks MERCY before it starts), and Omega Flowey with the six SOULs he + * took: not turn by turn, his attacks one after another; now and then a SOUL fights for him, until Frisk reaches the + * ACT that appears among its attack and calls for help; all six helped, they turn on him, and FIGHT can reach him. + * Their words are short ones of our own. */ +#include +#include "battle.h" +#include "game.h" +#include "gfx.h" +#include "items.h" +#include "monsters.h" +#include "res.h" +#include "world.h" + +/* ---------------------------------------------------------------- Asgore */ +enum { AS_DOWN, AS_TALKS }; /* (b->state[]) */ +static void act_asgore(Battle *b, Monster *m, int act, char *t, int cap) { + (void)act; + int n = ++b->state[AS_TALKS]; + if (n < 3 || sv.exp > 0) snprintf(t, (size_t)cap, "* You tell Asgore you don't want\n to fight him.\n* He doesn't answer."); + else if (n == 3) { + snprintf(t, (size_t)cap, "* You tell Asgore you don't want\n to fight. His hands tremble.\n* His ATTACK and DEFENSE drop."); + m->at = (int16_t)max_i(1, m->at - 1), m->df = (int16_t)(m->df - 10); + } else snprintf(t, (size_t)cap, "* Asgore's hands are shaking."); +} +static bool item_asgore(Battle *b, Monster *m, int item, char *t, int cap) { + (void)b, (void)t, (void)cap; + /* her pie: its smell reminds him of someone */ + if (item == ITEM_BUTTERSCOTCH_PIE) m->at = (int16_t)max_i(1, m->at - 1), m->df = (int16_t)(m->df - 5); + return false; +} +static const char *talk_asgore(Battle *b, Monster *m) { + (void)m; + if (b->state[AS_DOWN]) return "Ah..."; + return NULL; /* (he says nothing: he looks away) */ +} +static const char *flavor_asgore(Battle *b, Monster *m) { + /* after turn 20 his guard falls, turn by turn */ + if (b->turn >= 20 && m->df > -120) m->df = (int16_t)(m->df - 10); + if (b->turn <= 1) return "* ASGORE attacks!"; + if (b->state[AS_TALKS] == 3 && sv.exp == 0) return "* Asgore's hands are shaking."; + static const char *const lines[] = {"* Asgore looks away.", "* Asgore's trident glints.", "* You feel the heat of his fire.", + "* The barrier hums behind him.", "* Seems like no one can save you now."}; + return lines[rnd_n(5)]; +} +static bool hit_asgore(Battle *b, Monster *m, int dmg) { + if (m->hp - dmg > 0) return false; + /* down on his knees: what's next is Frisk's choice, not the battle's */ + m->hp = 1, m->hurt = 30, m->shake = 8; + b->state[AS_DOWN] = 1; + return true; +} +static int attack_asgore(Battle *b, Monster *m) { + (void)m; + if (b->state[AS_DOWN]) return -1; + static const uint8_t seq[6] = {ATK_ASG_HELIX, ATK_ASG_TRIDENT, ATK_ASG_RINGS, ATK_ASG_RAIN, ATK_ASG_HANDS, ATK_ASG_TRIDENT}; + return seq[(b->turn - 1) % 6]; +} +static bool ends_asgore(Battle *b, Monster *m) { + (void)m; + if (b->state[AS_DOWN]) b->result = BR_SCRIPTED; + return false; +} +static void draw_asgore(Battle *b, Monster *m, int x, int y) { + uint16_t s = b->state[AS_DOWN] ? SPR_ASGORE_KNEEL : m->hurt ? SPR_ASGORE_HURT : SPR_ASGORE_B; + int fr = m->hurt || b->state[AS_DOWN] ? 0 : (int)(g_frame / 8); + gfx_sprite(s, fr, x, y + 4, 0, 255); +} + +static const MonDef nh_defs[MON_COUNT - MON_CORE_COUNT] = { + [MON_ASGORE - MON_CORE_COUNT] = { + .name = "ASGORE", .hp = 3500, .at = 8, .df = -30, .spr_idle = SPR_ASGORE_B, .spr_hurt = SPR_ASGORE_HURT, + .idle_speed = 8, .check = "The king of the monsters.", .acts = {"Talk"}, .nacts = 1, .flags = MF_BOSS, + .act = act_asgore, .talk = talk_asgore, .attack = attack_asgore, .flavor = flavor_asgore, .on_hit = hit_asgore, + .ends = ends_asgore, .draw = draw_asgore, .on_item = item_asgore}, + [MON_OMEGA - MON_CORE_COUNT] = {.name = "Flowey", .hp = 9999, .flags = MF_BOSS | MF_NOT_KILLABLE}, +}; +const MonDef *nh_mon_def(int id) { return &nh_defs[id - MON_CORE_COUNT]; } +static const Form nh_forms[FORM_COUNT - FORM_CORE_COUNT] = { + [FORM_ASGORE - FORM_CORE_COUNT] = {{MON_ASGORE}, 1, "* (Twilight shines through the\n barrier.)\n* (You're filled with DETERMINATION.)"}, + [FORM_OMEGA - FORM_CORE_COUNT] = {{MON_OMEGA}, 1, ""}, +}; +const Form *nh_form(int form) { return &nh_forms[form - FORM_CORE_COUNT]; } + +/* ---------------------------------------------------------------- Asgore's attacks */ +static int bx0(void) { return bt.x0 + 3; } +static int bx1(void) { return bt.x1 - 3; } +static int by0(void) { return bt.y0 + 3; } +static int by1(void) { return bt.y1 - 3; } +#define P(v) ((v) * FX) +static Bullet *shot(uint16_t spr, int x, int y, int vx, int vy) { + Bullet *b = bullet_new(spr, P(x), P(y), vx, vy); + if (b) b->owner = (uint8_t)bt.atk_owner; + return b; +} +static Bullet *fire(int x, int y, int vx, int vy) { + Bullet *b = shot(SPR_FIREBULLET, x, y, vx, vy); + if (b) b->r = 3, b->flags |= BF_NOCLIP; + return b; +} +/* four waves of fire, curling down in a double helix */ +static void atk_helix(int t) { + if (t % 4 || t > 140) return; + int cx = board_cx(), a = gfx_sin(t * 6) * ((bx1() - bx0()) / 2 - 6) / 1024; + fire(cx + a, by0() - 6, 0, P(2)); + fire(cx - a, by0() - 6, 0, P(2)); +} +/* a stream down the middle, and a cloud of fire over one side, then the other */ +static void atk_rain(int t) { + if (t % 5 == 0 && t < 150) fire(board_cx() - 6 + rnd_n(13), by0() - 6, 0, P(2)); + if (t % 3 == 0 && t < 150) { + bool left = (t / 50) % 2; + int w = (bx1() - bx0()) / 2 - 16; + fire(left ? bx0() + rnd_n(w) : bx1() - rnd_n(w), by0() - 6, 0, P(3)); + } +} +/* rings of fire, a gap in each, closing in round the SOUL */ +static void atk_rings(int t) { + if (t % 45 || t > 120) return; + int gap = rnd_n(12); + for (int k = 0; k < 12; k++) { + if (k == gap || k == (gap + 1) % 12) continue; + Bullet *b = fire(board_cx(), board_cy(), 0, 0); + if (!b) continue; + b->kind = BK_ORBIT, b->a = (int16_t)board_cx(), b->b = (int16_t)board_cy(), b->c = (int16_t)P(80); + b->d = (int16_t)(k * 256 / 12 * 16), b->vx = 12 + t / 10, b->vy = -P(1) / 2, b->life = 150; + } +} +/* his hands sweep down the sides, leaving fire; then it all flies at where the SOUL was */ +static int aim_x, aim_y; +static void atk_hands(int t) { + if (t < 80 && t % 8 == 0) { + for (int side = 0; side < 2; side++) { + Bullet *b = fire(side ? bx1() - 4 : bx0() + 4, by0() + 4 + t * (by1() - by0() - 8) / 80, 0, 0); + if (b) b->kind = BK_SCRIPT, b->a = 1; + } + } + if (t == 85) aim_x = soul_x(), aim_y = soul_y(); + if (t >= 85) + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->a != 1) continue; + int dx = aim_x - b->x / FX, dy = aim_y - b->y / FX, d = abs_i(dx) + abs_i(dy); + b->kind = BK_LINEAR; + if (d) b->vx = dx * P(3) / d, b->vy = dy * P(3) / d; + } +} +/* his eyes flash blue or orange, then his trident sweeps the whole board in that colour */ +static uint8_t trident[3]; +static void atk_trident(int t) { + if (t == 0) + for (int k = 0; k < 3; k++) trident[k] = (uint8_t)(rnd_n(2) ? BC_BLUE : BC_ORANGE); + int k = (t - 20) / 45, ph = (t - 20) % 45; + if (t < 20 || k >= 3) return; + if (ph == 0) { /* the warning: a flash of the colour along the top */ + Bullet *w = shot(SPR_RECT, board_cx(), by0() + 2, 0, 0); + if (w) w->flags |= BF_BOX | BF_HARMLESS, w->w = (int16_t)(bx1() - bx0()), w->h = 3, w->color = trident[k], w->life = 18; + } + if (ph == 20) { + bool left = k % 2; + Bullet *s = shot(SPR_RECT, left ? bx0() - 4 : bx1() + 4, board_cy(), left ? P(9) : -P(9), 0); + if (s) s->flags |= BF_BOX | BF_NOCLIP, s->w = 8, s->h = (int16_t)(by1() - by0()), s->color = trident[k], s->life = 30; + } +} + +int nh_attack_length(int atk) { return atk == ATK_ASG_TRIDENT ? 160 : 165; } +void nh_attack_run(Battle *b, int atk, int t) { + (void)b; + if (t < 0) { + board_set(atk == ATK_ASG_RINGS ? 110 : 150, 100); + soul_set_mode(SOUL_RED); + return; + } + switch (atk) { + case ATK_ASG_HELIX: atk_helix(t); break; + case ATK_ASG_RAIN: atk_rain(t); break; + case ATK_ASG_RINGS: atk_rings(t); break; + case ATK_ASG_HANDS: atk_hands(t); break; + case ATK_ASG_TRIDENT: atk_trident(t); break; + } +} + +/* ---------------------------------------------------------------- Omega Flowey */ +enum { OF_ATTACK, OF_WARNING, OF_SOUL, OF_REBEL, OF_DONE }; +enum { OA_EYES, OA_FLAME, OA_PELLETS, OA_VINES, OA_BOMBS, OA_FINGERS, OA_COUNT }; +static struct { + int st, t, atk, n, souls, helped, hits, msg_t, refused; + const char *msg; + Bullet *act; +} om; +static const uint16_t soul_spr[6] = {SPR_SOUL_LIGHT_BLUE, SPR_SOUL_ORANGE, SPR_SOUL_BLUE, SPR_SOUL_PURPLE, SPR_SOUL_GREEN, + SPR_SOUL_YELLOW}; +static const uint32_t soul_rgb[6] = {0x42FCFF, 0xFCA600, 0x003CFF, 0xD535D9, 0x00C000, 0xFFFF00}; +#define OM_HITS 6 +static void say_top(const char *s) { om.msg = s, om.msg_t = 110; } + +void omega_start(void) { + bt.scripted = true; + board_set_rect(65, 120, 255, 194); + bt.x0 = bt.tx0, bt.y0 = bt.ty0, bt.x1 = bt.tx1, bt.y1 = bt.ty1; + bt.sx = P(board_cx()), bt.sy = P(board_cy()); + soul_set_mode(SOUL_RED); + om.st = OF_ATTACK, om.t = 0, om.atk = 0, om.n = 0, om.souls = 0, om.helped = 0, om.hits = 0, om.refused = 0, om.act = NULL; + say_top("* Flowey holds the six SOULs."); +} + +/* his own: the eyes' X shots, the flamethrowers, a ring of pellets closing in, vines along flashing lines, bombs, + * finger guns from both sides */ +static void omega_attack(int a, int t) { + int cx = board_cx(); + switch (a) { + case OA_EYES: + if (t % 18 == 0 && t < 140) + for (int k = -3; k <= 3; k++) { + Bullet *b = shot(SPR_XSHOT, cx + (t / 18 % 2 ? 40 : -40), by0() - 10, k * P(1) / 2, P(2)); + if (b) b->r = 3, b->flags |= BF_NOCLIP, b->dmg = 6; + } + break; + case OA_FLAME: + if (t % 30 == 10 && t < 140) + for (int side = 0; side < 2; side++) { + int y = by0() + 10 + rnd_n(by1() - by0() - 20); + Bullet *b = shot(SPR_RECT, side ? bx1() : bx0(), y, side ? -P(3) : P(3), 0); + if (b) b->flags |= BF_BOX | BF_NOCLIP, b->w = 40, b->h = 8, b->color = BC_WHITE, b->life = 40, b->dmg = 6; + } + break; + case OA_PELLETS: + if (t % 60 == 0 && t < 130) + for (int k = 0; k < 10; k++) { + int an = k * 256 / 10; + Bullet *b = shot(SPR_SPINBULLET, soul_x() + gfx_cos(an) * 40 / 1024, soul_y() + gfx_sin(an) * 40 / 1024, 0, 0); + if (b) b->kind = BK_SCRIPT, b->a = 30, b->r = 3, b->anim = 3, b->dmg = 6, b->flags |= BF_NOCLIP; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_SPINBULLET) continue; + if (b->a) { /* (still, a moment: the warning) */ + b->a--; + b->alpha = b->a % 4 < 2 ? 120 : 255, b->flags |= BF_HARMLESS; + if (!b->a) { + int dx = soul_x() - b->x / FX, dy = soul_y() - b->y / FX, d = abs_i(dx) + abs_i(dy); + b->kind = BK_LINEAR, b->alpha = 255, b->flags &= (uint8_t)~BF_HARMLESS; + if (d) b->vx = dx * P(2) / d, b->vy = dy * P(2) / d; + } + } + } + break; + case OA_VINES: + if (t % 40 == 0 && t < 130) + for (int k = 0; k < 3; k++) { + int x = soul_x() + (k - 1) * 22; + Bullet *w = shot(SPR_RECT, x, board_cy(), 0, 0); + if (w) w->flags |= BF_BOX | BF_HARMLESS, w->w = 1, w->h = (int16_t)(by1() - by0()), w->color = BC_ORANGE, w->life = 20; + Bullet *v = shot(SPR_RECT, x, by0() - 60, 0, 0); + if (v) v->kind = BK_SCRIPT, v->a = 20, v->flags |= BF_BOX | BF_NOCLIP, v->w = 5, v->h = 100, v->dmg = 6; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *v = &bullets[i]; + if (v->kind != BK_SCRIPT || v->spr != SPR_RECT) continue; + if (v->a) v->a--; + else v->y += P(8); + if (v->y > P(by1() + 70)) v->kind = BK_NONE; + } + break; + case OA_BOMBS: + if (t % 20 == 0 && t < 130) { + Bullet *b = shot(SPR_BOMB, bx0() + 8 + rnd_n(bx1() - bx0() - 16), by0() - 8, 0, P(2)); + if (b) b->kind = BK_SCRIPT, b->r = 5, b->dmg = 6, b->flags |= BF_NOCLIP; + } + for (int i = 0; i < MAX_BULLETS; i++) { + Bullet *b = &bullets[i]; + if (b->kind != BK_SCRIPT || b->spr != SPR_BOMB) continue; + b->y += b->vy; + if (b->y >= P(by1() - 4)) { /* it hits the floor: a burst */ + int x = b->x / FX, y = b->y / FX; + b->kind = BK_NONE; + for (int k = 0; k < 8; k++) { + Bullet *s = shot(SPR_SPINBULLET, x, y, gfx_cos(k * 32) * 2 * FX / 1024, gfx_sin(k * 32) * 2 * FX / 1024); + if (s) s->r = 3, s->dmg = 6, s->life = 50; + } + } + } + break; + case OA_FINGERS: + if (t % 16 == 0 && t < 140) { + bool left = (t / 16) % 2; + Bullet *b = shot(SPR_ORB, left ? bx0() - 6 : bx1() + 6, soul_y(), left ? P(3) : -P(3), 0); + if (b) b->r = 4, b->dmg = 6, b->flags |= BF_NOCLIP; + } + break; + } +} + +/* a SOUL's: the light blue's knives, the orange's fists, the blue's stars and shoes, the purple's words, the + * green's pans and their fire, the yellow's gun; once called on, what they throw heals instead */ +static void soul_attack(int s, int t) { + int cx = board_cx(), cy = board_cy(); + uint8_t col = om.helped ? BC_GREEN : BC_WHITE; + Bullet *b = NULL; + switch (s) { + case 0: + if (t % 12 == 0) b = shot(SPR_KNIFE, bx0() - 4, by0() + rnd_n(by1() - by0()), P(3), (t / 60 % 2 ? 1 : -1) * P(1)); + break; + case 1: + if (t % 50 == 0) + for (int k = 0; k < 8; k++) { + b = shot(SPR_DOGPAW, cx, cy, 0, 0); + if (b) b->kind = BK_ORBIT, b->a = (int16_t)cx, b->b = (int16_t)cy, b->c = (int16_t)P(70), b->d = (int16_t)(k * 32 * 16), + b->vx = 30, b->vy = -P(1) / 2, b->life = 130, b->r = 4, b->color = col, b->dmg = om.helped ? 2 : 6; + b = NULL; + } + break; + case 2: + if (t % 14 == 0) { + b = shot(SPR_SHOE, bx1() + 6, cy + gfx_sin(t * 8) * 30 / 1024, -P(2), 0); + if (b) b->color = col, b->r = 4, b->dmg = om.helped ? 2 : 6; + b = shot(SPR_STAR, bx0() + rnd_n(bx1() - bx0()), by0() - 4, 0, P(1)); + } + break; + case 3: + if (t % 10 == 0) { + bool left = (t / 10) % 2; + b = shot(SPR_RECT, left ? bx0() : bx1(), by0() + 8 + rnd_n(by1() - by0() - 16), left ? P(2) : -P(2), 0); + if (b) b->flags |= BF_BOX, b->w = 22, b->h = 6; + } + break; + case 4: + if (t % 9 == 0) b = shot(SPR_FIREBULLET, cx + (rnd_n(3) - 1) * 40, cy - 10, (rnd_n(3) - 1) * P(1) / 2, -P(3)); + if (b) b->ay = P(1) / 8; + break; + case 5: + if (t % 15 == 0) { + int dx = soul_x() - cx, dy = soul_y() - by0(), d = abs_i(dx) + abs_i(dy); + b = shot(SPR_ORB, cx, by0() + 4, d ? dx * P(3) / d : 0, d ? dy * P(3) / d : P(3)); + } + break; + } + if (b) b->color = col, b->r = b->r ? b->r : 4, b->dmg = om.helped ? 2 : 6, b->flags |= BF_NOCLIP; +} +static void clear_bullets(void) { + for (int i = 0; i < MAX_BULLETS; i++) bullets[i].kind = BK_NONE; +} +/* a button among the bullets (ACT, then FIGHT): it drifts to the SOUL; touched, it's pressed */ +static Bullet *button_new(uint16_t spr) { + Bullet *b = bullet_new(spr, P(board_cx()), P(bt.y0 + 6), 0, 0); + if (b) b->kind = BK_SCRIPT, b->flags |= BF_HARMLESS | BF_NOCLIP, b->a = 7; + return b; +} +static bool is_button(const Bullet *b) { + return b && b->kind == BK_SCRIPT && b->a == 7 && (b->spr == SPR_ACTBUTTON || b->spr == SPR_FIGHTBT); +} +static bool button_step(Bullet *b) { + if (!is_button(b)) return false; + int dx = soul_x() - b->x / FX, dy = soul_y() - b->y / FX; + b->x += dx > 0 ? FX * 3 / 4 : dx < 0 ? -FX * 3 / 4 : 0, b->y += dy > 0 ? FX * 3 / 4 : dy < 0 ? -FX * 3 / 4 : 0; + if (abs_i(dx) < 9 && abs_i(dy) < 7) { + b->kind = BK_NONE; + return true; + } + return false; +} + +void omega_update(uint32_t keys, uint32_t pressed) { + (void)pressed; + if (bt.inv) bt.inv--; + soul_update(keys); + bullets_update(); + soul_hit_test(); + if (om.msg_t) om.msg_t--; + /* at 0 HP: but it refused (the SOULs won't let Frisk go) */ + if (sv.hp < 1) { + sv.hp = sv.maxhp, om.refused++; + say_top("* Your SOUL won't give up."); + } + om.t++; + switch (om.st) { + case OF_ATTACK: + omega_attack(om.atk, om.t); + if (om.t >= 160) { + om.t = 0, om.n++; + om.atk = (om.atk + 1 + rnd_n(OA_COUNT - 1)) % OA_COUNT; + if (om.souls < 6 && om.n % 2 == 0) om.st = OF_WARNING, clear_bullets(), say_top("* WARNING!"); + } + break; + case OF_WARNING: + if (om.t >= 45) om.st = OF_SOUL, om.t = 0, om.helped = 0, om.act = NULL; + break; + case OF_SOUL: + soul_attack(om.souls, om.t); + if (om.t == 70) om.act = button_new(SPR_ACTBUTTON); + if (!om.helped && button_step(om.act)) { + om.helped = 1, om.t = 200; + say_top("* You called for help..."); + for (int i = 0; i < MAX_BULLETS; i++) + if (bullets[i].kind != BK_NONE) bullets[i].color = BC_GREEN, bullets[i].dmg = 2; + } + if (om.t >= 300) { + clear_bullets(); + om.t = 0; + if (om.helped) { + om.souls++; + say_top(om.souls < 6 ? "* A SOUL is on your side." : "* The SOULs turn on him! DEFENSE 0!"); + } + om.st = om.souls >= 6 ? OF_REBEL : OF_ATTACK; + } + break; + case OF_REBEL: + /* his attacks, slower now; FIGHT comes down among them */ + if (om.t % 2 == 0) omega_attack(om.atk, om.t / 2); + if (om.t >= 320) om.t = 0, om.atk = (om.atk + 1) % OA_COUNT; + if (!is_button(om.act)) { + if (om.t % 120 == 60) om.act = button_new(SPR_FIGHTBT); + } else if (button_step(om.act)) { + om.hits++, om.act = NULL; + g_shake = 8; + say_top(om.hits < OM_HITS ? "* You hit Flowey!" : "* Flowey falls apart."); + if (om.hits >= OM_HITS) om.st = OF_DONE, om.t = 0, clear_bullets(); + } + break; + case OF_DONE: + if (om.t >= 90) bt.result = BR_SCRIPTED; + break; + } +} + +void omega_draw(void) { + gfx_rect(0, 0, SCREEN_W, SCREEN_H, C_BLACK, 255); + /* his screen: his face, laughing while he wins; the SOUL he's using, beside it */ + bool hurt = om.st == OF_REBEL || om.st == OF_DONE; + if (om.st != OF_DONE || om.t % 6 < 3) { + if (hurt && g_frame % 30 < 15) gfx_sprite(SPR_OMEGA, 0, 160 + (g_frame % 4 < 2 ? 2 : -2), 56, 0, 255); + else if (om.st == OF_ATTACK) gfx_sprite(SPR_OMEGA_LAUGH, (int)(g_frame / 6), 160, 56, 0, 255); + else gfx_sprite(SPR_OMEGA, 0, 160, 56, 0, 255); + } + for (int k = 0; k < 6; k++) { /* the six SOULs: dim once they've sided with Frisk */ + int x = k < 3 ? 46 + k * 16 : 242 + (k - 3) * 16; + gfx_sprite(soul_spr[k], 0, x, 20, 0, k < om.souls ? 90 : 255); + } + if (om.st == OF_WARNING && om.t % 10 < 6) { + gfx_rect(120, 92, 80, 14, rgb565(soul_rgb[om.souls]), 255); + gfx_text(FONT_SMALL, 134, 94, "WARNING", C_BLACK, 255); + } + /* the board */ + gfx_rect(bt.x0, bt.y0, bt.x1 - bt.x0, bt.y1 - bt.y0, C_WHITE, 255); + gfx_rect(bt.x0 + 2, bt.y0 + 2, bt.x1 - bt.x0 - 4, bt.y1 - bt.y0 - 4, C_BLACK, 255); + gfx_clip(bt.x0 + 2, bt.y0 + 2, bt.x1 - bt.x0 - 4, bt.y1 - bt.y0 - 4); + bullets_draw(); + gfx_clip(0, 0, SCREEN_W, SCREEN_H); + if (!bt.inv || (bt.inv / 2) % 2) gfx_sprite(SPR_HEART, 0, soul_x(), soul_y(), 0, 255); + if (om.msg_t && om.msg) gfx_text(FONT_SMALL, 70, 107, om.msg, C_WHITE, 255); + battle_draw_hud(); +} diff --git a/games/undertale/src/rooms.c b/games/undertale/src/rooms.c index cec9cc11..52b9e7b7 100644 --- a/games/undertale/src/rooms.c +++ b/games/undertale/src/rooms.c @@ -6,6 +6,7 @@ #include "game.h" #include "hotland.h" #include "monsters.h" +#include "newhome.h" #include "ruins.h" #include "snowdin.h" #include "waterfall.h" @@ -26,6 +27,7 @@ void room_setup(int room, int from) { ht3_setup(room, from); res_setup(room, from); core_setup(room, from); + nh_setup(room, from); } /* each frame Frisk can walk: what a room watches (a rock on its switch, a cracked floor) */ diff --git a/games/undertale/src/text.c b/games/undertale/src/text.c index 983664d8..227cbf65 100644 --- a/games/undertale/src/text.c +++ b/games/undertale/src/text.c @@ -31,6 +31,7 @@ static const Expr flowey_faces[] = { }; static const Expr sans_faces[] = {{SPR_FACE_SANS, 4, 0}, {SPR_FACE_SANSCHUCKLE, 4, 0}, {SPR_FACE_SANSWINK, 4, 0}}; static const Expr alphys_faces[] = {{SPR_FACE_ALPHYS, 4, 0}}; +static const Expr asgore_faces[] = {{SPR_FACE_ASGORE, 4, -4}}; static const Expr papyrus_faces[] = { {SPR_FACE_PAPYRUS, 4, -4}, {SPR_FACE_PAPYRUSEVIL, 4, -4}, {SPR_FACE_PAPYRUSLAUGH, 4, -4}, {SPR_FACE_PAPYRUSMAD, 4, -4}, {SPR_FACE_PAPYRUSSIDE, 4, -4}, @@ -44,6 +45,7 @@ static const struct { [FACE_SANS] = {sans_faces, sizeof sans_faces / sizeof sans_faces[0]}, [FACE_PAPYRUS] = {papyrus_faces, sizeof papyrus_faces / sizeof papyrus_faces[0]}, [FACE_ALPHYS] = {alphys_faces, 1}, + [FACE_ASGORE] = {asgore_faces, 1}, }; /* ---------------------------------------------------------------- the writer */ diff --git a/games/undertale/tests/check.py b/games/undertale/tests/check.py index d67949bd..67356fd5 100644 --- a/games/undertale/tests/check.py +++ b/games/undertale/tests/check.py @@ -39,6 +39,7 @@ ITEM_BURNT_PAN, ITEM_INSTANT_NOODLES, ITEM_HOT_DOG, ITEM_STAINED_APRON = 28, 29, 30, 31 ITEM_NICE_CREAM = 13 ITEM_STARFAIT, ITEM_GLAMBURGER = 32, 33 +ITEM_WORN_DAGGER, ITEM_HEART_LOCKET = 41, 42 def run(args, frames, saves=None, what=""): @@ -289,11 +290,11 @@ def check(cond, msg): check(ITEM_STARFAIT in s["items"], f"the MTT Resort: no Starfait: {s['items']}") # the CORE: Madjick and Knight Knight spared, the switch's lasers, the bridge's power, the sage's puzzle, a Glamburger, -# Mettaton turned round and his show a hit, Alphys by the last elevator, up to the castle +# Mettaton turned round and his show a hit, Alphys by the last elevator, up to New Home if not QUICK: s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["RES_LOBBY"]), "--at", "1210,160", "--path-file", os.path.join(HERE, "core.path")], 24000, what="the CORE") - check(s and s["mode"] == MODE_END and s["room"] == ROOMS["CORE_HALL"], f"the CORE did not end at the castle's elevator: {s}") + check(s and s["mode"] == MODE_WORLD and s["room"] == ROOMS["NH_TOWN"], f"the CORE did not end up in New Home: {s}") if s: for name, v in (("CORE_IN", 1), ("CORE_MADJICK", 1), ("CORE_KNIGHT", 1), ("CORE_SWITCH", 1), ("CORE_POWER", 2), ("CORE_SAGE", 1), ("CORE_FIELD", 1), ("CORE_TRASH1", 1), ("CORE_END", 1), ("CORE_MTT", 1), @@ -303,6 +304,21 @@ def check(cond, msg): check(s["gold"] == 130, f"the CORE: Madjick's and Knight Knight's gold went wrong: {s['gold']}") check(ITEM_GLAMBURGER in s["items"], f"the CORE: no Glamburger from the trash can: {s['items']}") +# New Home: the keys and the chain, the presents, the story, Sans's judgment, Asgore in the throne room; at the +# barrier, Asgore beaten (FIGHT) and spared; Omega Flowey (the six SOULs called on); Flowey spared; the end +if not QUICK: + s = run(["--name", "Frisk", "--noenc", "--god", "--room", str(ROOMS["NH_TOWN"]), "--at", "90,4545", + "--path-file", os.path.join(HERE, "newhome.path")], 26000, what="New Home") + check(s and s["mode"] == MODE_END, f"New Home did not reach the end: {s}") + if s: + for name, v in (("NH_KEY1", 1), ("NH_KEY2", 1), ("NH_CHAIN", 1), ("NH_DAGGER", 1), ("NH_LOCKET", 1), + ("NH_STORY", 11), ("NH_SANS", 1), ("NH_THRONE", 1), ("NH_ASGORE", 1), ("NH_FLOWEY", 1), + ("NH_DONE", 1)): + check(flag(s, name) == v, f"New Home: F_{name} is {flag(s, name)}, not {v}") + check(s["kills"] == 0, f"New Home: {s['kills']} killed on the friendly way") + for item in (ITEM_WORN_DAGGER, ITEM_HEART_LOCKET): + check(item in s["items"], f"New Home: item {item} not found: {s['items']}") + if failures: print("\n".join("FAIL " + f for f in failures)) sys.exit(1) diff --git a/games/undertale/tests/newhome.path b/games/undertale/tests/newhome.path new file mode 100644 index 00000000..e52df92b --- /dev/null +++ b/games/undertale/tests/newhome.path @@ -0,0 +1,70 @@ +# New Home, from the elevator up from the CORE (play it with --room 176 --at 90,4545 --name Frisk --noenc --god): the +# street to Asgore's home; its two keys (the kitchen's, the hallway's), the presents (the Worn Dagger, the Heart +# Locket), the chain; the basement and its story; the Last Corridor and Sans; the throne room and Asgore; the +# barrier: Asgore fought (FIGHT), then spared; Flowey and his six SOULs; Flowey spared; Sans's call, the end +w5 +go:340,4545 +go:340,4330 +go:1670,4330 +go:1670,3130 +1670,3100 +w20 +go:1300,2580 +u +z +talk +go:2380,2822 +u +z +talk +go:1990,2846 +1990,2812 +w20 +go:1915,2621 +u +z +pick:0 +talk +go:2000,2607 +u +z +pick:0 +talk +go:2040,2655 +2040,2700 +w20 +go:1660,2826 +u +z +talk +w30 +go:2550,2320 +go:2550,2160 +go:4720,2160 +4720,2230 +w20 +go:5300,2350 +talk +go:5830,2350 +5830,2200 +w20 +go:6020,1810 +6020,1780 +w20 +go:6010,1490 +talk +go:5960,1120 +5960,1090 +w20 +go:5960,990 +go:6420,990 +6420,938 +talk +pick:0 +talk +fight +pick:1 +talk +pick:0 +talk +w60 diff --git a/games/undertale/tests/play.c b/games/undertale/tests/play.c index ac74cd90..29e10ea2 100644 --- a/games/undertale/tests/play.c +++ b/games/undertale/tests/play.c @@ -224,6 +224,10 @@ static uint32_t path_keys(int f) { return 0; } if (!strcmp(tok, "talk")) { + if (g_mode == MODE_END) { /* (the end: nothing left to read on) */ + path_at = next; + return 0; + } if (!text_active() && !event_blocking() && g_mode == MODE_WORLD && !world_fading()) { path_at = next; return 0; diff --git a/games/undertale/tools/fetch.py b/games/undertale/tools/fetch.py index a865132b..142a570e 100644 --- a/games/undertale/tools/fetch.py +++ b/games/undertale/tools/fetch.py @@ -63,7 +63,10 @@ "Madjick", "Knight_Knight", "Final_Froggit", "Whimsalot", "Astigmatism", "CORE", "MTT_Resort", "Burgerpants", "Heats_Flamesman", "Bratty_and_Catty", "Spider_Bake_Sale", "Elevator", "Sans/Hotland", "Hot_Dog...?", "Cell_Phone/Alphys", "Steam_Vent", "Conveyor_belt", "Mettaton_quiz_show", "Laser", "Royal_Guards", "Bomb", - "Stained_Apron", "Hot_Dog_Harpy", "Art_Club_room", "Spider_Entrance", "Multicolor_Tile_Puzzle", "Lab"] + "Stained_Apron", "Hot_Dog_Harpy", "Art_Club_room", "Spider_Entrance", "Multicolor_Tile_Puzzle", "Lab", + # New Home + "New_Home", "Asgore", "Asgore/In_battle", "Asgore's_Home", "Last_Corridor", "Throne_Room", "Barrier", + "Photoshop_Flowey", "Neutral_Route", "Worn_Dagger", "Heart_Locket"] # files the categories leave out, as their wiki names FILES = ["QC sprite.png", "QC screenshot shop.png", "Gerson screenshot shop.png", "Tem Shop screenshot Temmie Armor.png"] DEMO = { diff --git a/games/undertale/tools/rooms.py b/games/undertale/tools/rooms.py index 7223e3af..71e55e75 100644 --- a/games/undertale/tools/rooms.py +++ b/games/undertale/tools/rooms.py @@ -213,6 +213,16 @@ ("copy", 2551, 836, 22, 84, 2519, 836), ])) +# New Home: grey streets, Asgore's home, the basement's corridors, the Last Corridor, the throne room, the coffins, +# the barrier. Its floors are cut by their rectangles alone (many colours: carpets, planks, flowers). Asgore (in the +# throne room, at the barrier) is an object here, and the friends of the true ending are off the map +AREAS.append(dict(name="newhome", map="New_Home_map.png", floor=[], margin=0, close=False, patches=[ + ("erase", 5988, 1270, 62, 92, "ring", []), ("erase", 6310, 717, 64, 72, "ring", []), + ("erase", 5868, 906, 36, 54, "ring", []), ("erase", 5906, 921, 32, 42, "ring", []), + ("erase", 5944, 889, 36, 64, "ring", []), ("erase", 5976, 886, 38, 70, "ring", []), + ("erase", 6014, 921, 30, 42, "ring", []), ("erase", 6036, 911, 58, 64, "ring", []), +])) + ROOMS = [ # the landing: the bed of golden flowers, a hallway, the Delta Rune arch dict(name="area1", area="ruins", rect=(0, 5900, 680, 260), title="Ruins", margin=0, @@ -681,6 +691,44 @@ dict(name="core_hall", area="core", rect=(3320, 60, 1100, 190), title="CORE", floor_rects=[(3340, 118, 1022, 42), (3340, 158, 60, 92)], doors=[((3340, 242, 60, 8), "core_mtt", (3348, 345), "down")]), + # New Home: the elevator up from the CORE, the city's street and the way to Asgore's home, its front yard + dict(name="nh_town", area="newhome", rect=(0, 2930, 1900, 1710), title="New Home", open=True, + floor_rects=[(40, 4536, 430, 44), (310, 4310, 100, 230), (250, 4310, 1450, 60), (1661, 3410, 34, 960), + (1517, 3122, 311, 300)], + doors=[((1663, 3118, 34, 8), "nh_house", (1670, 2900), "up")]), + # Asgore's home: the hall (its chained stairs), the living room, the kitchen, the hallway and its two bedrooms + dict(name="nh_house", area="newhome", rect=(1190, 2440, 1460, 500), title="Asgore's Home", open=True, + floor_rects=[(1522, 2845, 316, 95), (1197, 2712, 325, 228), (1197, 2560, 200, 140), (1238, 2690, 42, 25), + (1838, 2840, 734, 80), (1890, 2575, 200, 120), (2280, 2545, 220, 150)], + fix=[("wall", 1248, 2830, 90, 40), ("wall", 1290, 2735, 80, 45)], # the dining table, the fireplace + doors=[((1663, 2934, 34, 6), "nh_town", (1670, 3125), "down"), + ((1978, 2836, 26, 6), "nh_house", (2040, 2658), "up"), ((2030, 2690, 42, 6), "nh_house", (1981, 2846), "down"), + ((2402, 2836, 26, 6), "nh_house", (2410, 2658), "up"), ((2397, 2690, 50, 6), "nh_house", (2405, 2846), "down")]), + # the basement: two long corridors (the story told on the way), the elevator back up at the end + dict(name="nh_basement", area="newhome", rect=(1520, 2040, 3460, 420), title="New Home", open=True, + floor_rects=[(1533, 2293, 1100, 94), (2517, 2143, 216, 250), (2633, 2143, 2200, 67), (4683, 2143, 117, 80)], + doors=[((4683, 2216, 117, 8), "nh_last", (4720, 2240), "down")]), + dict(name="nh_last", area="newhome", rect=(4580, 2210, 1400, 250), title="Last Corridor", open=True, + floor_rects=[(4585, 2335, 1300, 75), (4683, 2222, 117, 113), (5797, 2222, 88, 113)], + doors=[((4683, 2216, 117, 8), "nh_basement", (4720, 2180), "up"), ((5797, 2216, 88, 8), "nh_thall", (5790, 2180), "up")]), + # the throne room's entrance (its SAVE), the throne room, the stairs down to the coffins + dict(name="nh_thall", area="newhome", rect=(5640, 1700, 830, 530), title="Throne Entrance", open=True, + floor_rects=[(5760, 1797, 588, 75), (5760, 1872, 88, 350), (6260, 1872, 88, 350), (6005, 1785, 50, 12)], + doors=[((5760, 2216, 88, 8), "nh_last", (5820, 2240), "down"), ((6005, 1786, 50, 8), "nh_throne", (6010, 1600), "up"), + ((6260, 2216, 88, 8), "nh_coffins", (6300, 2240), "down")]), + dict(name="nh_throne", area="newhome", rect=(5880, 1080, 260, 600), title="Throne Room", open=True, + floor_rects=[(5903, 1238, 215, 381), (5963, 1110, 119, 128), (5940, 1096, 56, 20), (5998, 1619, 48, 60)], + doors=[((5998, 1662, 48, 8), "nh_thall", (6015, 1805), "down"), ((5940, 1096, 56, 8), "nh_barrier", (5955, 1040), "up")]), + dict(name="nh_coffins", area="newhome", rect=(6210, 2215, 500, 800), title="New Home", open=True, + floor_rects=[(6280, 2222, 60, 610), (6230, 2830, 460, 115)], + doors=[((6280, 2222, 60, 8), "nh_thall", (6290, 2180), "up")]), + # the room before the barrier ("The End"), and the barrier + dict(name="nh_barrier", area="newhome", rect=(5820, 850, 700, 240), title="The End", open=True, + floor_rects=[(5839, 977, 640, 44), (5839, 880, 262, 116), (5939, 1021, 62, 56), (6400, 960, 56, 20)], + doors=[((5939, 1070, 62, 8), "nh_throne", (5955, 1120), "down"), ((6400, 960, 56, 8), "nh_wall", (6330, 780), "up")]), + dict(name="nh_wall", area="newhome", rect=(6170, 560, 350, 270), title="The Barrier", open=True, + floor_rects=[(6190, 600, 320, 215)], + doors=[((6300, 810, 60, 8), "nh_barrier", (6415, 985), "down")]), ] # rooms one above the other through a dark doorway (tools/pack.py: apply_links); ("h", left, right, y, h): side diff --git a/games/undertale/tools/sprites.py b/games/undertale/tools/sprites.py index fc5e3f3f..786204f6 100644 --- a/games/undertale/tools/sprites.py +++ b/games/undertale/tools/sprites.py @@ -285,13 +285,60 @@ def gen_exarm(): return [im] +def gen_xshot(): + # Omega Flowey's eyes' bullets: an X + im = _img(7, 7) + d = ImageDraw.Draw(im) + d.line([(0, 0), (6, 6)], fill=(255, 255, 255, 255), width=2) + d.line([(6, 0), (0, 6)], fill=(255, 255, 255, 255), width=2) + return [im] + + +def gen_pan(): + # the green SOUL's frying pan: a disc and its handle + im = _img(20, 8) + d = ImageDraw.Draw(im) + d.ellipse([0, 0, 12, 7], fill=(255, 255, 255, 255)) + d.rectangle([12, 3, 19, 4], fill=(255, 255, 255, 255)) + return [im] + + +def gen_shoe(): + # the blue SOUL's ballet shoe + im = _img(12, 7) + d = ImageDraw.Draw(im) + d.polygon([(0, 2), (8, 1), (11, 3), (11, 6), (1, 6)], fill=(255, 255, 255, 255)) + d.line([(3, 0), (6, 3)], fill=(255, 255, 255, 255)) + return [im] + + +def gen_book(): + # the purple SOUL's book + im = _img(10, 12) + d = ImageDraw.Draw(im) + d.rectangle([0, 0, 9, 11], fill=(255, 255, 255, 255)) + d.line([(2, 0), (2, 11)], fill=(0, 0, 0, 255)) + return [im] + + +def gen_actbutton(): + # the ACT button, coming down among a SOUL's attack (touch it to call for help) + im = _img(26, 11) + d = ImageDraw.Draw(im) + d.rectangle([0, 0, 25, 10], outline=(255, 160, 0, 255)) + for x, ys in ((3, (2, 8)), (9, (2, 8)), (15, (2, 8)), (21, (2, 8))): + d.line([(x, ys[0]), (x + 2, ys[1])], fill=(255, 160, 0, 255)) + return [im] + + GEN = {"otile": gen_otile, "snowball": gen_snowball, "bone": gen_bone, "orb": gen_orb, "snowflake": gen_snowflake, "iceshard": gen_iceshard, "present": gen_present, "knife": gen_knife, "dogpaw": gen_dogpaw, "heartbullet": gen_heartbullet, "spear": gen_spear, "note": gen_note, "drop": gen_drop, "arm": gen_arm, "debris": gen_debris, "arrow": gen_arrow, "plane": gen_plane, "bomb": gen_bomb, "cloud": gen_cloud, "bolt": gen_bolt, "star": gen_star, "croissant": gen_croissant, "donut": gen_donut, "mttmini": gen_mttmini, "exblock": gen_exblock, "exleg": gen_exleg, "mttheart": gen_mttheart, - "disco": gen_disco, "exarm": gen_exarm} + "disco": gen_disco, "exarm": gen_exarm, "xshot": gen_xshot, "pan": gen_pan, "shoe": gen_shoe, "book": gen_book, + "actbutton": gen_actbutton} SNOW_CLEAR = [(133, 163, 216), (114, 129, 177), (139, 163, 186), (180, 192, 201), (195, 207, 216)] PAP_GIF = "move:Papyrus_screenshot_back_and_forth.gif:0,280,640,450:" @@ -474,6 +521,18 @@ def gen_exarm(): ("sausage", "map:CORE_map.png:117,1653,30,50", {"keep": True, "clear": [(33, 81, 164), (31, 130, 228), (34, 105, 164), (36, 62, 141), (71, 154, 204)]}), *[(n, "gen:" + n, {"center": True}) for n in ["exblock", "exleg", "mttheart", "disco", "exarm"]], + # New Home: Asgore (in the castle, in battle: his idle thinned out, hurt, kneeling), his face; Omega Flowey's + # screen (his smile, his laugh); the six SOULs; the shapes of their attacks + ("asgore_ow", "wiki:Asgore_Dreemurr_overworld.png", {"feet": True}), + ("asgore_b", "wiki:Asgore_Dreemurr_battle_idle.gif", {"feet": True, "clear_bg": True, "dedupe": True, "every": 24}), + ("asgore_hurt", "wiki:Asgore_Dreemurr_battle_hurt.png", {"feet": True, "clear_bg": True}), + ("asgore_kneel", "wiki:Asgore_Dreemurr_battle_kneeling.png", {"feet": True, "clear_bg": True}), + ("face_asgore", "wiki:Asgore_Dreemurr_face.png", {"keep": True}), + ("omega", "wiki:Omega_Flowey_battle_smile.png", {"center": True, "clear_bg": True}), + ("omega_laugh", "wiki:Omega_Flowey_battle_laugh.gif", {"center": True, "clear_bg": True, "dedupe": True, "every": 6}), + *[("soul_" + c.lower(), "wiki:" + c + "_SOUL_sprite.png", {"center": True}) + for c in ["Light_blue", "Orange", "Blue", "Purple", "Green", "Yellow"]], + *[(n, "gen:" + n, {"center": True}) for n in ["xshot", "pan", "shoe", "book", "actbutton"]], ("bird", "map:Waterfall_map.png:8466,578,15,19", {"keep": True, "clear": [(27, 33, 90), (27, 21, 72), (23, 13, 43)]}), ("tutu", "map:Waterfall_map.png:1240,1240,22,10", {"keep": True, "clear": [(23, 13, 43), (27, 21, 72), (27, 33, 90)]}), ("artifact", "map:Waterfall_map.png:10156,150,12,11", From 350586f1adac2bdac868feee9c4f0d2a44c6e26d Mon Sep 17 00:00:00 2001 From: Mason Chen Date: Fri, 16 Oct 2026 20:22:11 +0000 Subject: [PATCH 19/19] Undertale: release notes for the whole game --- games/undertale/README.md | 2 +- tools/release.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/games/undertale/README.md b/games/undertale/README.md index 589adcd2..c3540967 100644 --- a/games/undertale/README.md +++ b/games/undertale/README.md @@ -196,7 +196,7 @@ Walk up to a star and press OK to SAVE and fill your HP. The C menu (toolbox) sh * **One app at a time:** Undertale is too big to sit next to NumPlay or the other big games. Installing it from the NumWorks website swaps them out, and installing them again swaps it out. Your saves in each one are kept. * **The neutral ending:** the game plays from the start to the barrier and the neutral ending, with Sans's call after. The true pacifist ending (the True Lab, Asriel) and the genocide route aren't in it. * **No music or sound:** the calculator has no speaker. -* **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game (the longer speeches in shorter words of our own), and the puzzles and battles follow how the game plays them, at its 30 frames a second. +* **The same Underground:** the rooms and pictures are the game's, everyone says what they say in the game, in shorter words of our own, and the puzzles and battles follow how the game plays them, at its 30 frames a second. ## Credits diff --git a/tools/release.py b/tools/release.py index 817b2e84..9b2c73bd 100644 --- a/tools/release.py +++ b/tools/release.py @@ -27,9 +27,9 @@ "on its own"), "hollowknight": ("Hollow Knight", "from King's Pass to Hornet in Greenpath. Too big to share the calculator with " "NumPlay: install it on its own"), - "undertale": ("Undertale", "the Ruins, Snowdin and most of Waterfall, from the bed of golden flowers to Temmie " - "Village: Flowey, Toriel, Sans, Papyrus, Monster Kid, Undyne's spears, Mad Dummy and every puzzle, the " - "rest of the Underground to come. Too big to share the calculator with NumPlay: install it on its own"), + "undertale": ("Undertale", "the whole Underground, from the bed of golden flowers to the barrier and the neutral " + "ending: the Ruins, Snowdin, Waterfall, Hotland, the CORE and New Home. Too big to share the calculator " + "with NumPlay: install it on its own"), "championisland": ("Champion Island", "the Doodle Champion Island Games. Too big to share the calculator with " "NumPlay: install it on its own"), "numpowder": ("NumPowder", "The Powder Toy on the calculator: sand, water, fire, acid, electricity and nearly 200 "