├── .clang-format ├── .dockerignore ├── .gitattributes ├── .gitignore ├── .vscode ├── c_cpp_properties.json ├── extensions.json ├── settings.json └── tasks.json ├── Dockerfile ├── Makefile ├── README.md ├── bin └── .gitignore ├── docker-compose.yml ├── inc └── Undertale.hpp ├── obj └── .gitignore ├── res ├── .gitignore ├── Sounds │ ├── Anticipation.mp3 │ ├── Anticipation.wav │ ├── Fallen Down.mp3 │ ├── Fallen-Down.wav │ ├── Once Upon a Time.mp3 │ ├── Once-Upon-a-Time.wav │ ├── Ruins.mp3 │ ├── Ruins.wav │ ├── Start Menu.mp3 │ ├── Start-Menu.wav │ ├── Unnecessary Tension.mp3 │ ├── Unnecessary-Tension.wav │ ├── Your Best Friend.mp3 │ └── Your-Best-Friend.wav └── sprites │ ├── Characters │ └── Flowey │ │ ├── PC Computer - Undertale - Flowey.png │ │ ├── disapointed1.png │ │ ├── disapointed2.png │ │ ├── evil1.png │ │ ├── evil2.png │ │ ├── f0.png │ │ ├── face_1.png │ │ ├── face_2.png │ │ ├── face_3.png │ │ ├── face_4.png │ │ ├── face_5.png │ │ ├── face_6.png │ │ ├── grin1.png │ │ ├── grin2.png │ │ ├── hurt.png │ │ ├── mad1.png │ │ ├── mad2.png │ │ ├── neutral1.png │ │ ├── neutral2.png │ │ ├── sassy1.png │ │ ├── sassy2.png │ │ ├── shocked.png │ │ ├── side1.png │ │ ├── side2.png │ │ ├── side3.png │ │ ├── side4.png │ │ └── wink.png │ ├── Text Bubbles.png │ ├── dialoguebox.png │ ├── fonts │ └── default │ │ ├── 0.png │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ ├── 9.png │ │ ├── a.png │ │ ├── am.png │ │ ├── b.png │ │ ├── bm.png │ │ ├── c.png │ │ ├── cm.png │ │ ├── d.png │ │ ├── dm.png │ │ ├── dot.png │ │ ├── download.png │ │ ├── e.png │ │ ├── em.png │ │ ├── exc.png │ │ ├── f.png │ │ ├── fm.png │ │ ├── g.png │ │ ├── gm.png │ │ ├── h.png │ │ ├── hm.png │ │ ├── i.png │ │ ├── im.png │ │ ├── j.png │ │ ├── jm.png │ │ ├── k.png │ │ ├── km.png │ │ ├── l.png │ │ ├── lm.png │ │ ├── m.png │ │ ├── mm.png │ │ ├── n.png │ │ ├── nm.png │ │ ├── o.png │ │ ├── om.png │ │ ├── p.png │ │ ├── pm.png │ │ ├── q.png │ │ ├── qm.png │ │ ├── question.png │ │ ├── r.png │ │ ├── rm.png │ │ ├── s.png │ │ ├── sm.png │ │ ├── space.png │ │ ├── t.png │ │ ├── tm.png │ │ ├── u.png │ │ ├── um.png │ │ ├── v.png │ │ ├── virg.png │ │ ├── vm.png │ │ ├── w.png │ │ ├── wm.png │ │ ├── x.png │ │ ├── xm.png │ │ ├── y.png │ │ ├── ym.png │ │ ├── z.png │ │ └── zm.png │ ├── maps │ ├── ruin_10.png │ ├── ruin_1a.png │ ├── ruin_1b.png │ ├── ruin_2.png │ ├── ruin_3.png │ ├── ruin_4.png │ ├── ruin_5a.png │ ├── ruin_5b.png │ ├── ruin_6.png │ ├── ruin_7a.png │ ├── ruin_7b.png │ ├── ruin_7c.png │ ├── ruin_8a.png │ ├── ruin_8b.png │ ├── ruin_8c.png │ ├── ruin_8d.png │ ├── ruin_8e.png │ └── ruin_9.png │ ├── spr_maincharad_1.png │ ├── spr_maincharad_2.png │ ├── spr_maincharad_3.png │ ├── spr_maincharal_0.png │ ├── spr_maincharal_1.png │ ├── spr_maincharar_0.png │ ├── spr_maincharar_1.png │ ├── spr_maincharau_1.png │ ├── spr_maincharau_2.png │ ├── spr_maincharau_3.png │ └── transition.png ├── run.ps1 ├── src ├── Undertale.cpp ├── battle.cpp ├── camera.cpp ├── dialogue.cpp ├── events.cpp ├── instances.cpp ├── main.cpp ├── maps.cpp ├── monsters.cpp ├── player.cpp └── transition.cpp └── windows-pcsx2.ps1 /.clang-format: -------------------------------------------------------------------------------- 1 | # Use the Google style in this project. 2 | BasedOnStyle: Google 3 | 4 | # Some folks prefer to write "int& foo" while others prefer "int &foo". The 5 | # Google Style Guide only asks for consistency within a project, we chose 6 | # "int& foo" for this project: 7 | DerivePointerAlignment: false 8 | PointerAlignment: Left 9 | 10 | SortIncludes: false 11 | 12 | IncludeBlocks: Merge 13 | IncludeCategories: 14 | # Matches common headers first, but sorts them after project includes 15 | - Regex: '^\"google/cloud/internal/disable_deprecation_warnings.inc\"$' 16 | Priority: -1 17 | - Regex: '^\"google/cloud/(internal/|grpc_utils/|testing_util/|[^/]+\.h)' 18 | Priority: 1000 19 | - Regex: '^\"google/cloud/' # project includes should sort first 20 | Priority: 500 21 | - Regex: '^\"' 22 | Priority: 1500 23 | - Regex: '^' 30 | Priority: 5000 31 | 32 | # Format raw string literals with a `pb` or `proto` tag as proto. 33 | RawStringFormats: 34 | - Language: TextProto 35 | Delimiters: 36 | - 'pb' 37 | - 'proto' 38 | BasedOnStyle: Google 39 | 40 | CommentPragmas: '(@copydoc)' -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | *.elf 2 | .git/ 3 | .vscode/ 4 | docs/ 5 | tools/ -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Ignore all differences in line endings 2 | * -crlf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # --- 2 | 3 | # Prerequisites 4 | *.d 5 | 6 | # Compiled Object files 7 | *.slo 8 | *.lo 9 | *.o 10 | *.vsm 11 | 12 | # Precompiled Headers 13 | *.gch 14 | *.pch 15 | 16 | # Compiled Dynamic libraries 17 | *.so 18 | *.dylib 19 | *.dll 20 | 21 | # Compiled Static libraries 22 | *.lai 23 | *.la 24 | *.a 25 | *.lib 26 | 27 | # Executables 28 | *.exe 29 | *.out 30 | *.app 31 | *.erl 32 | *.elf 33 | -------------------------------------------------------------------------------- /.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Docker PS2SDK", 5 | "includePath": [ 6 | "${workspaceFolder}/**", 7 | "C:/Users/Desktop/ps2dev-intellisense/tyra/inc/**", 8 | "C:/Users/Desktop/ps2dev-intellisense/ps2sdk/common/include/**", 9 | "C:/Users/Desktop/ps2dev-intellisense/ps2sdk/ee/include/**", 10 | "C:/Users/Desktop/ps2dev-intellisense/ps2sdk/iop/include/**", 11 | "C:/Users/Desktop/ps2dev-intellisense/ps2sdk/ports/include/**", 12 | "C:/Users/Desktop/ps2dev-intellisense/ee/include/**", 13 | "C:/Users/Desktop/ps2dev-intellisense/ee/lib/gcc/mips64r5900el-ps2-elf/11.3.0/include/**", 14 | "C:/Users/Desktop/ps2dev-intellisense/ee/lib/gcc/mips64r5900el-ps2-elf/11.3.0/include-fixed/**", 15 | "C:/Users/Desktop/ps2dev-intellisense/ee/lib/gcc/mips64r5900el-ps2-elf/11.3.0/install-tools/include/**", 16 | "C:/Users/Desktop/ps2dev-intellisense/ee/lib/gcc/mips64r5900el-ps2-elf/11.3.0/plugin/include/**", 17 | "C:/Users/Desktop/ps2dev-intellisense/ee/mips64r5900el-ps2-elf/include/**", 18 | "C:/Users/Desktop/ps2dev-intellisense/ee/mips64r5900el-ps2-elf/sys-include/**", 19 | "C:/Users/Desktop/ps2dev-intellisense/gsKit/include/**", 20 | "C:/Users/Desktop/ps2dev-intellisense/iop/lib/gcc/mipsel-ps2-elf/11.3.0/include/**", 21 | "C:/Users/Desktop/ps2dev-intellisense/iop/lib/gcc/mipsel-ps2-elf/11.3.0/install-tools/include/**", 22 | "C:/Users/Desktop/ps2dev-intellisense/iop/lib/gcc/mipsel-ps2-elf/11.3.0/plugin/include/**", 23 | "C:/Users/Desktop/ps2dev-intellisense/iop/lib/gcc/mipsel-ps2-elf/11.3.0/include-fixed/**", 24 | "C:/Users/Desktop/ps2dev-intellisense/iop/lib/gcc/mipsel-ps2-irx/11.3.0/include/**", 25 | "C:/Users/Desktop/ps2dev-intellisense/iop/lib/gcc/mipsel-ps2-irx/11.3.0/install-tools/include/**", 26 | "C:/Users/Desktop/ps2dev-intellisense/iop/lib/gcc/mipsel-ps2-irx/11.3.0/plugin/include/**", 27 | "C:/Users/Desktop/ps2dev-intellisense/iop/lib/gcc/mipsel-ps2-irx/11.3.0/include-fixed/**" 28 | ], 29 | "defines": [ 30 | "_EE", 31 | "_IOP", 32 | "__SPU__", 33 | "INTELLISENSE" 34 | ], 35 | "cppStandard": "c++20", 36 | "compilerPath": "", // Should be empty 37 | "intelliSenseMode": "linux-gcc-x86", 38 | "configurationProvider": "ms-vscode.cpptools" 39 | } 40 | ], 41 | "version": 4 42 | } -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "ms-vscode.cpptools-extension-pack", 4 | "ryzngard.vscode-header-source", 5 | "maziac.asm-code-lens", 6 | "dmnsgn.vscode-wavefront", 7 | "spmeesseman.vscode-taskexplorer" 8 | ] 9 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildDirectory": "./", 3 | "C_Cpp.default.intelliSenseMode": "gcc-x86", 4 | "files.associations": { 5 | "*.vcl": "asm-collection", 6 | "*.i": "asm-collection", 7 | "*.vsm": "asm-collection", 8 | "*.vclpp": "asm-collection", 9 | "*.hpp": "cpp", 10 | "*.cpp": "cpp", 11 | "*.h": "c", 12 | "*.c": "c", 13 | "array": "cpp", 14 | "atomic": "cpp", 15 | "bit": "cpp", 16 | "*.tcc": "cpp", 17 | "cctype": "cpp", 18 | "clocale": "cpp", 19 | "cmath": "cpp", 20 | "compare": "cpp", 21 | "concepts": "cpp", 22 | "cstdarg": "cpp", 23 | "cstddef": "cpp", 24 | "cstdint": "cpp", 25 | "cstdio": "cpp", 26 | "cstdlib": "cpp", 27 | "cstring": "cpp", 28 | "cwchar": "cpp", 29 | "cwctype": "cpp", 30 | "deque": "cpp", 31 | "map": "cpp", 32 | "set": "cpp", 33 | "string": "cpp", 34 | "unordered_map": "cpp", 35 | "vector": "cpp", 36 | "exception": "cpp", 37 | "algorithm": "cpp", 38 | "functional": "cpp", 39 | "iterator": "cpp", 40 | "memory": "cpp", 41 | "memory_resource": "cpp", 42 | "numeric": "cpp", 43 | "optional": "cpp", 44 | "random": "cpp", 45 | "string_view": "cpp", 46 | "system_error": "cpp", 47 | "tuple": "cpp", 48 | "type_traits": "cpp", 49 | "utility": "cpp", 50 | "fstream": "cpp", 51 | "initializer_list": "cpp", 52 | "iosfwd": "cpp", 53 | "istream": "cpp", 54 | "limits": "cpp", 55 | "new": "cpp", 56 | "numbers": "cpp", 57 | "ostream": "cpp", 58 | "sstream": "cpp", 59 | "stdexcept": "cpp", 60 | "streambuf": "cpp", 61 | "typeinfo": "cpp" 62 | }, 63 | "C_Cpp.errorSquiggles": "Enabled" 64 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "Build & run", 6 | "dependsOrder": "sequence", 7 | "dependsOn": [ 8 | "1. Copy source code to docker volume", 9 | "2. Compile via docker container", 10 | "3. Copy binaries to host", 11 | "4. Run PCSX2" 12 | ], 13 | "group": { 14 | "kind": "build", 15 | "isDefault": true 16 | } 17 | }, 18 | { 19 | "type": "shell", 20 | "label": "1. Copy source code to docker volume", 21 | "command": "docker exec -t Tale-game-compiler sh -c 'rsync -ac --delete --exclude \".git\" --exclude \".vscode\" --exclude \"*obj*/**\" --exclude \"*bin*/**\" /host/ /src/'" 22 | }, 23 | { 24 | "type": "shell", 25 | "label": "2. Compile via docker container", 26 | "command": "docker exec -t Tale-game-compiler sh -c 'cd ${config:buildDirectory} && make'", 27 | "problemMatcher": { 28 | "base": "$gcc", 29 | "fileLocation": [ 30 | "autoDetect" 31 | ] 32 | } 33 | }, 34 | { 35 | "type": "shell", 36 | "label": "3. Copy binaries to host", 37 | "command": "docker exec -t Tale-game-compiler sh -c 'rsync -zac --include=\"*/\" --include=\"*bin*/**\" --exclude=\"*\" /src/ /host/'", 38 | }, 39 | { 40 | "type": "shell", 41 | "label": "4. Run PCSX2", 42 | "options": { 43 | "cwd": "${config:buildDirectory}" 44 | }, 45 | "command": "./run.ps1" 46 | }, 47 | { 48 | "type": "shell", 49 | "label": "Convert WAV to ADPCM", 50 | "dependsOn": [ 51 | "1. Copy source code to docker volume" 52 | ], 53 | "command": "docker exec -t tyra-game-compiler sh -c 'adpenc ${input:wav2adpcmSource} ${input:wav2adpcmTarget} && rsync -zac /src/${input:wav2adpcmTarget} /host/${input:wav2adpcmTarget}'" 54 | }, 55 | { 56 | "type": "shell", 57 | "label": "Cleanup", 58 | "command": "docker exec -t tyra-game-compiler sh -c 'rm -rf /src/*'" 59 | }, 60 | { 61 | "type": "shell", 62 | "label": "Update Tyra", 63 | "command": "docker exec -t Tale-game-compiler sh -c 'rm -rf /tyra && mkdir -p /tyra && git clone https://github.com/h4570/tyra.git /tyra && cd /tyra && git checkout ${input:tyraBranch} && cd engine && make'" 64 | }, 65 | { 66 | "type": "shell", 67 | "label": "Send to PS2", 68 | "command": "docker exec -t tyra-game-compiler sh -c 'cd ${config:buildDirectory}/bin && killall -v ps2client || $true && ps2client -h ${input:ps2Ip} reset && ps2client -h ${input:ps2Ip} reset && ps2client -h ${input:ps2Ip} execee host:$(find . -maxdepth 1 -type f -name \"*.elf\")'" 69 | }, 70 | { 71 | "type": "shell", 72 | "label": "Open PS2 output logger", 73 | "command": "docker stop ps2-logs || $true && docker run -t --rm --name=ps2-logs -p ${input:local2Ip}:18194:18194/udp h4570/tyra sh -c 'ps2client -h ${input:ps2Ip} listen'", 74 | "runOptions": { 75 | "instanceLimit": 1 76 | }, 77 | "presentation": { 78 | "reveal": "always", 79 | "panel": "new" 80 | } 81 | }, 82 | { 83 | "type": "shell", 84 | "label": "Start docker container", 85 | "command": "docker compose up -d" 86 | }, 87 | { 88 | "type": "shell", 89 | "label": "Stop docker container", 90 | "command": "docker compose down" 91 | }, 92 | { 93 | "type": "shell", 94 | "label": "[Debug] Copy obj directory to host", 95 | "command": "docker exec -t tyra-game-compiler sh -c 'rsync -zac --include=\"*/\" --include=\"obj/**\" --exclude=\"*\" /src/ /host/'" 96 | } 97 | ], 98 | "inputs": [ 99 | { 100 | "id": "wav2adpcmSource", 101 | "description": "Source file path (ex. ):", 102 | "default": "res/Sounds/effects/sound.wav", 103 | "type": "promptString" 104 | }, 105 | { 106 | "id": "wav2adpcmTarget", 107 | "description": "Target file path (ex. ):", 108 | "default": "res/Sounds/adpcm/sound.adpcm", 109 | "type": "promptString" 110 | }, 111 | { 112 | "id": "ps2Ip", 113 | "description": "PS2link ip address:", 114 | "default": "192.168.1.200", 115 | "type": "promptString" 116 | }, 117 | { 118 | "id": "local2Ip", 119 | "description": "Local ip address:", 120 | "default": "192.168.1.245", 121 | "type": "promptString" 122 | }, 123 | { 124 | "id": "tyraBranch", 125 | "description": "Tyra branch:", 126 | "default": "master", 127 | "type": "promptString" 128 | } 129 | ] 130 | } -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # syntax=docker/dockerfile:1 2 | FROM h4570/tyra 3 | 4 | RUN apt-get update 5 | RUN apt-get install git -y 6 | 7 | WORKDIR /src 8 | CMD ["/bin/bash"] -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | TARGET := Undertale.elf 2 | ENGINEDIR := /tyra/engine 3 | 4 | #The Directories, Source, Includes, Objects, Binary and Resources 5 | SRCDIR := src 6 | INCDIR := inc 7 | BUILDDIR := obj 8 | TARGETDIR := bin 9 | RESDIR := res 10 | SRCEXT := cpp 11 | VSMEXT := vsm 12 | VCLEXT := vcl 13 | VCLPPEXT := vclpp 14 | DEPEXT := d 15 | OBJEXT := o 16 | 17 | #Flags, Libraries and Includes 18 | CFLAGS := 19 | LIB := -ltyra 20 | LIBDIRS := -L$(ENGINEDIR)/bin 21 | INC := -I$(INCDIR) -I$(ENGINEDIR)/inc 22 | INCDEP := -I$(INCDIR) -I$(ENGINEDIR)/inc 23 | 24 | include /tyra/Makefile.base 25 | 26 | clean-engine: 27 | cd $(ENGINEDIR) && $(MAKE) cleaner 28 | 29 | build-engine: 30 | cd $(ENGINEDIR) && $(MAKE) 31 | 32 | build-release-engine: 33 | cd $(ENGINEDIR) && $(MAKE) release -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [Discord server](https://discord.gg/KFYQKbJg8Z) 2 | 3 |
4 |

5 | 6 | Logo 7 | 8 | 9 | 10 | * [Description](#description) 11 | * [Features](#features) 12 | * [Credits](#credits) 13 | 14 | 15 | ### Description 16 | TyraTale is the codename for a port of Undertale to Sony's Playstation2. 17 | The main objective of this project is to have the full experience of the original Undertale on the pc. 18 | 19 | ### Features 20 | Planned features for now are the hole ruins ported, battle system, love system, etc; 21 | 22 | ### Credits 23 | 24 | [Black Ranger](https://github.com/BlackR4nger) - Helping me with the maps. 25 | 26 |
27 |

28 | 29 | Powered by TYRA! 30 | 31 | -------------------------------------------------------------------------------- /bin/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | volumes: 3 | tyra-game-volume: 4 | services: 5 | compiler: 6 | environment: 7 | TERM: xterm-256color 8 | network_mode: host 9 | build: 10 | context: ./ 11 | dockerfile: Dockerfile 12 | tty: true 13 | container_name: Tale-game-compiler 14 | volumes: 15 | - tyra-game-volume:/src 16 | - ./:/host 17 | -------------------------------------------------------------------------------- /inc/Undertale.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #define debugmode true 4 | 5 | namespace tale { 6 | using namespace Tyra; 7 | 8 | class Instance 9 | { 10 | public: 11 | Vec2 Pos; 12 | int id, dir = 0, dircons = 0, anmcount = 0; 13 | bool direnable = false; 14 | bool walkanm = false; 15 | bool movingX = false, movingY = false; 16 | bool movingcons = false; 17 | bool fadeout = false; 18 | Sprite ins_sprite; 19 | Texture* texture; 20 | Texture* texture1; 21 | Texture* texture2; 22 | Texture* texture3; 23 | 24 | Texture* MoveR1; 25 | Texture* MoveL1; 26 | Texture* MoveU1; 27 | Texture* MoveD1; 28 | 29 | Texture* MoveR2; 30 | Texture* MoveL2; 31 | Texture* MoveU2; 32 | Texture* MoveD2; 33 | }; 34 | 35 | class Enemyinfo 36 | { 37 | public: 38 | std::string name = "..."; 39 | int att = 0;int def = 0, maxhp = 10, currhp = maxhp; 40 | Vec2 Epos = Vec2(200 ,96); 41 | int mtion1 = 9999; bool mtiongreat1 = true; 42 | int mtion2 = 9999; bool mtiongreat2 = true; 43 | bool mercy = false; 44 | std::string encountertex = "..."; 45 | std::string check = "..."; 46 | std::string neutral1 = "..."; std::string neutral2 = "..."; 47 | std::string spech1 = "...", spech2 = "...", spech3 = "..."; 48 | std::string textpath = "..."; std::string musicpath = "..."; 49 | std::string dmgtextpath = "...";std::string adcdiag = "..."; 50 | int specialcontition = -1; 51 | int numactoptions = 0; 52 | std::string actoption[5] = {"...","...","...","...","..."}; 53 | std::string actaction[5] = {"...","...","...","...","..."}; 54 | int actoptionchange[5] = {}; 55 | bool hostile = true; 56 | int attackid1, attackid2, attackid3; 57 | }; 58 | class Pweapown 59 | { 60 | public: 61 | std::string name = "..."; 62 | int dmg = 0; 63 | }; 64 | 65 | class tale : public Game { 66 | public: 67 | tale(Engine* engine); 68 | ~tale(); 69 | 70 | void init(); 71 | void loop(); 72 | 73 | private: 74 | int GameState = 0, GameStatecons = 0; 75 | Engine* engine; 76 | Sprite player, map1, map2, map3, map4, map5, trans; 77 | Vec2 Ppos = Vec2(0,0); 78 | Vec2 Pposcons = Vec2(0,0); 79 | int vel = 4, anm = 0; 80 | int TEvent = 0; 81 | int direction = 1, dircons = 1, mapid = 0, chatnumb = 0, mapcons = 0, mapspawn = 0; 82 | bool moving = false, texset = false, anmt = false, standing = true , Tbool = false; 83 | bool mapdone = false, action = false; 84 | Vec4 camborder = Vec4(-9999, -9999, 9999, 9999); 85 | bool placeholderfixtape1 = false; 86 | 87 | void loadsprites(); 88 | void loadtextures(); 89 | void reloadplayer(); 90 | void startplayer(); 91 | void mapinit(); 92 | void camupdate(); 93 | void transition(); 94 | void battlestart(int); 95 | void event(int); 96 | void maptheme(); 97 | void chatstart(int); 98 | 99 | 100 | Texture* colview; 101 | Texture* transtexture; 102 | 103 | Texture* ptex1;Texture* pmtex1;Texture* pmtex5; 104 | Texture* ptex2;Texture* pmtex2;Texture* pmtex6; 105 | Texture* ptex3;Texture* pmtex3;Texture* pmtex7; 106 | Texture* ptex4;Texture* pmtex4;Texture* pmtex8; 107 | 108 | 109 | int NumOfCol = 0; 110 | Vec4 colpos[100] = {}; 111 | Vec4 colact[100] = {}; 112 | 113 | void setcolissioninmap(float X1, float Y1, float X2, float Y2); 114 | void resetcolissioninmap(); 115 | void colcheck(); 116 | void mapchange(); 117 | 118 | Texture* dialogebox; 119 | Sprite UI_ChatboxSprite, UI_FaceboxSprite, UI_LetterSprite; 120 | Texture* letters[100] = {}; 121 | Texture* getletter(std::string, int); 122 | Texture* getdmgletter(std::string, int); 123 | void fontunload(); 124 | void fontload(int); 125 | std::string str, hom = ""; 126 | Vec2 texformat[200] = {}; 127 | int tipechat = 0,blt1 = 9999, blt2 = 9999, lbp = 0, bdp = 0; 128 | void drawtext(); 129 | bool breakdialoge = false, sontiming = false, curtalk = true; 130 | int music = 99999; 131 | int getavailablechanel(); 132 | int currentchannel = 0; 133 | 134 | 135 | 136 | //Battle system 137 | 138 | void skipturn(); 139 | void battleexit(); 140 | void Battle(); 141 | void SpareEnemy(); 142 | int BattleMenuState = 0, BattleMenuStatecons = 0; 143 | int turns = 0, option = 1, suboption = 1, attpointer = 0, attanm1 = 0, attanm2 = 0, dmggiven = 0; 144 | bool attacked = false, showenemy = true; 145 | int lastbended = 0, talkanm = 0; 146 | Enemyinfo Enemy; 147 | Sprite UI_battleicons, UI_HealthBar, PlayerHeart, attpointer_sprite, attanm_sprite, UI_chatbubble; 148 | Texture* fight1;Texture* fight2; 149 | Texture* act1; Texture* act2; 150 | Texture* itens1;Texture* itens2; 151 | Texture* mercy1;Texture* mercy2; 152 | Texture* YHbox; Texture* RHbox; Texture* GHbox; 153 | Texture* damageindicator; Texture* dmgpointer1; Texture* dmgpointer2; 154 | Texture* heart1;Texture* heart2; 155 | audsrv_adpcm_t* texnoise; 156 | audsrv_adpcm_t* menuoptionoise; 157 | audsrv_adpcm_t* attacknoise; 158 | audsrv_adpcm_t* hitnoise; 159 | audsrv_adpcm_t* monsdiednoise; 160 | audsrv_adpcm_t* runawaynoise; 161 | Texture* anm_attack1;Texture* anm_attack2; 162 | Texture* anm_attack3;Texture* anm_attack4; 163 | Texture* anm_attack5; 164 | Texture* enm_body1; 165 | Texture* enm_bodydmg; 166 | Texture* chatbubble; 167 | Texture* facetexture1; Texture* facetexture2; 168 | 169 | //instances 170 | Instance instances[100]; 171 | int InstanceCount = 0; 172 | void setinstance(Vec2 pos, int id); 173 | void setinstance(int posX, int posY, int id); 174 | void removeinstances(); 175 | void drawinstances(); 176 | void draw_instance(int ID); 177 | void inst_conditionmove(); 178 | 179 | //instance animation 180 | 181 | int mapanmcount = 0; 182 | int instancepath = 0; 183 | int instmaxpath = 0; 184 | bool instmoveX(int id, int X1, int X2); 185 | bool instmoveY(int id, int Y1, int Y2); 186 | void instmove(int id, int Direction); 187 | void instfadeout(int id); 188 | bool mapshake(); 189 | int mapshakeanm = 0; 190 | bool Pstop = false; 191 | bool camstatic = false; 192 | 193 | 194 | //Status 195 | 196 | std::string Pname = "Frisk"; 197 | int LOVE = 1; 198 | int atk = 0; 199 | int def = 0; 200 | int EXP = 0; 201 | int Maxhp = 20; 202 | int currenthp = 20; 203 | Pweapown weap; 204 | 205 | //Timeline 206 | 207 | int TL_Dummy = 0; 208 | 209 | }; 210 | 211 | 212 | 213 | } 214 | -------------------------------------------------------------------------------- /obj/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore -------------------------------------------------------------------------------- /res/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore -------------------------------------------------------------------------------- /res/Sounds/Anticipation.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Anticipation.mp3 -------------------------------------------------------------------------------- /res/Sounds/Anticipation.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Anticipation.wav -------------------------------------------------------------------------------- /res/Sounds/Fallen Down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Fallen Down.mp3 -------------------------------------------------------------------------------- /res/Sounds/Fallen-Down.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Fallen-Down.wav -------------------------------------------------------------------------------- /res/Sounds/Once Upon a Time.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Once Upon a Time.mp3 -------------------------------------------------------------------------------- /res/Sounds/Once-Upon-a-Time.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Once-Upon-a-Time.wav -------------------------------------------------------------------------------- /res/Sounds/Ruins.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Ruins.mp3 -------------------------------------------------------------------------------- /res/Sounds/Ruins.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Ruins.wav -------------------------------------------------------------------------------- /res/Sounds/Start Menu.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Start Menu.mp3 -------------------------------------------------------------------------------- /res/Sounds/Start-Menu.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Start-Menu.wav -------------------------------------------------------------------------------- /res/Sounds/Unnecessary Tension.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Unnecessary Tension.mp3 -------------------------------------------------------------------------------- /res/Sounds/Unnecessary-Tension.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Unnecessary-Tension.wav -------------------------------------------------------------------------------- /res/Sounds/Your Best Friend.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Your Best Friend.mp3 -------------------------------------------------------------------------------- /res/Sounds/Your-Best-Friend.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/Sounds/Your-Best-Friend.wav -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/PC Computer - Undertale - Flowey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/PC Computer - Undertale - Flowey.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/disapointed1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/disapointed1.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/disapointed2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/disapointed2.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/evil1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/evil1.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/evil2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/evil2.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/f0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/f0.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/face_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/face_1.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/face_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/face_2.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/face_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/face_3.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/face_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/face_4.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/face_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/face_5.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/face_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/face_6.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/grin1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/grin1.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/grin2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/grin2.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/hurt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/hurt.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/mad1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/mad1.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/mad2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/mad2.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/neutral1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/neutral1.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/neutral2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/neutral2.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/sassy1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/sassy1.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/sassy2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/sassy2.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/shocked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/shocked.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/side1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/side1.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/side2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/side2.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/side3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/side3.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/side4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/side4.png -------------------------------------------------------------------------------- /res/sprites/Characters/Flowey/wink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Characters/Flowey/wink.png -------------------------------------------------------------------------------- /res/sprites/Text Bubbles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/Text Bubbles.png -------------------------------------------------------------------------------- /res/sprites/dialoguebox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/dialoguebox.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/0.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/1.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/2.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/3.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/4.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/5.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/6.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/7.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/8.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/9.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/a.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/am.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/b.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/bm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/bm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/c.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/cm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/cm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/d.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/dm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/dm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/dot.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/download.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/e.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/em.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/em.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/exc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/exc.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/f.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/fm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/fm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/g.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/gm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/gm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/h.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/hm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/hm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/i.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/im.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/im.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/j.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/jm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/jm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/k.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/km.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/km.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/l.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/lm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/lm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/m.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/mm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/mm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/n.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/nm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/nm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/o.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/o.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/om.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/om.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/p.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/pm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/q.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/q.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/qm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/qm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/question.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/r.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/rm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/rm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/s.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/sm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/space.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/t.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/tm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/tm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/u.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/u.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/um.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/um.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/v.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/virg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/virg.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/vm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/vm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/w.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/wm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/wm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/x.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/xm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/xm.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/y.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/ym.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/ym.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/z.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/z.png -------------------------------------------------------------------------------- /res/sprites/fonts/default/zm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/fonts/default/zm.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_10.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_1a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_1a.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_1b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_1b.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_2.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_3.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_4.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_5a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_5a.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_5b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_5b.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_6.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_7a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_7a.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_7b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_7b.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_7c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_7c.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_8a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_8a.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_8b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_8b.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_8c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_8c.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_8d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_8d.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_8e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_8e.png -------------------------------------------------------------------------------- /res/sprites/maps/ruin_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/maps/ruin_9.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharad_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharad_1.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharad_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharad_2.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharad_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharad_3.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharal_0.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharal_1.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharar_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharar_0.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharar_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharar_1.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharau_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharau_1.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharau_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharau_2.png -------------------------------------------------------------------------------- /res/sprites/spr_maincharau_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/spr_maincharau_3.png -------------------------------------------------------------------------------- /res/sprites/transition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Br4k2n/TyraTale/3c236e8c0857738bd516a14bfc36a9314b49998f/res/sprites/transition.png -------------------------------------------------------------------------------- /run.ps1: -------------------------------------------------------------------------------- 1 | $ConfigFile = Join-Path $PSScriptRoot './windows-pcsx2.ps1' 2 | . $ConfigFile 3 | 4 | RunPCSX2 5 | -------------------------------------------------------------------------------- /src/Undertale.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | 3 | namespace tale { 4 | 5 | using namespace Tyra; 6 | 7 | tale::tale(Engine* t_engine) { engine = t_engine; } 8 | tale::~tale(){} 9 | void tale::init() 10 | { 11 | engine->renderer.setClearScreenColor(Color(0.32F,0.32F,0.32F)); 12 | startplayer(); 13 | resetcolissioninmap(); 14 | mapinit(); 15 | } 16 | 17 | void tale::loop() 18 | { 19 | auto& ren = engine->renderer; 20 | if (GameState == 0) 21 | { 22 | GameStatecons = 0; 23 | transition(); 24 | reloadplayer(); 25 | colcheck(); 26 | mapchange(); 27 | inst_conditionmove(); 28 | 29 | ren.beginFrame(); 30 | camupdate(); 31 | drawinstances(); 32 | ren.renderer2D.render(trans); 33 | if(action){drawtext();} 34 | ren.endFrame(); 35 | 36 | } 37 | 38 | if (GameState == 1) 39 | { 40 | ren.beginFrame(); 41 | Battle(); 42 | ren.endFrame(); 43 | } 44 | } 45 | 46 | } // namespace Racer 47 | -------------------------------------------------------------------------------- /src/battle.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | #include 3 | namespace tale 4 | { 5 | using namespace Tyra; 6 | 7 | void tale::Battle() 8 | { 9 | bool battlestatechanged = false; 10 | const auto& Ppad = engine->pad.getClicked(); 11 | auto& ren = engine->renderer.renderer2D; 12 | if (GameStatecons != 1) 13 | { 14 | battlestatechanged = true; 15 | auto Path1 = FileUtils::fromCwd("sprites/fight1.png"); 16 | auto Path2 = FileUtils::fromCwd("sprites/fight2.png"); 17 | 18 | auto Path3 = FileUtils::fromCwd("sprites/act1.png"); 19 | auto Path4 = FileUtils::fromCwd("sprites/act2.png"); 20 | 21 | auto Path5 = FileUtils::fromCwd("sprites/item1.png"); 22 | auto Path6 = FileUtils::fromCwd("sprites/item2.png"); 23 | 24 | auto Path7 = FileUtils::fromCwd("sprites/mercy1.png"); 25 | auto Path8 = FileUtils::fromCwd("sprites/mercy2.png"); 26 | 27 | auto pathyellow = FileUtils::fromCwd("sprites/solidcol/yellow.png"); 28 | auto pathred= FileUtils::fromCwd("sprites/solidcol/Red.png"); 29 | auto green = FileUtils::fromCwd("sprites/solidcol/green.png"); 30 | 31 | auto dmgin = FileUtils::fromCwd("sprites/battle/damageindicator.png"); 32 | auto dmgpoin1 = FileUtils::fromCwd("sprites/battle/dmgpointer1.png"); 33 | auto dmgpoin2 = FileUtils::fromCwd("sprites/battle/dmgpointer2.png"); 34 | 35 | auto pathatt1 = FileUtils::fromCwd("sprites/battle/spr_strike_1.png"); 36 | auto pathatt2 = FileUtils::fromCwd("sprites/battle/spr_strike_2.png"); 37 | auto pathatt3 = FileUtils::fromCwd("sprites/battle/spr_strike_3.png"); 38 | auto pathatt4 = FileUtils::fromCwd("sprites/battle/spr_strike_4.png"); 39 | auto pathatt5 = FileUtils::fromCwd("sprites/battle/spr_strike_5.png"); 40 | 41 | auto pathatt6 = FileUtils::fromCwd("sprites/battle/bubble_2.png"); 42 | 43 | auto snd_attack1 = FileUtils::fromCwd("Sounds/adpcm/snd_attack1.adpcm"); 44 | auto snd_hit = FileUtils::fromCwd("Sounds/adpcm/snd_hit.adpcm"); 45 | auto snd_escape = FileUtils::fromCwd("Sounds/adpcm/snd_escape.adpcm"); 46 | attacknoise = engine->audio.adpcm.load(snd_attack1); 47 | hitnoise = engine->audio.adpcm.load(snd_hit); 48 | runawaynoise = engine->audio.adpcm.load(snd_escape); 49 | 50 | attanm_sprite.size = Vec2(100,100); 51 | attanm_sprite.mode = MODE_STRETCH; 52 | attanm_sprite.position = Enemy.Epos; 53 | anm_attack1 = engine->renderer.getTextureRepository().add(pathatt1); 54 | anm_attack2 = engine->renderer.getTextureRepository().add(pathatt2); 55 | anm_attack3 = engine->renderer.getTextureRepository().add(pathatt3); 56 | anm_attack4 = engine->renderer.getTextureRepository().add(pathatt4); 57 | anm_attack5 = engine->renderer.getTextureRepository().add(pathatt5); 58 | chatbubble = engine->renderer.getTextureRepository().add(pathatt6); 59 | anm_attack1->addLink(attanm_sprite.id); 60 | chatbubble->addLink(UI_chatbubble.id); 61 | UI_chatbubble.mode = MODE_STRETCH; 62 | 63 | enm_body1 = engine->renderer.getTextureRepository().add(Enemy.textpath); 64 | enm_bodydmg = engine->renderer.getTextureRepository().add(Enemy.dmgtextpath); 65 | enm_body1->addLink(UI_FaceboxSprite.id); 66 | UI_FaceboxSprite.position = Vec2(200 ,224 - 128); 67 | UI_FaceboxSprite.size = Vec2(128, 128); 68 | 69 | fight1 = engine->renderer.getTextureRepository().add(Path1); 70 | fight2 = engine->renderer.getTextureRepository().add(Path2); 71 | 72 | act1 = engine->renderer.getTextureRepository().add(Path3); 73 | act2 = engine->renderer.getTextureRepository().add(Path4); 74 | 75 | itens1 = engine->renderer.getTextureRepository().add(Path5); 76 | itens2 = engine->renderer.getTextureRepository().add(Path6); 77 | 78 | mercy1 = engine->renderer.getTextureRepository().add(Path7); 79 | mercy2 = engine->renderer.getTextureRepository().add(Path8); 80 | 81 | YHbox = engine->renderer.getTextureRepository().add(pathyellow); 82 | RHbox = engine->renderer.getTextureRepository().add(pathred); 83 | GHbox = engine->renderer.getTextureRepository().add(green); 84 | 85 | damageindicator = engine->renderer.getTextureRepository().add(dmgin); 86 | dmgpointer1 = engine->renderer.getTextureRepository().add(dmgpoin1); 87 | dmgpointer2 = engine->renderer.getTextureRepository().add(dmgpoin2); 88 | dmgpointer1->addLink(attpointer_sprite.id); 89 | attpointer_sprite.size = Vec2(103, 103); 90 | attpointer_sprite.mode = MODE_STRETCH; 91 | 92 | UI_battleicons.size = Vec2(100, 50); 93 | UI_battleicons.mode = MODE_STRETCH; 94 | engine->audio.song.stop(); 95 | engine->audio.song.load(Enemy.musicpath); 96 | engine->audio.song.inLoop = true; 97 | engine->audio.song.setVolume(60); 98 | engine->audio.song.play(); 99 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_TXT2.adpcm")); 100 | monsdiednoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_Mdeath.adpcm")); 101 | anm_attack1->addLink(attanm_sprite.id); 102 | BattleMenuState = 0; 103 | GameStatecons = 1; 104 | } 105 | if (showenemy) 106 | { 107 | UI_FaceboxSprite.position = Enemy.Epos; 108 | ren.render(UI_FaceboxSprite); 109 | } 110 | ren.render(UI_ChatboxSprite); 111 | 112 | 113 | std::string status, Healthtext; 114 | status = Pname + " LV " + std::to_string(LOVE) + " HP "; 115 | Healthtext = std::to_string(currenthp) + "/" + std::to_string(Maxhp); 116 | int len = status.length(); 117 | int len2 = Healthtext.length(); 118 | for (int i = 0; i < len; i++) 119 | { 120 | auto* e = getletter(status, i); 121 | e->addLink(UI_LetterSprite.id); 122 | UI_LetterSprite.position = Vec2(50 + 10 * i, 375); 123 | ren.render(UI_LetterSprite); 124 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 125 | textremove->removeLinkById(UI_LetterSprite.id); 126 | } 127 | for (int i = 0; i < len2; i++) 128 | { 129 | auto* e = getletter(Healthtext, i); 130 | e->addLink(UI_LetterSprite.id); 131 | UI_LetterSprite.position = Vec2((70 + len * 10 + 10 * i) + Maxhp, 375); 132 | ren.render(UI_LetterSprite); 133 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 134 | textremove->removeLinkById(UI_LetterSprite.id); 135 | } 136 | UI_HealthBar.size = Vec2(Maxhp,18); 137 | UI_HealthBar.position = Vec2(50 + len * 10, 375); 138 | RHbox->addLink(UI_HealthBar.id); 139 | ren.render(UI_HealthBar); 140 | RHbox->removeLinkById(UI_HealthBar.id); 141 | UI_HealthBar.size = Vec2(currenthp,18); 142 | YHbox->addLink(UI_HealthBar.id); 143 | ren.render(UI_HealthBar); 144 | YHbox->removeLinkById(UI_HealthBar.id); 145 | 146 | 147 | if (option == 1) 148 | { 149 | fight2->addLink(UI_battleicons.id); 150 | UI_battleicons.position = Vec2(20 , 400); 151 | ren.render(UI_battleicons); 152 | fight2->removeLinkById(UI_battleicons.id); 153 | } 154 | else 155 | { 156 | fight1->addLink(UI_battleicons.id); 157 | UI_battleicons.position = Vec2(20 , 400); 158 | ren.render(UI_battleicons); 159 | fight1->removeLinkById(UI_battleicons.id); 160 | } 161 | 162 | if (option == 2){ 163 | act2->addLink(UI_battleicons.id); 164 | UI_battleicons.position = Vec2(20 + 130 , 400 ); 165 | ren.render(UI_battleicons); 166 | act2->removeLinkById(UI_battleicons.id); 167 | } 168 | else 169 | { 170 | act1->addLink(UI_battleicons.id); 171 | UI_battleicons.position = Vec2(20 + 130 , 400 ); 172 | ren.render(UI_battleicons); 173 | act1->removeLinkById(UI_battleicons.id); 174 | } 175 | 176 | if (option == 3){ 177 | itens2->addLink(UI_battleicons.id); 178 | UI_battleicons.position = Vec2(20 + 130 * 2, 400); 179 | ren.render(UI_battleicons); 180 | itens2->removeLinkById(UI_battleicons.id); 181 | } 182 | else{ 183 | itens1->addLink(UI_battleicons.id); 184 | UI_battleicons.position = Vec2(20 + 130 * 2, 400); 185 | ren.render(UI_battleicons); 186 | itens1->removeLinkById(UI_battleicons.id); 187 | } 188 | if (option == 4){ 189 | mercy2->addLink(UI_battleicons.id); 190 | UI_battleicons.position = Vec2(20 + 130 * 3, 400); 191 | ren.render(UI_battleicons); 192 | mercy2->removeLinkById(UI_battleicons.id); 193 | } 194 | else 195 | { 196 | mercy1->addLink(UI_battleicons.id); 197 | UI_battleicons.position = Vec2(20 + 130 * 3, 400); 198 | ren.render(UI_battleicons); 199 | mercy1->removeLinkById(UI_battleicons.id); 200 | } 201 | 202 | 203 | 204 | if (BattleMenuState != -10){ 205 | if (Ppad.Cross) 206 | { 207 | if (BattleMenuState != 11) 208 | { 209 | int ch = getavailablechanel(); 210 | engine->audio.adpcm.setVolume(30, ch); 211 | engine->audio.adpcm.tryPlay(menuoptionoise, ch); 212 | } 213 | if (BattleMenuState == -1 && !battlestatechanged) 214 | { 215 | battlestatechanged = true; 216 | if (Enemy.hostile){BattleMenuState = -10;} 217 | else {BattleMenuState = 0;} 218 | } 219 | if (BattleMenuState == 4 && !battlestatechanged) 220 | { 221 | battlestatechanged = true; 222 | if (suboption == 1) 223 | { 224 | SpareEnemy(); 225 | } 226 | if (suboption == 2) 227 | { 228 | BattleMenuState = 42; 229 | } 230 | } 231 | if (BattleMenuState == 2 && !battlestatechanged) 232 | { 233 | battlestatechanged = true; 234 | if (suboption == 1) 235 | { 236 | BattleMenuState = 21; 237 | } 238 | else 239 | { 240 | str = Enemy.actaction[suboption-2]; 241 | BattleMenuState = 29; 242 | tipechat = 12; 243 | } 244 | } 245 | if (BattleMenuState == 1 && !battlestatechanged) 246 | { 247 | battlestatechanged = true; 248 | if (suboption == 1) 249 | { 250 | BattleMenuState = 11; 251 | } 252 | 253 | } 254 | if (BattleMenuState == 10) 255 | { 256 | battlestatechanged = true; 257 | battleexit(); 258 | } 259 | 260 | if (BattleMenuState == 0 && !battlestatechanged){ 261 | battlestatechanged = true; 262 | if (option == 1) 263 | { 264 | BattleMenuState = 1; 265 | } 266 | if (option == 2) 267 | { 268 | BattleMenuState = 2; 269 | } 270 | if (option == 3) 271 | { 272 | BattleMenuState = 3; 273 | } 274 | if (option == 4) 275 | { 276 | BattleMenuState = 4; 277 | } 278 | } 279 | } 280 | if (Ppad.Square) 281 | { 282 | 283 | if (BattleMenuState == 1) 284 | { 285 | BattleMenuState = 0; 286 | } 287 | if (BattleMenuState == 2) 288 | { 289 | BattleMenuState = 0; 290 | } 291 | if (BattleMenuState == 3) 292 | { 293 | BattleMenuState = 0; 294 | } 295 | if (BattleMenuState == 4) 296 | { 297 | BattleMenuState = 0; 298 | } 299 | } 300 | } 301 | 302 | if (BattleMenuState == 10) 303 | { 304 | str = "*YOU WON!#*You earned 0 EXP and 0 gold."; 305 | tipechat = 10; 306 | drawtext(); 307 | } 308 | 309 | 310 | if (BattleMenuState == 0) 311 | { 312 | if (option == 1) 313 | { 314 | PlayerHeart.position = Vec2(25, 410); 315 | ren.render(PlayerHeart); 316 | } 317 | if (option == 2) 318 | { 319 | PlayerHeart.position = Vec2(25 + 130, 410); 320 | ren.render(PlayerHeart); 321 | } 322 | if (option == 3) 323 | { 324 | PlayerHeart.position = Vec2(25 + 130*2, 410); 325 | ren.render(PlayerHeart); 326 | } 327 | if (option == 4) 328 | { 329 | PlayerHeart.position = Vec2(25 + 130*3, 410); 330 | ren.render(PlayerHeart); 331 | } 332 | 333 | if (Ppad.DpadLeft){option -= 1;} 334 | if (Ppad.DpadRight){option += 1;} 335 | tipechat = 10; 336 | if (turns == 0){str = Enemy.encountertex;} 337 | drawtext(); 338 | if (option < 1){option = 4;} 339 | if (option > 4){option = 1;} 340 | } 341 | 342 | if (BattleMenuState == -1) 343 | { 344 | placeholderfixtape1 = false; 345 | tipechat = 15; 346 | drawtext(); 347 | 348 | } 349 | 350 | if (BattleMenuState == 1) 351 | { 352 | std::string op1 = Enemy.name, hash = "* "; 353 | std::string op2 = hash + op1; 354 | int porcent = Enemy.currhp / 100, hdisplay = 0; 355 | for (int i = 0; i < 100; i++) 356 | { 357 | if (porcent * i < Enemy.currhp) 358 | { 359 | hdisplay++; 360 | } 361 | if (porcent * i > Enemy.currhp) 362 | { 363 | hdisplay--; 364 | } 365 | } 366 | int len1 = op2.length(); 367 | if (option == 1) 368 | { 369 | PlayerHeart.position = Vec2(80, 280); 370 | ren.render(PlayerHeart); 371 | } 372 | 373 | UI_HealthBar.size = Vec2(100,18); 374 | UI_HealthBar.position = Vec2(150 + len1 * 10, 280); 375 | RHbox->addLink(UI_HealthBar.id); 376 | ren.render(UI_HealthBar); 377 | RHbox->removeLinkById(UI_HealthBar.id); 378 | UI_HealthBar.size = Vec2(hdisplay,18); 379 | GHbox->addLink(UI_HealthBar.id); 380 | ren.render(UI_HealthBar); 381 | GHbox->removeLinkById(UI_HealthBar.id); 382 | 383 | for (int i = 0; i < len1; i++) 384 | { 385 | auto* e = getletter(op2, i); 386 | e->addLink(UI_LetterSprite.id); 387 | UI_LetterSprite.position = Vec2(100 + 10 * i, 280); 388 | ren.render(UI_LetterSprite); 389 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 390 | textremove->removeLinkById(UI_LetterSprite.id); 391 | } 392 | 393 | } 394 | if (BattleMenuState == 11) 395 | { 396 | auto* remtex = engine->renderer.getTextureRepository().getBySpriteId(UI_ChatboxSprite.id); 397 | remtex->removeLinkById(UI_ChatboxSprite.id); 398 | damageindicator->addLink(UI_ChatboxSprite.id); 399 | UI_ChatboxSprite.position = Vec2(40,260); 400 | UI_ChatboxSprite.size = Vec2(430,120); 401 | ren.render(UI_ChatboxSprite); 402 | damageindicator->removeLinkById(UI_ChatboxSprite.id); 403 | remtex->addLink(UI_ChatboxSprite.id); 404 | UI_ChatboxSprite.size = Vec2(800, 200); 405 | UI_ChatboxSprite.position = Vec2(30, 250); 406 | ren.render(attpointer_sprite); 407 | 408 | attpointer_sprite.position = Vec2(40 + attpointer * 5, 260); 409 | if (attpointer > 86) 410 | { 411 | BattleMenuState = -1; 412 | attpointer = 0; 413 | attacked = false; 414 | } 415 | if (!attacked && !battlestatechanged) 416 | { 417 | attpointer ++; 418 | if (Ppad.Cross) 419 | { 420 | attacked = true; 421 | int ch = getavailablechanel(); 422 | engine->audio.adpcm.setVolume(60, ch); 423 | engine->audio.adpcm.tryPlay(attacknoise, ch); 424 | } 425 | } 426 | else 427 | { 428 | int porc = (atk + 20 + weap.dmg); 429 | if (attpointer > 75 ) 430 | { 431 | dmggiven = (porc / 10) * 5; 432 | } 433 | else if (attpointer > 64 ) 434 | { 435 | dmggiven = (porc / 10) * 7; 436 | } 437 | else if (attpointer > 53 ) 438 | { 439 | dmggiven = (porc / 10) * 8; 440 | } 441 | else if (attpointer > 43 ) 442 | { 443 | dmggiven = (porc / 10) * 9; 444 | } 445 | else if (attpointer == 43 ) 446 | { 447 | dmggiven = porc; 448 | } 449 | else if (attpointer < 10 ) 450 | { 451 | dmggiven = (porc / 10) * 5; 452 | } 453 | else if (attpointer < 21 ) 454 | { 455 | dmggiven = (porc / 10) * 7; 456 | } 457 | else if (attpointer < 32 ) 458 | { 459 | dmggiven = (porc / 10) * 8; 460 | } 461 | else if (attpointer < 43 ) 462 | { 463 | dmggiven = (porc / 10) * 9; 464 | } 465 | 466 | if (attanm1 == 0) 467 | { 468 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(attpointer_sprite.id); 469 | textremove->removeLinkById(attpointer_sprite.id); 470 | dmgpointer2->addLink(attpointer_sprite.id); 471 | } 472 | if (attanm1 == 10) 473 | { 474 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(attpointer_sprite.id); 475 | textremove->removeLinkById(attpointer_sprite.id); 476 | dmgpointer1->addLink(attpointer_sprite.id); 477 | } 478 | attanm1 ++; 479 | if (attanm1 > 20){attanm1 = 0;} 480 | 481 | if (attanm2 == 0) 482 | { 483 | attanm_sprite.position.y = Enemy.Epos.y - 40; 484 | auto* remtex = engine->renderer.getTextureRepository().getBySpriteId(attanm_sprite.id); 485 | remtex->removeLinkById(attanm_sprite.id); 486 | anm_attack1->addLink(attanm_sprite.id); 487 | } 488 | if (attanm2 == 10) 489 | { 490 | attanm_sprite.position.y = Enemy.Epos.y - 25; 491 | auto* remtex = engine->renderer.getTextureRepository().getBySpriteId(attanm_sprite.id); 492 | remtex->removeLinkById(attanm_sprite.id); 493 | anm_attack2->addLink(attanm_sprite.id); 494 | } 495 | if (attanm2 == 20) 496 | { 497 | attanm_sprite.position.y = Enemy.Epos.y; 498 | auto* remtex = engine->renderer.getTextureRepository().getBySpriteId(attanm_sprite.id); 499 | remtex->removeLinkById(attanm_sprite.id); 500 | anm_attack3->addLink(attanm_sprite.id); 501 | } 502 | if (attanm2 == 30) 503 | { 504 | attanm_sprite.position.y = Enemy.Epos.y + 25; 505 | auto* remtex = engine->renderer.getTextureRepository().getBySpriteId(attanm_sprite.id); 506 | remtex->removeLinkById(attanm_sprite.id); 507 | anm_attack4->addLink(attanm_sprite.id); 508 | } 509 | if (attanm2 == 40) 510 | { 511 | attanm_sprite.position.y = Enemy.Epos.y + 40; 512 | auto* remtex = engine->renderer.getTextureRepository().getBySpriteId(attanm_sprite.id); 513 | remtex->removeLinkById(attanm_sprite.id); 514 | anm_attack5->addLink(attanm_sprite.id); 515 | } 516 | 517 | 518 | if (attanm2 < 50){ren.render(attanm_sprite);} 519 | 520 | if (attanm2 > 55) 521 | { 522 | int porcent = Enemy.maxhp / 100, hdisplay = 0; 523 | for (int i = 0; i < 100; i++) 524 | { 525 | if (porcent * i < Enemy.currhp) 526 | { 527 | hdisplay++; 528 | } 529 | if (porcent * i > Enemy.currhp) 530 | { 531 | hdisplay--; 532 | } 533 | TYRA_LOG(hdisplay); 534 | } 535 | UI_HealthBar.size = Vec2(100,18); 536 | UI_HealthBar.position = Vec2(Enemy.Epos.x, Enemy.Epos.y - 50); 537 | RHbox->addLink(UI_HealthBar.id); 538 | ren.render(UI_HealthBar); 539 | RHbox->removeLinkById(UI_HealthBar.id); 540 | UI_HealthBar.size = Vec2(hdisplay,18); 541 | GHbox->addLink(UI_HealthBar.id); 542 | ren.render(UI_HealthBar); 543 | GHbox->removeLinkById(UI_HealthBar.id); 544 | 545 | std::string strnum = "1234567890"; 546 | std::string strdmg = std::to_string(dmggiven); 547 | int dmglen = strdmg.length(); 548 | for (int i = 0; i < 10; i++) 549 | { 550 | for (int e = 0; e < dmglen; e++) 551 | if (strnum.at(i) == strdmg.at(e)) 552 | { 553 | letters[i + 73]->addLink(UI_LetterSprite.id); 554 | UI_LetterSprite.position = Vec2(Enemy.Epos.x + 20 * e, 50); 555 | ren.render(UI_LetterSprite); 556 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 557 | textremove->removeLinkById(UI_LetterSprite.id); 558 | } 559 | 560 | } 561 | 562 | } 563 | 564 | if (attanm2 == 60) 565 | { 566 | int ch = getavailablechanel(); 567 | engine->audio.adpcm.setVolume(60, ch); 568 | engine->audio.adpcm.tryPlay(hitnoise, ch); 569 | enm_body1->removeLinkById(UI_FaceboxSprite.id); 570 | enm_bodydmg->addLink(UI_FaceboxSprite.id); 571 | if (Enemy.currhp <= dmggiven){Enemy.currhp = 0;} 572 | if (Enemy.currhp > dmggiven){Enemy.currhp -= dmggiven;} 573 | UI_FaceboxSprite.position.x -= 10; 574 | } 575 | if (attanm2 == 65) 576 | { 577 | UI_FaceboxSprite.position.x += 20; 578 | } 579 | if (attanm2 == 70) 580 | { 581 | UI_FaceboxSprite.position.x -= 20; 582 | } 583 | if (attanm2 == 75) 584 | { 585 | UI_FaceboxSprite.position.x += 20; 586 | } 587 | if (attanm2 == 80) 588 | { 589 | UI_FaceboxSprite.position.x -= 20; 590 | } 591 | if (attanm2 == 85) 592 | { 593 | UI_FaceboxSprite.position.x += 20; 594 | } 595 | if (attanm2 == 95) 596 | { 597 | UI_FaceboxSprite.position.x -= 10; 598 | if (Enemy.currhp == 0) 599 | { 600 | BattleMenuState = 10; 601 | int ch = getavailablechanel(); 602 | engine->audio.adpcm.setVolume(60, ch); 603 | engine->audio.adpcm.tryPlay(monsdiednoise, ch); 604 | showenemy = false; 605 | engine->audio.song.stop(); 606 | attanm1 = 0; 607 | attanm2 = 0; 608 | if (Enemy.specialcontition == 0) TL_Dummy = 1; 609 | } 610 | else {skipturn(); 611 | enm_bodydmg->removeLinkById(UI_FaceboxSprite.id); 612 | enm_body1->addLink(UI_FaceboxSprite.id); 613 | } 614 | attpointer = 0; 615 | } 616 | attanm2 ++; 617 | 618 | } 619 | 620 | } 621 | 622 | if (BattleMenuState == 4) 623 | { 624 | std::string op1, op2; 625 | op1 = "* Spare"; 626 | op2 = "* Flee"; 627 | int len1 = op1.length(); 628 | int len2 = op2.length(); 629 | if (Ppad.DpadUp){suboption -= 1;} 630 | if (Ppad.DpadDown){suboption += 1;} 631 | if (suboption < 1){ suboption = 2; } 632 | if (suboption > 2){ suboption = 1; } 633 | 634 | for (int i = 0; i < len1; i++) 635 | { 636 | auto* e = getletter(op1, i); 637 | e->addLink(UI_LetterSprite.id); 638 | UI_LetterSprite.position = Vec2(100 + 10 * i, 280); 639 | ren.render(UI_LetterSprite); 640 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 641 | textremove->removeLinkById(UI_LetterSprite.id); 642 | } 643 | for (int i = 0; i < len2; i++) 644 | { 645 | auto* e = getletter(op2, i); 646 | e->addLink(UI_LetterSprite.id); 647 | UI_LetterSprite.position = Vec2(100 + 10 * i, 310); 648 | ren.render(UI_LetterSprite); 649 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 650 | textremove->removeLinkById(UI_LetterSprite.id); 651 | } 652 | 653 | if (suboption == 1) 654 | { 655 | PlayerHeart.position = Vec2(70, 280); 656 | ren.render(PlayerHeart); 657 | } 658 | if (suboption == 2) 659 | { 660 | PlayerHeart.position = Vec2(70, 310); 661 | ren.render(PlayerHeart); 662 | } 663 | 664 | } 665 | 666 | if (BattleMenuState == 42) 667 | { 668 | std::string op1; 669 | op1 = "* Escaped..."; 670 | TL_Dummy = 3; 671 | int len1 = op1.length(); 672 | 673 | for (int i = 0; i < len1; i++) 674 | { 675 | auto* e = getletter(op1, i); 676 | e->addLink(UI_LetterSprite.id); 677 | UI_LetterSprite.position = Vec2(100 + 10 * i, 280); 678 | ren.render(UI_LetterSprite); 679 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 680 | textremove->removeLinkById(UI_LetterSprite.id); 681 | } 682 | if (PlayerHeart.position.x == 70) 683 | { 684 | int ch = getavailablechanel(); 685 | engine->audio.adpcm.setVolume(60, ch); 686 | engine->audio.adpcm.tryPlay(runawaynoise, ch); 687 | } 688 | ren.render(PlayerHeart); 689 | PlayerHeart.position.x--; 690 | if (PlayerHeart.position.x < -50) 691 | { 692 | battleexit(); 693 | } 694 | 695 | } 696 | 697 | 698 | if (BattleMenuState == 2) 699 | { 700 | std::string op1; 701 | op1 = "* Check"; 702 | int len1 = op1.length(); 703 | int alen1 = Enemy.actoption[0].length(); 704 | int alen2 = Enemy.actoption[1].length(); 705 | int alen3 = Enemy.actoption[2].length(); 706 | int alen4 = Enemy.actoption[3].length(); 707 | int alen5 = Enemy.actoption[4].length(); 708 | if (Ppad.DpadUp){suboption -= 2;} 709 | if (Ppad.DpadDown){suboption += 2;} 710 | if (Ppad.DpadLeft){suboption -= 1;} 711 | if (Ppad.DpadRight){suboption += 1;} 712 | if (suboption < 1){ suboption = Enemy.numactoptions + 1; } 713 | if (suboption > Enemy.numactoptions + 1){ suboption = 1; } 714 | 715 | for (int i = 0; i < len1; i++) 716 | { 717 | auto* e = getletter(op1, i); 718 | e->addLink(UI_LetterSprite.id); 719 | UI_LetterSprite.position = Vec2(100 + 10 * i, 280); 720 | ren.render(UI_LetterSprite); 721 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 722 | textremove->removeLinkById(UI_LetterSprite.id); 723 | } 724 | if (Enemy.numactoptions >= 1) 725 | { 726 | for (int i = 0; i < alen1; i++){ 727 | auto* z = getletter(Enemy.actoption[0], i); 728 | z->addLink(UI_LetterSprite.id); 729 | UI_LetterSprite.position = Vec2(300 + 10 * i, 280); 730 | ren.render(UI_LetterSprite); 731 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 732 | textremove->removeLinkById(UI_LetterSprite.id); 733 | } 734 | } 735 | if (Enemy.numactoptions >= 2) 736 | { 737 | for (int i = 0; i < alen2; i++){ 738 | auto* z = getletter(Enemy.actoption[1], i); 739 | z->addLink(UI_LetterSprite.id); 740 | UI_LetterSprite.position = Vec2(100 + 10 * i, 300); 741 | ren.render(UI_LetterSprite); 742 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 743 | textremove->removeLinkById(UI_LetterSprite.id); 744 | } 745 | } 746 | if (Enemy.numactoptions >= 3) 747 | { 748 | for (int i = 0; i < alen3; i++){ 749 | auto* z = getletter(Enemy.actoption[2], i); 750 | z->addLink(UI_LetterSprite.id); 751 | UI_LetterSprite.position = Vec2(300 + 10 * i, 300); 752 | ren.render(UI_LetterSprite); 753 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 754 | textremove->removeLinkById(UI_LetterSprite.id); 755 | } 756 | } 757 | if (Enemy.numactoptions >= 4) 758 | { 759 | for (int i = 0; i < alen4; i++){ 760 | auto* z = getletter(Enemy.actoption[3], i); 761 | z->addLink(UI_LetterSprite.id); 762 | UI_LetterSprite.position = Vec2(100 + 10 * i, 320); 763 | ren.render(UI_LetterSprite); 764 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 765 | textremove->removeLinkById(UI_LetterSprite.id); 766 | } 767 | } 768 | if (Enemy.numactoptions >= 5) 769 | { 770 | for (int i = 0; i < alen5; i++){ 771 | auto* z = getletter(Enemy.actoption[4], i); 772 | z->addLink(UI_LetterSprite.id); 773 | UI_LetterSprite.position = Vec2(300 + 10 * i, 320); 774 | ren.render(UI_LetterSprite); 775 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 776 | textremove->removeLinkById(UI_LetterSprite.id); 777 | } 778 | } 779 | 780 | if (suboption == 1) 781 | { 782 | PlayerHeart.position = Vec2(70, 280); 783 | ren.render(PlayerHeart); 784 | } 785 | if (suboption == 2) 786 | { 787 | PlayerHeart.position = Vec2(270, 280); 788 | ren.render(PlayerHeart); 789 | } 790 | if (suboption == 3) 791 | { 792 | PlayerHeart.position = Vec2(70, 300); 793 | ren.render(PlayerHeart); 794 | } 795 | if (suboption == 4) 796 | { 797 | PlayerHeart.position = Vec2(270, 300); 798 | ren.render(PlayerHeart); 799 | } 800 | if (suboption == 5) 801 | { 802 | PlayerHeart.position = Vec2(70, 320); 803 | ren.render(PlayerHeart); 804 | } 805 | if (suboption == 6) 806 | { 807 | PlayerHeart.position = Vec2(270, 320); 808 | ren.render(PlayerHeart); 809 | } 810 | 811 | } 812 | 813 | if (BattleMenuState == 29) 814 | { 815 | drawtext(); 816 | if (Enemy.specialcontition == 0) 817 | { 818 | if (turns >= 8) 819 | { 820 | Enemy.Epos.y -= 2; 821 | if (Enemy.Epos.y < -150) 822 | { 823 | BattleMenuState = 10; 824 | TL_Dummy = 2; 825 | } 826 | } 827 | } 828 | } 829 | 830 | if (BattleMenuState == 21) 831 | { 832 | tipechat = 11; 833 | str = Enemy.check; 834 | drawtext(); 835 | } 836 | 837 | if (BattleMenuState != BattleMenuStatecons) 838 | { 839 | if (BattleMenuState == 0 && (BattleMenuStatecons == -10 || BattleMenuStatecons == -1) ) 840 | { 841 | int random = rand() % 100; 842 | if (random >= 50){str = Enemy.neutral1;} 843 | if (random < 50){str = Enemy.neutral2;} 844 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_TXT2.adpcm")); 845 | } 846 | blt1 = 9999; 847 | blt2 = 9999; 848 | lbp = 0; 849 | bdp = 0; 850 | action = false; 851 | chatnumb = 0; 852 | suboption = 1; 853 | BattleMenuStatecons = BattleMenuState; 854 | if (BattleMenuState == -1 || BattleMenuState == -10) 855 | { 856 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_TXT1.adpcm")); 857 | int random = rand() % 100; 858 | if (random >= 50){str = Enemy.spech1;} 859 | if (random < 50){str = Enemy.spech2;} 860 | } 861 | } 862 | 863 | } 864 | 865 | 866 | void tale::SpareEnemy() 867 | { 868 | if (!Enemy.mercy) 869 | { 870 | skipturn(); 871 | } 872 | } 873 | 874 | void tale::skipturn() 875 | { 876 | turns++; 877 | attanm1 = 0; 878 | attanm2 = 0; 879 | attacked = false; 880 | if (Enemy.specialcontition == 0 && turns >= 8){BattleMenuState = 29; str = Enemy.adcdiag; tipechat = 10;} 881 | else {BattleMenuState = -1;} 882 | } 883 | 884 | void tale::battleexit() 885 | { 886 | blt1 = 9999; 887 | blt2 = 9999; 888 | lbp = 0; 889 | bdp = 0; 890 | action = false; 891 | chatnumb = 0; 892 | suboption = 1; 893 | BattleMenuState = 0; 894 | GameState = 0; 895 | 896 | engine->renderer.getTextureRepository().free(fight1); 897 | engine->renderer.getTextureRepository().free(fight2); 898 | engine->renderer.getTextureRepository().free(act1); 899 | engine->renderer.getTextureRepository().free(act2); 900 | engine->renderer.getTextureRepository().free(itens1); 901 | engine->renderer.getTextureRepository().free(itens2); 902 | engine->renderer.getTextureRepository().free(mercy1); 903 | engine->renderer.getTextureRepository().free(mercy2); 904 | engine->renderer.getTextureRepository().free(dmgpointer1); 905 | engine->renderer.getTextureRepository().free(dmgpointer2); 906 | engine->renderer.getTextureRepository().free(damageindicator); 907 | 908 | engine->renderer.getTextureRepository().free(anm_attack1); 909 | engine->renderer.getTextureRepository().free(anm_attack2); 910 | engine->renderer.getTextureRepository().free(anm_attack3); 911 | engine->renderer.getTextureRepository().free(anm_attack4); 912 | engine->renderer.getTextureRepository().free(anm_attack5); 913 | 914 | engine->renderer.getTextureRepository().free(YHbox); 915 | engine->renderer.getTextureRepository().free(RHbox); 916 | engine->renderer.getTextureRepository().free(GHbox); 917 | 918 | auto* remtex = engine->renderer.getTextureRepository().getBySpriteId(UI_FaceboxSprite.id); 919 | remtex->removeLinkById(UI_FaceboxSprite.id); 920 | engine->renderer.getTextureRepository().free(enm_body1); 921 | engine->renderer.getTextureRepository().free(enm_bodydmg); 922 | 923 | 924 | tipechat = 0; 925 | attanm1 = 0; 926 | attanm2 = 0; 927 | attacked = false; 928 | showenemy = true; 929 | turns = 0; 930 | maptheme(); 931 | event(13); 932 | engine->audio.adpcm.reset(); 933 | } 934 | } -------------------------------------------------------------------------------- /src/camera.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | 3 | namespace tale 4 | { 5 | using namespace Tyra; 6 | 7 | void tale::camupdate() 8 | { 9 | auto& ren = engine->renderer.renderer2D; 10 | if (!camstatic) 11 | { 12 | player.position.x = 256; 13 | player.position.y = 256; 14 | if (Ppos.x < camborder.x) 15 | { 16 | map1.position.x = -camborder.x; 17 | player.position.x = 256 + Ppos.x - camborder.x; 18 | } 19 | else if (Ppos.x > camborder.z) 20 | { 21 | map1.position.x = -camborder.z; 22 | player.position.x = 256 + Ppos.x - camborder.z; 23 | } 24 | else 25 | { 26 | map1.position.x = -Ppos.x; 27 | } 28 | if (Ppos.y < camborder.y) 29 | { 30 | map1.position.y = -camborder.y; 31 | player.position.y = 256 + Ppos.y - camborder.y; 32 | } 33 | else if (Ppos.y > camborder.w) 34 | { 35 | map1.position.y = -camborder.w; 36 | player.position.y = 256 + Ppos.y - camborder.w; 37 | } 38 | else 39 | { 40 | map1.position.y = -Ppos.y; 41 | } 42 | } 43 | 44 | map2.position = map1.position; 45 | map3.position = map1.position; 46 | map4.position = map1.position; 47 | map5.position = map1.position; 48 | Vec2 mapsize = map1.size; 49 | if (mapid == 0 && mapcons == mapid) 50 | { 51 | 52 | map2.position = map1.position; 53 | map2.position += Vec2(mapsize.x * 1, mapsize.y * 0); 54 | 55 | ren.render(map1); 56 | if (Ppos.x > 500) 57 | { 58 | ren.render(map2); 59 | } 60 | 61 | } 62 | if (mapid == 1 && mapcons == mapid) 63 | { 64 | ren.render(map1); 65 | } 66 | if (mapid == 2 && mapcons == mapid) 67 | { 68 | ren.render(map1); 69 | } 70 | if (mapid == 3 && mapcons == mapid) 71 | { 72 | ren.render(map1); 73 | } 74 | if (mapid == 4 && mapcons == mapid) 75 | { 76 | map2.position += Vec2(mapsize.x * 1, mapsize.y * 0); 77 | ren.render(map1); 78 | if (Ppos.x > 250) 79 | { 80 | ren.render(map2); 81 | } 82 | 83 | 84 | } 85 | if (mapid == 5 && mapcons == mapid) 86 | { 87 | ren.render(map1); 88 | } 89 | if (mapid == 6 && mapcons == mapid) 90 | { 91 | map2.position += Vec2(mapsize.x * 1, mapsize.y * 0); 92 | map3.position += Vec2(mapsize.x * 2, mapsize.y * 0); 93 | 94 | ren.render(map1); 95 | ren.render(map2); 96 | if (Ppos.x > -3000){ 97 | ren.render(map3); 98 | } 99 | 100 | } 101 | if (mapid == 7 && mapcons == mapid) 102 | { 103 | map2.position += Vec2(mapsize.x * 1, mapsize.y * 0); 104 | map3.position += Vec2(mapsize.x * 2, mapsize.y * 0); 105 | map4.position += Vec2(mapsize.x * 3, mapsize.y * 0); 106 | map5.position += Vec2(mapsize.x * 4, mapsize.y * 0); 107 | 108 | 109 | if (Ppos.x < 1032) ren.render(map1); 110 | if (Ppos.x > 508 && Ppos.x < 2060) ren.render(map2); 111 | if (Ppos.x > 1528) ren.render(map3); 112 | if (Ppos.x > 2060 && Ppos.x < 4112) ren.render(map4); 113 | if (Ppos.x > 3576) ren.render(map5); 114 | 115 | } 116 | if (mapid == 8 && mapcons == mapid) 117 | { 118 | ren.render(map1); 119 | } 120 | if (mapid == 9 && mapcons == mapid) 121 | { 122 | ren.render(map1); 123 | } 124 | 125 | 126 | 127 | 128 | } 129 | 130 | 131 | 132 | } 133 | -------------------------------------------------------------------------------- /src/dialogue.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | 3 | namespace tale 4 | { 5 | using namespace Tyra; 6 | using namespace std; 7 | 8 | void tale::drawtext() 9 | { 10 | string str2 = "#$*"; 11 | string str3 = ""; 12 | auto& ren = engine->renderer.renderer2D; 13 | float border; 14 | int len; 15 | if (tipechat != 11) len = str.length(); else len = str3.length(); 16 | const auto& padpress = engine->pad.getClicked(); 17 | string curhom = hom; 18 | int letterspace = 0; 19 | bool skiped = false; 20 | 21 | if (padpress.Square) 22 | { 23 | for (int i = lbp; i < len && !skiped; i++) 24 | { 25 | if (str.at(i) == str2.at(1)) 26 | { 27 | chatnumb = i + 1; 28 | skiped = true; 29 | } 30 | }; 31 | if (!skiped) 32 | chatnumb = len; 33 | } 34 | 35 | if (tipechat == 0) 36 | { 37 | 38 | UI_ChatboxSprite.size = Vec2(800, 200); 39 | UI_ChatboxSprite.position = Vec2(30, 10); 40 | UI_FaceboxSprite.size = Vec2(100, 100); 41 | UI_FaceboxSprite.position = Vec2(50, 30); 42 | UI_LetterSprite.size = Vec2(24,24); 43 | letterspace = 10; 44 | if (hom == "") { border = 80; } 45 | else{border = 160;} 46 | 47 | ren.render(UI_ChatboxSprite); 48 | 49 | if (curtalk){ 50 | curtalk = false; 51 | 52 | //FLOWEY 53 | 54 | if (hom == "flowey_neutral") 55 | { 56 | auto patha = FileUtils::fromCwd("sprites/Characters/Flowey/neutral1.png"); 57 | auto pathb = FileUtils::fromCwd("sprites/Characters/Flowey/neutral2.png"); 58 | facetexture1 = engine->renderer.getTextureRepository().add(patha); 59 | facetexture2 = engine->renderer.getTextureRepository().add(pathb); 60 | facetexture1->addLink(UI_FaceboxSprite.id); 61 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_flowey1.adpcm")); 62 | } 63 | if (hom == "flowey_disapoint") 64 | { 65 | auto patha = FileUtils::fromCwd("sprites/Characters/Flowey/disapointed1.png"); 66 | auto pathb = FileUtils::fromCwd("sprites/Characters/Flowey/disapointed2.png"); 67 | facetexture1 = engine->renderer.getTextureRepository().add(patha); 68 | facetexture2 = engine->renderer.getTextureRepository().add(pathb); 69 | facetexture1->addLink(UI_FaceboxSprite.id); 70 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_flowey1.adpcm")); 71 | } 72 | if (hom == "flowey_side1") 73 | { 74 | auto patha = FileUtils::fromCwd("sprites/Characters/Flowey/side1.png"); 75 | auto pathb = FileUtils::fromCwd("sprites/Characters/Flowey/side2.png"); 76 | facetexture1 = engine->renderer.getTextureRepository().add(patha); 77 | facetexture2 = engine->renderer.getTextureRepository().add(pathb); 78 | facetexture1->addLink(UI_FaceboxSprite.id); 79 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_flowey1.adpcm")); 80 | } 81 | if (hom == "flowey_side2") 82 | { 83 | auto patha = FileUtils::fromCwd("sprites/Characters/Flowey/side3.png"); 84 | auto pathb = FileUtils::fromCwd("sprites/Characters/Flowey/side4.png"); 85 | facetexture1 = engine->renderer.getTextureRepository().add(patha); 86 | facetexture2 = engine->renderer.getTextureRepository().add(pathb); 87 | facetexture1->addLink(UI_FaceboxSprite.id); 88 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_flowey1.adpcm")); 89 | } 90 | 91 | //TORIEL 92 | 93 | if (hom == "toriel_neutral") 94 | { 95 | auto patha = FileUtils::fromCwd("sprites/Characters/Toriel/spr_face_torieltalk_0.png"); 96 | auto pathb = FileUtils::fromCwd("sprites/Characters/Toriel/spr_face_torieltalk_1.png"); 97 | UI_FaceboxSprite.position = Vec2(20, 20); 98 | UI_LetterSprite.size = Vec2(18 * 1.5f,24 * 1.5f); 99 | facetexture1 = engine->renderer.getTextureRepository().add(patha); 100 | facetexture2 = engine->renderer.getTextureRepository().add(pathb); 101 | facetexture1->addLink(UI_FaceboxSprite.id); 102 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_torieltalk.adpcm")); 103 | } 104 | if (hom == "toriel_happy") 105 | { 106 | auto patha = FileUtils::fromCwd("sprites/Characters/Toriel/spr_face_torielhappytalk_0.png"); 107 | auto pathb = FileUtils::fromCwd("sprites/Characters/Toriel/spr_face_torielhappytalk_1.png"); 108 | UI_FaceboxSprite.position = Vec2(20, 20); 109 | UI_LetterSprite.size = Vec2(18 * 1.5f,24 * 1.5f); 110 | facetexture1 = engine->renderer.getTextureRepository().add(patha); 111 | facetexture2 = engine->renderer.getTextureRepository().add(pathb); 112 | facetexture1->addLink(UI_FaceboxSprite.id); 113 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_torieltalk.adpcm")); 114 | } 115 | if (hom == "toriel_side") 116 | { 117 | auto patha = FileUtils::fromCwd("sprites/Characters/Toriel/spr_face_torieltalkside_0.png"); 118 | auto pathb = FileUtils::fromCwd("sprites/Characters/Toriel/spr_face_torieltalkside_1.png"); 119 | UI_FaceboxSprite.position = Vec2(20, 20); 120 | UI_LetterSprite.size = Vec2(18 * 1.5f,24 * 1.5f); 121 | facetexture1 = engine->renderer.getTextureRepository().add(patha); 122 | facetexture2 = engine->renderer.getTextureRepository().add(pathb); 123 | facetexture1->addLink(UI_FaceboxSprite.id); 124 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_torieltalk.adpcm")); 125 | } 126 | 127 | 128 | if (hom == ""){texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_TXT1.adpcm"));} 129 | } 130 | if (hom != "") {ren.render(UI_FaceboxSprite);} 131 | 132 | 133 | 134 | for (int i = lbp; i < chatnumb; i++) 135 | { 136 | if (str.at(i) != str2.at(0) && str.at(i) != str2.at(1) && str.at(i) != str2.at(2)){ 137 | if (i < blt1){ 138 | auto* e = getletter(str, i); 139 | e->addLink(UI_LetterSprite.id); 140 | UI_LetterSprite.position = Vec2( border + letterspace * (i - lbp), 40); 141 | ren.render(UI_LetterSprite); 142 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 143 | textremove->removeLinkById(UI_LetterSprite.id); 144 | } 145 | if (i > blt1 && i < blt2) 146 | { 147 | auto* e = getletter(str, i); 148 | e->addLink(UI_LetterSprite.id); 149 | UI_LetterSprite.position = Vec2( border + letterspace * (i - blt1), 60); 150 | ren.render(UI_LetterSprite); 151 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 152 | textremove->removeLinkById(UI_LetterSprite.id); 153 | } 154 | if (i > blt1 && i > blt2) 155 | { 156 | auto* e = getletter(str, i); 157 | e->addLink(UI_LetterSprite.id); 158 | UI_LetterSprite.position = Vec2( border + letterspace * (i - blt2), 80); 159 | ren.render(UI_LetterSprite); 160 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 161 | textremove->removeLinkById(UI_LetterSprite.id); 162 | } 163 | 164 | } 165 | if (str2.at(0) == str.at(i) && i != blt1 && i != blt2) 166 | { 167 | if (blt1 < blt2) 168 | { 169 | blt2 = i; 170 | } 171 | if (blt1 == blt2) 172 | { 173 | blt1 = i; 174 | } 175 | 176 | } 177 | if (str.at(chatnumb - 1) == str2.at(1)) 178 | { 179 | breakdialoge = true; 180 | } 181 | 182 | 183 | if (str2.at(2) == str.at(i)) 184 | { 185 | if (i < blt1) 186 | { 187 | UI_LetterSprite.position = Vec2(border - 20, 40); 188 | letters[57]->addLink(UI_LetterSprite.id); 189 | ren.render(UI_LetterSprite); 190 | letters[57]->removeLinkById(UI_LetterSprite.id); 191 | } 192 | if (i > blt1 && i < blt2) 193 | { 194 | UI_LetterSprite.position = Vec2(border - 20, 60); 195 | letters[57]->addLink(UI_LetterSprite.id); 196 | ren.render(UI_LetterSprite); 197 | letters[57]->removeLinkById(UI_LetterSprite.id); 198 | } 199 | if (i > blt1 && i > blt2) 200 | { 201 | UI_LetterSprite.position = Vec2(border - 20, 80); 202 | letters[57]->addLink(UI_LetterSprite.id); 203 | ren.render(UI_LetterSprite); 204 | letters[57]->removeLinkById(UI_LetterSprite.id); 205 | } 206 | } 207 | if (breakdialoge && padpress.Cross) 208 | { 209 | lbp = i + 1; 210 | blt1 = 9999; 211 | blt2 = 9999; 212 | breakdialoge = false; 213 | } 214 | } 215 | if (len == chatnumb && padpress.Cross) 216 | { 217 | blt1 = 9999; 218 | blt2 = 9999; 219 | lbp = 0; 220 | action = false; 221 | chatnumb = 0; 222 | curtalk = true; 223 | talkanm = 0; 224 | if (hom != "") 225 | {engine->renderer.getTextureRepository().free(facetexture1); 226 | engine->renderer.getTextureRepository().free(facetexture2);} 227 | 228 | event(1); 229 | 230 | } 231 | 232 | } 233 | 234 | if (tipechat == 10) 235 | { 236 | len = str.length(); 237 | UI_ChatboxSprite.size = Vec2(800, 200); 238 | UI_ChatboxSprite.position = Vec2(30, 250); 239 | 240 | for (int i = lbp; i < chatnumb; i++) 241 | { 242 | if (str.at(i) != str2.at(0) && str.at(i) != str2.at(1) && str.at(i) != str2.at(2)){ 243 | if (i < blt1){ 244 | auto* e = getletter(str, i); 245 | e->addLink(UI_LetterSprite.id); 246 | UI_LetterSprite.position = Vec2(80 + 10 * (i - lbp), 280); 247 | ren.render(UI_LetterSprite); 248 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 249 | textremove->removeLinkById(UI_LetterSprite.id); 250 | } 251 | if (i > blt1 && i < blt2) 252 | { 253 | auto* e = getletter(str, i); 254 | e->addLink(UI_LetterSprite.id); 255 | UI_LetterSprite.position = Vec2(80 + 10 * (i - blt1), 300); 256 | ren.render(UI_LetterSprite); 257 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 258 | textremove->removeLinkById(UI_LetterSprite.id); 259 | } 260 | if (i > blt1 && i > blt2) 261 | { 262 | auto* e = getletter(str, i); 263 | e->addLink(UI_LetterSprite.id); 264 | UI_LetterSprite.position = Vec2(80 + 10 * (i - blt2), 320); 265 | ren.render(UI_LetterSprite); 266 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 267 | textremove->removeLinkById(UI_LetterSprite.id); 268 | } 269 | 270 | } 271 | if (str2.at(0) == str.at(i) && i != blt1 && i != blt2) 272 | { 273 | if (blt1 < blt2) 274 | { 275 | blt2 = i; 276 | } 277 | if (blt1 == blt2) 278 | { 279 | blt1 = i; 280 | } 281 | 282 | } 283 | if (str2.at(2) == str.at(i)) 284 | { 285 | if (i < blt1) 286 | { 287 | UI_LetterSprite.position = Vec2(60, 280); 288 | letters[57]->addLink(UI_LetterSprite.id); 289 | ren.render(UI_LetterSprite); 290 | letters[57]->removeLinkById(UI_LetterSprite.id); 291 | } 292 | if (i > blt1 && i < blt2) 293 | { 294 | UI_LetterSprite.position = Vec2(60, 300); 295 | letters[57]->addLink(UI_LetterSprite.id); 296 | ren.render(UI_LetterSprite); 297 | letters[57]->removeLinkById(UI_LetterSprite.id); 298 | } 299 | if (i > blt1 && i > blt2) 300 | { 301 | UI_LetterSprite.position = Vec2(60, 320); 302 | letters[57]->addLink(UI_LetterSprite.id); 303 | ren.render(UI_LetterSprite); 304 | letters[57]->removeLinkById(UI_LetterSprite.id); 305 | } 306 | } 307 | } 308 | } 309 | if (tipechat == 11) 310 | { 311 | str3 = "* " + Enemy.name + " - ATK " + to_string(Enemy.att) + " DEF " + to_string(Enemy.def) + "#" + str; 312 | for (int i = lbp; i < chatnumb; i++) 313 | { 314 | if (str3.at(i) != str2.at(0) && str3.at(i) != str2.at(1) && str3.at(i) != str2.at(2)){ 315 | if (i < blt1){ 316 | auto* e = getletter(str3, i); 317 | e->addLink(UI_LetterSprite.id); 318 | UI_LetterSprite.position = Vec2( 80 + 10 * (i - lbp), 280); 319 | ren.render(UI_LetterSprite); 320 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 321 | textremove->removeLinkById(UI_LetterSprite.id); 322 | } 323 | if (i > blt1 && i < blt2) 324 | { 325 | auto* e = getletter(str3, i); 326 | e->addLink(UI_LetterSprite.id); 327 | UI_LetterSprite.position = Vec2( 80 + 10 * (i - blt1), 300); 328 | ren.render(UI_LetterSprite); 329 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 330 | textremove->removeLinkById(UI_LetterSprite.id); 331 | } 332 | if (i > blt1 && i > blt2) 333 | { 334 | auto* e = getletter(str3, i); 335 | e->addLink(UI_LetterSprite.id); 336 | UI_LetterSprite.position = Vec2( 80 + 10 * (i - blt2), 320); 337 | ren.render(UI_LetterSprite); 338 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 339 | textremove->removeLinkById(UI_LetterSprite.id); 340 | } 341 | 342 | } 343 | if (str2.at(0) == str3.at(i) && i != blt1 && i != blt2) 344 | { 345 | if (blt1 < blt2) 346 | { 347 | blt2 = i; 348 | } 349 | if (blt1 == blt2) 350 | { 351 | blt1 = i; 352 | } 353 | 354 | } 355 | if (str3.at(i) == str2.at(1) && i > bdp) 356 | { 357 | breakdialoge = true; 358 | bdp = i; 359 | } 360 | if (str3.at(i) == str2.at(1) && i < bdp) 361 | { 362 | blt1 = 9999; 363 | blt2 = 9999; 364 | lbp = i; 365 | } 366 | if (str2.at(2) == str3.at(i)) 367 | { 368 | if (i < blt1) 369 | { 370 | UI_LetterSprite.position = Vec2(60, 280); 371 | letters[57]->addLink(UI_LetterSprite.id); 372 | ren.render(UI_LetterSprite); 373 | letters[57]->removeLinkById(UI_LetterSprite.id); 374 | } 375 | if (i > blt1 && i < blt2) 376 | { 377 | UI_LetterSprite.position = Vec2(60, 300); 378 | letters[57]->addLink(UI_LetterSprite.id); 379 | ren.render(UI_LetterSprite); 380 | letters[57]->removeLinkById(UI_LetterSprite.id); 381 | } 382 | if (i > blt1 && i > blt2) 383 | { 384 | UI_LetterSprite.position = Vec2(60, 320); 385 | letters[57]->addLink(UI_LetterSprite.id); 386 | ren.render(UI_LetterSprite); 387 | letters[57]->removeLinkById(UI_LetterSprite.id); 388 | } 389 | } 390 | if (breakdialoge && padpress.Cross) 391 | { 392 | blt1 = 9999; 393 | blt2 = 9999; 394 | lbp = i; 395 | breakdialoge = false; 396 | } 397 | if (len == chatnumb && padpress.Cross) 398 | { 399 | if (!placeholderfixtape1) {skipturn(); placeholderfixtape1 = true;} 400 | } 401 | } 402 | } 403 | if (tipechat == 12) 404 | { 405 | 406 | for (int i = lbp; i < chatnumb; i++) 407 | { 408 | if (str.at(i) != str2.at(0) && str.at(i) != str2.at(1) && str.at(i) != str2.at(2)){ 409 | if (i < blt1){ 410 | auto* e = getletter(str, i); 411 | e->addLink(UI_LetterSprite.id); 412 | UI_LetterSprite.position = Vec2(80 + 10 * (i - lbp), 280); 413 | ren.render(UI_LetterSprite); 414 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 415 | textremove->removeLinkById(UI_LetterSprite.id); 416 | } 417 | if (i > blt1 && i < blt2) 418 | { 419 | auto* e = getletter(str, i); 420 | e->addLink(UI_LetterSprite.id); 421 | UI_LetterSprite.position = Vec2(80 + 10 * (i - blt1), 300); 422 | ren.render(UI_LetterSprite); 423 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 424 | textremove->removeLinkById(UI_LetterSprite.id); 425 | } 426 | if (i > blt1 && i > blt2) 427 | { 428 | auto* e = getletter(str, i); 429 | e->addLink(UI_LetterSprite.id); 430 | UI_LetterSprite.position = Vec2(80 + 10 * (i - blt2), 320); 431 | ren.render(UI_LetterSprite); 432 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 433 | textremove->removeLinkById(UI_LetterSprite.id); 434 | } 435 | 436 | } 437 | if (str2.at(0) == str.at(i) && i != blt1 && i != blt2) 438 | { 439 | if (blt1 < blt2) 440 | { 441 | blt2 = i; 442 | } 443 | if (blt1 == blt2) 444 | { 445 | blt1 = i; 446 | } 447 | 448 | } 449 | if (str.at(chatnumb - 1) == str2.at(1)) 450 | { 451 | breakdialoge = true; 452 | } 453 | 454 | 455 | if (str2.at(2) == str.at(i)) 456 | { 457 | if (i < blt1) 458 | { 459 | UI_LetterSprite.position = Vec2(60, 280); 460 | letters[57]->addLink(UI_LetterSprite.id); 461 | ren.render(UI_LetterSprite); 462 | letters[57]->removeLinkById(UI_LetterSprite.id); 463 | } 464 | if (i > blt1 && i < blt2) 465 | { 466 | UI_LetterSprite.position = Vec2(60, 300); 467 | letters[57]->addLink(UI_LetterSprite.id); 468 | ren.render(UI_LetterSprite); 469 | letters[57]->removeLinkById(UI_LetterSprite.id); 470 | } 471 | if (i > blt1 && i > blt2) 472 | { 473 | UI_LetterSprite.position = Vec2(60, 280); 474 | letters[57]->addLink(UI_LetterSprite.id); 475 | ren.render(UI_LetterSprite); 476 | letters[57]->removeLinkById(UI_LetterSprite.id); 477 | } 478 | } 479 | if (breakdialoge && padpress.Cross) 480 | { 481 | lbp = i + 1; 482 | blt1 = 9999; 483 | blt2 = 9999; 484 | breakdialoge = false; 485 | } 486 | } 487 | if (len == chatnumb && padpress.Cross) 488 | { 489 | if (Enemy.specialcontition == 0){BattleMenuState = 10; TL_Dummy = 0;} 490 | else {skipturn();} 491 | } 492 | 493 | } 494 | if (tipechat == 15) 495 | { 496 | len = str.length(); 497 | UI_ChatboxSprite.size = Vec2(300, 200); 498 | UI_ChatboxSprite.position = Vec2(200, 250); 499 | UI_chatbubble.size = Vec2(200,200); 500 | UI_chatbubble.position = Vec2(Enemy.Epos.x + 75, Enemy.Epos.y); 501 | ren.render(UI_chatbubble); 502 | Color originalcol; 503 | originalcol = UI_LetterSprite.color; 504 | UI_LetterSprite.color = Color(32,32,32); 505 | for (int i = lbp; i < chatnumb; i++) 506 | { 507 | if (str.at(i) != str2.at(0) && str.at(i) != str2.at(1) && str.at(i) != str2.at(2)){ 508 | if (i < blt1){ 509 | auto* e = getletter(str, i); 510 | e->addLink(UI_LetterSprite.id); 511 | UI_LetterSprite.position = Vec2(UI_chatbubble.position.x + 40 + 10 * (i - lbp), UI_chatbubble.position.y + 5); 512 | ren.render(UI_LetterSprite); 513 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 514 | textremove->removeLinkById(UI_LetterSprite.id); 515 | } 516 | if (i > blt1 && i < blt2) 517 | { 518 | auto* e = getletter(str, i); 519 | e->addLink(UI_LetterSprite.id); 520 | UI_LetterSprite.position = Vec2(UI_chatbubble.position.x + 40 + 10 * (i - lbp), UI_chatbubble.position.y + 25); 521 | ren.render(UI_LetterSprite); 522 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 523 | textremove->removeLinkById(UI_LetterSprite.id); 524 | } 525 | if (i > blt1 && i > blt2) 526 | { 527 | auto* e = getletter(str, i); 528 | e->addLink(UI_LetterSprite.id); 529 | UI_LetterSprite.position = Vec2(UI_chatbubble.position.x + 40 + 10 * (i - lbp), UI_chatbubble.position.y + 45); 530 | ren.render(UI_LetterSprite); 531 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(UI_LetterSprite.id); 532 | textremove->removeLinkById(UI_LetterSprite.id); 533 | } 534 | 535 | } 536 | if (str2.at(0) == str.at(i) && i != blt1 && i != blt2) 537 | { 538 | if (blt1 < blt2) 539 | { 540 | blt2 = i; 541 | } 542 | if (blt1 == blt2) 543 | { 544 | blt1 = i; 545 | } 546 | 547 | } 548 | if (str2.at(2) == str.at(i)) 549 | { 550 | if (i < blt1) 551 | { 552 | UI_LetterSprite.position = Vec2(60, 280); 553 | letters[57]->addLink(UI_LetterSprite.id); 554 | ren.render(UI_LetterSprite); 555 | letters[57]->removeLinkById(UI_LetterSprite.id); 556 | } 557 | if (i > blt1 && i < blt2) 558 | { 559 | UI_LetterSprite.position = Vec2(60, 300); 560 | letters[57]->addLink(UI_LetterSprite.id); 561 | ren.render(UI_LetterSprite); 562 | letters[57]->removeLinkById(UI_LetterSprite.id); 563 | } 564 | if (i > blt1 && i > blt2) 565 | { 566 | UI_LetterSprite.position = Vec2(60, 320); 567 | letters[57]->addLink(UI_LetterSprite.id); 568 | ren.render(UI_LetterSprite); 569 | letters[57]->removeLinkById(UI_LetterSprite.id); 570 | } 571 | } 572 | } 573 | UI_LetterSprite.color = originalcol; 574 | } 575 | 576 | 577 | 578 | if (len > chatnumb && !breakdialoge){ 579 | 580 | if (hom != "" && tipechat == 0 && curhom == hom && action) 581 | { 582 | if (talkanm == 0) 583 | { 584 | auto* remtex = engine->renderer.getTextureRepository().getBySpriteId(UI_FaceboxSprite.id); 585 | remtex->removeLinkById(UI_FaceboxSprite.id); 586 | facetexture2->addLink(UI_FaceboxSprite.id); 587 | } 588 | if (talkanm == 10) 589 | { 590 | auto* remtex = engine->renderer.getTextureRepository().getBySpriteId(UI_FaceboxSprite.id); 591 | remtex->removeLinkById(UI_FaceboxSprite.id); 592 | facetexture1->addLink(UI_FaceboxSprite.id); 593 | } 594 | talkanm++; 595 | if (talkanm > 20) 596 | { 597 | talkanm = 0; 598 | } 599 | } 600 | if (sontiming == true) 601 | { 602 | chatnumb++; 603 | u8 ch = getavailablechanel(); 604 | engine->audio.adpcm.setVolume(50, ch); 605 | engine->audio.adpcm.tryPlay(texnoise, ch); 606 | sontiming = false; 607 | } 608 | else {sontiming = true;} 609 | } 610 | 611 | } 612 | 613 | 614 | void tale::fontunload() 615 | { 616 | for (int i = 0; i < 40; i++) 617 | { 618 | engine->renderer.getTextureRepository().free(letters[i]); 619 | } 620 | engine->renderer.getTextureRepository().free(dialogebox); 621 | } 622 | void tale::fontload(int num) 623 | { 624 | auto pathdialo = FileUtils::fromCwd("sprites/dialoguebox.png"); 625 | auto heart = FileUtils::fromCwd("sprites/battle/spr_heart_0.png"); 626 | auto her = FileUtils::fromCwd("sprites/battle/spr_heart_1.png"); 627 | heart1 = engine->renderer.getTextureRepository().add(heart); 628 | heart2 = engine->renderer.getTextureRepository().add(her); 629 | heart1->addLink(PlayerHeart.id); 630 | PlayerHeart.size = Vec2(12,12); 631 | PlayerHeart.mode = MODE_STRETCH; 632 | 633 | 634 | dialogebox = engine->renderer.getTextureRepository().add(pathdialo); 635 | dialogebox->addLink(UI_ChatboxSprite.id); 636 | 637 | UI_LetterSprite.size = Vec2(24,24); 638 | UI_ChatboxSprite.mode = MODE_STRETCH; 639 | UI_FaceboxSprite.mode = MODE_STRETCH; 640 | UI_LetterSprite.mode = MODE_STRETCH; 641 | 642 | if (num == 0) 643 | { 644 | auto patha = FileUtils::fromCwd("sprites/fonts/default/a.png"); 645 | auto pathb = FileUtils::fromCwd("sprites/fonts/default/b.png"); 646 | auto pathc = FileUtils::fromCwd("sprites/fonts/default/c.png"); 647 | auto pathd = FileUtils::fromCwd("sprites/fonts/default/d.png"); 648 | auto pathe = FileUtils::fromCwd("sprites/fonts/default/e.png"); 649 | auto pathf = FileUtils::fromCwd("sprites/fonts/default/f.png"); 650 | auto pathg = FileUtils::fromCwd("sprites/fonts/default/g.png"); 651 | auto pathh = FileUtils::fromCwd("sprites/fonts/default/h.png"); 652 | auto pathi = FileUtils::fromCwd("sprites/fonts/default/i.png"); 653 | auto pathj = FileUtils::fromCwd("sprites/fonts/default/j.png"); 654 | auto pathk = FileUtils::fromCwd("sprites/fonts/default/k.png"); 655 | auto pathl = FileUtils::fromCwd("sprites/fonts/default/l.png"); 656 | auto pathm = FileUtils::fromCwd("sprites/fonts/default/m.png"); 657 | auto pathn = FileUtils::fromCwd("sprites/fonts/default/n.png"); 658 | auto patho = FileUtils::fromCwd("sprites/fonts/default/o.png"); 659 | auto pathp = FileUtils::fromCwd("sprites/fonts/default/p.png"); 660 | auto pathq = FileUtils::fromCwd("sprites/fonts/default/q.png"); 661 | auto pathr = FileUtils::fromCwd("sprites/fonts/default/r.png"); 662 | auto paths = FileUtils::fromCwd("sprites/fonts/default/s.png"); 663 | auto patht = FileUtils::fromCwd("sprites/fonts/default/t.png"); 664 | auto pathu = FileUtils::fromCwd("sprites/fonts/default/u.png"); 665 | auto pathv = FileUtils::fromCwd("sprites/fonts/default/v.png"); 666 | auto pathw = FileUtils::fromCwd("sprites/fonts/default/w.png"); 667 | auto pathx = FileUtils::fromCwd("sprites/fonts/default/x.png"); 668 | auto pathy = FileUtils::fromCwd("sprites/fonts/default/y.png"); 669 | auto pathz = FileUtils::fromCwd("sprites/fonts/default/z.png"); 670 | auto pathdot = FileUtils::fromCwd("sprites/fonts/default/dot.png"); 671 | auto pathveg = FileUtils::fromCwd("sprites/fonts/default/virg.png"); 672 | auto pathexc = FileUtils::fromCwd("sprites/fonts/default/exc.png"); 673 | auto pathint = FileUtils::fromCwd("sprites/fonts/default/question.png"); 674 | auto patham = FileUtils::fromCwd("sprites/fonts/default/am.png"); 675 | auto pathbm = FileUtils::fromCwd("sprites/fonts/default/bm.png"); 676 | auto pathcm = FileUtils::fromCwd("sprites/fonts/default/cm.png"); 677 | auto pathdm = FileUtils::fromCwd("sprites/fonts/default/dm.png"); 678 | auto pathem = FileUtils::fromCwd("sprites/fonts/default/em.png"); 679 | auto pathfm = FileUtils::fromCwd("sprites/fonts/default/fm.png"); 680 | auto pathgm = FileUtils::fromCwd("sprites/fonts/default/gm.png"); 681 | auto pathhm = FileUtils::fromCwd("sprites/fonts/default/hm.png"); 682 | auto pathim = FileUtils::fromCwd("sprites/fonts/default/im.png"); 683 | auto pathjm = FileUtils::fromCwd("sprites/fonts/default/jm.png"); 684 | auto pathkm = FileUtils::fromCwd("sprites/fonts/default/km.png"); 685 | auto pathlm = FileUtils::fromCwd("sprites/fonts/default/lm.png"); 686 | auto pathmm = FileUtils::fromCwd("sprites/fonts/default/mm.png"); 687 | auto pathnm = FileUtils::fromCwd("sprites/fonts/default/nm.png"); 688 | auto pathom = FileUtils::fromCwd("sprites/fonts/default/om.png"); 689 | auto pathpm = FileUtils::fromCwd("sprites/fonts/default/pm.png"); 690 | auto pathqm = FileUtils::fromCwd("sprites/fonts/default/qm.png"); 691 | auto pathrm = FileUtils::fromCwd("sprites/fonts/default/rm.png"); 692 | auto pathsm = FileUtils::fromCwd("sprites/fonts/default/sm.png"); 693 | auto pathtm = FileUtils::fromCwd("sprites/fonts/default/tm.png"); 694 | auto pathum = FileUtils::fromCwd("sprites/fonts/default/um.png"); 695 | auto pathvm = FileUtils::fromCwd("sprites/fonts/default/vm.png"); 696 | auto pathwm = FileUtils::fromCwd("sprites/fonts/default/wm.png"); 697 | auto pathxm = FileUtils::fromCwd("sprites/fonts/default/xm.png"); 698 | auto pathym = FileUtils::fromCwd("sprites/fonts/default/ym.png"); 699 | auto pathzm = FileUtils::fromCwd("sprites/fonts/default/zm.png"); 700 | auto pathspace = FileUtils::fromCwd("sprites/fonts/default/space.png"); 701 | auto pathstar = FileUtils::fromCwd("sprites/fonts/default/star.png"); 702 | auto path1 = FileUtils::fromCwd("sprites/fonts/default/1.png"); 703 | auto path2 = FileUtils::fromCwd("sprites/fonts/default/2.png"); 704 | auto path3 = FileUtils::fromCwd("sprites/fonts/default/3.png"); 705 | auto path4 = FileUtils::fromCwd("sprites/fonts/default/4.png"); 706 | auto path5 = FileUtils::fromCwd("sprites/fonts/default/5.png"); 707 | auto path6 = FileUtils::fromCwd("sprites/fonts/default/6.png"); 708 | auto path7 = FileUtils::fromCwd("sprites/fonts/default/7.png"); 709 | auto path8 = FileUtils::fromCwd("sprites/fonts/default/8.png"); 710 | auto path9 = FileUtils::fromCwd("sprites/fonts/default/9.png"); 711 | auto path0 = FileUtils::fromCwd("sprites/fonts/default/0.png"); 712 | auto pathslash = FileUtils::fromCwd("sprites/fonts/default/slash.png"); 713 | auto pathasp = FileUtils::fromCwd("sprites/fonts/default/asps.png"); 714 | auto pathtrac = FileUtils::fromCwd("sprites/fonts/default/-.png"); 715 | auto pathhashtag = FileUtils::fromCwd("sprites/fonts/default/#.png"); 716 | auto pathmoney = FileUtils::fromCwd("sprites/fonts/default/$.png"); 717 | 718 | auto path1d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_1.png"); 719 | auto path2d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_2.png"); 720 | auto path3d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_3.png"); 721 | auto path4d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_4.png"); 722 | auto path5d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_5.png"); 723 | auto path6d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_6.png"); 724 | auto path7d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_7.png"); 725 | auto path8d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_8.png"); 726 | auto path9d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_9.png"); 727 | auto path0d = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgnum_0.png"); 728 | auto pathmiss = FileUtils::fromCwd("sprites/fonts/damage/spr_dmgmiss.png"); 729 | 730 | 731 | letters[0] = engine->renderer.getTextureRepository().add(patha); 732 | letters[1] = engine->renderer.getTextureRepository().add(pathb); 733 | letters[2] = engine->renderer.getTextureRepository().add(pathc); 734 | letters[3] = engine->renderer.getTextureRepository().add(pathd); 735 | letters[4] = engine->renderer.getTextureRepository().add(pathe); 736 | letters[5] = engine->renderer.getTextureRepository().add(pathf); 737 | letters[6] = engine->renderer.getTextureRepository().add(pathg); 738 | letters[7] = engine->renderer.getTextureRepository().add(pathh); 739 | letters[8] = engine->renderer.getTextureRepository().add(pathi); 740 | letters[9] = engine->renderer.getTextureRepository().add(pathj); 741 | letters[10] = engine->renderer.getTextureRepository().add(pathk); 742 | letters[11] = engine->renderer.getTextureRepository().add(pathl); 743 | letters[12] = engine->renderer.getTextureRepository().add(pathm); 744 | letters[13] = engine->renderer.getTextureRepository().add(pathn); 745 | letters[14] = engine->renderer.getTextureRepository().add(patho); 746 | letters[15] = engine->renderer.getTextureRepository().add(pathp); 747 | letters[16] = engine->renderer.getTextureRepository().add(pathq); 748 | letters[17] = engine->renderer.getTextureRepository().add(pathr); 749 | letters[18] = engine->renderer.getTextureRepository().add(paths); 750 | letters[19] = engine->renderer.getTextureRepository().add(patht); 751 | letters[20] = engine->renderer.getTextureRepository().add(pathu); 752 | letters[21] = engine->renderer.getTextureRepository().add(pathv); 753 | letters[22] = engine->renderer.getTextureRepository().add(pathw); 754 | letters[23] = engine->renderer.getTextureRepository().add(pathx); 755 | letters[24] = engine->renderer.getTextureRepository().add(pathy); 756 | letters[25] = engine->renderer.getTextureRepository().add(pathz); 757 | letters[26] = engine->renderer.getTextureRepository().add(pathdot); 758 | letters[27] = engine->renderer.getTextureRepository().add(pathveg); 759 | letters[28] = engine->renderer.getTextureRepository().add(pathexc); 760 | letters[29] = engine->renderer.getTextureRepository().add(pathint); 761 | letters[30] = engine->renderer.getTextureRepository().add(patham); 762 | letters[31] = engine->renderer.getTextureRepository().add(pathbm); 763 | letters[32] = engine->renderer.getTextureRepository().add(pathcm); 764 | letters[33] = engine->renderer.getTextureRepository().add(pathdm); 765 | letters[34] = engine->renderer.getTextureRepository().add(pathem); 766 | letters[35] = engine->renderer.getTextureRepository().add(pathfm); 767 | letters[36] = engine->renderer.getTextureRepository().add(pathgm); 768 | letters[37] = engine->renderer.getTextureRepository().add(pathhm); 769 | letters[38] = engine->renderer.getTextureRepository().add(pathim); 770 | letters[39] = engine->renderer.getTextureRepository().add(pathjm); 771 | letters[40] = engine->renderer.getTextureRepository().add(pathkm); 772 | letters[41] = engine->renderer.getTextureRepository().add(pathlm); 773 | letters[42] = engine->renderer.getTextureRepository().add(pathmm); 774 | letters[43] = engine->renderer.getTextureRepository().add(pathnm); 775 | letters[44] = engine->renderer.getTextureRepository().add(pathom); 776 | letters[45] = engine->renderer.getTextureRepository().add(pathpm); 777 | letters[46] = engine->renderer.getTextureRepository().add(pathqm); 778 | letters[47] = engine->renderer.getTextureRepository().add(pathrm); 779 | letters[48] = engine->renderer.getTextureRepository().add(pathsm); 780 | letters[49] = engine->renderer.getTextureRepository().add(pathtm); 781 | letters[50] = engine->renderer.getTextureRepository().add(pathum); 782 | letters[51] = engine->renderer.getTextureRepository().add(pathvm); 783 | letters[52] = engine->renderer.getTextureRepository().add(pathwm); 784 | letters[53] = engine->renderer.getTextureRepository().add(pathxm); 785 | letters[54] = engine->renderer.getTextureRepository().add(pathym); 786 | letters[55] = engine->renderer.getTextureRepository().add(pathzm); 787 | letters[56] = engine->renderer.getTextureRepository().add(pathspace); 788 | letters[57] = engine->renderer.getTextureRepository().add(pathstar); 789 | letters[58] = engine->renderer.getTextureRepository().add(path1); 790 | letters[59] = engine->renderer.getTextureRepository().add(path2); 791 | letters[60] = engine->renderer.getTextureRepository().add(path3); 792 | letters[61] = engine->renderer.getTextureRepository().add(path4); 793 | letters[62] = engine->renderer.getTextureRepository().add(path5); 794 | letters[63] = engine->renderer.getTextureRepository().add(path6); 795 | letters[64] = engine->renderer.getTextureRepository().add(path7); 796 | letters[65] = engine->renderer.getTextureRepository().add(path8); 797 | letters[66] = engine->renderer.getTextureRepository().add(path9); 798 | letters[67] = engine->renderer.getTextureRepository().add(path0); 799 | letters[68] = engine->renderer.getTextureRepository().add(pathslash); 800 | letters[69] = engine->renderer.getTextureRepository().add(pathasp); 801 | letters[70] = engine->renderer.getTextureRepository().add(pathtrac); 802 | letters[71] = engine->renderer.getTextureRepository().add(pathhashtag); 803 | letters[72] = engine->renderer.getTextureRepository().add(pathmoney); 804 | 805 | letters[73] = engine->renderer.getTextureRepository().add(path1d); 806 | letters[74] = engine->renderer.getTextureRepository().add(path2d); 807 | letters[75] = engine->renderer.getTextureRepository().add(path3d); 808 | letters[76] = engine->renderer.getTextureRepository().add(path4d); 809 | letters[77] = engine->renderer.getTextureRepository().add(path5d); 810 | letters[78] = engine->renderer.getTextureRepository().add(path6d); 811 | letters[79] = engine->renderer.getTextureRepository().add(path7d); 812 | letters[80] = engine->renderer.getTextureRepository().add(path8d); 813 | letters[81] = engine->renderer.getTextureRepository().add(path9d); 814 | letters[82] = engine->renderer.getTextureRepository().add(path0d); 815 | letters[83] = engine->renderer.getTextureRepository().add(pathmiss); 816 | 817 | } 818 | } 819 | 820 | 821 | Texture* tale::getletter(string str, int wich) 822 | { 823 | string str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,!?abcdefghijklmnopqrstuvwxyz *1234567890/'-#$"; 824 | for (int i = 0; i < 73; i++){ 825 | if (str.at(wich) == str2.at(i)) {return(letters[i]);} 826 | } 827 | return letters[71]; 828 | } 829 | 830 | int tale::getavailablechanel() 831 | { 832 | return(currentchannel); 833 | currentchannel++; 834 | if (currentchannel > 23) 835 | { 836 | currentchannel = 0; 837 | } 838 | 839 | } 840 | 841 | void tale::chatstart(int chatid) 842 | { 843 | hom = ""; 844 | tipechat = 0; 845 | str = "Error!"; 846 | if (chatid == 0) 847 | { 848 | str = "*Only the fearless may proceed.#*Brave ones, foolish ones.#*Both walk not the middle road."; 849 | } 850 | if (chatid == 1) 851 | { 852 | str = "*Stay on the path."; 853 | } 854 | if (chatid == 2) 855 | { 856 | str = "*Press X to read signs!"; 857 | } 858 | if (chatid == 3) 859 | { 860 | str = "*The western room is the#eastern room's blueprint."; 861 | } 862 | if (chatid == 4) 863 | { 864 | str = "*Ribbit. Ribbit.#*Excuse me, human$*I have some advice#for you about battling#monsters.$*If you ACT a certain way#or FIGHT util you#almost defeat them...$*They might not want to#battle anymore.$*If a monster does not#want to fight you, please...$*Use some MERCY, human.#*Ribbit."; 865 | } 866 | if (chatid == 5) 867 | { 868 | str = "*The western room is the#eastern room's blueprint."; 869 | } 870 | if (chatid == 6) 871 | { 872 | event(9); 873 | } 874 | if (chatid == 7) 875 | { 876 | event(10); 877 | } 878 | if (chatid == 8) 879 | { 880 | str = "*Please press this switch.# # -TORIEL"; 881 | } 882 | if (chatid == 9) 883 | { 884 | str = "*Please press this switch#too. # -TORIEL"; 885 | } 886 | if (chatid == 10) 887 | { 888 | str = "*This lever doesn't even work."; 889 | if (TEvent == 10) 890 | { 891 | hom = "toriel_side"; 892 | str = "*No no no!$*You want to press the#other switch.$*I even labelled it for#you..."; 893 | } 894 | } 895 | if (chatid == 11) 896 | { 897 | if (TEvent == 13) {battlestart(0); NumOfCol--; TEvent = 14;} 898 | } 899 | if (chatid != 6 && chatid != 7 && chatid != 11) 900 | action = true; 901 | 902 | } 903 | 904 | } -------------------------------------------------------------------------------- /src/events.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | 3 | namespace tale 4 | { 5 | using namespace Tyra; 6 | 7 | void tale::event(int event) 8 | { 9 | if (TEvent == event) 10 | { 11 | TYRA_LOG("Event EXECUTED."); 12 | if (event == 0) 13 | { 14 | str = "*Howdy!$*I'm FLOWEY.#*FLOWEY the FLOWER!$*Hm...$*You're new to the#UNDERGROUND, aren'tcha?$*Golly, you must be#so confused.$*Someone ought to teach#you how things work#around here!$*I guess little old me#have to do.$*Ready?#*Here we go!"; 15 | tipechat = 0; 16 | action = true; 17 | hom = "flowey_neutral"; 18 | engine->audio.song.load(FileUtils::fromCwd("Sounds/Your-Best-Friend.wav")); 19 | engine->audio.song.inLoop = true; 20 | engine->audio.song.setVolume(60); 21 | engine->audio.song.play(); 22 | TEvent = 1; 23 | } 24 | if (event == 1) 25 | { 26 | str = "*What a terrible creature#torturing such a poor, #inocent youth...$*Ah, do not be afraid,#my child.$*I am TORIEL,#caretaker of the RUINS.$*I pass through here everyday#to see if anyone has fallen#down.$*You are the first human#to come here in a#long time.$*Come!#I will guide you through the#catacombs.$*This way."; 27 | setinstance(Vec2(46, 300), 1); 28 | tipechat = 0; 29 | action = true; 30 | hom = "toriel_neutral"; 31 | TEvent = 2; 32 | engine->audio.song.stop(); 33 | engine->audio.song.load(FileUtils::fromCwd("Sounds/Fallen-Down.wav")); 34 | engine->audio.song.inLoop = true; 35 | engine->audio.song.setVolume(60); 36 | engine->audio.song.play(); 37 | } 38 | if (event == 2 || event == 3 || event == 4 || event == 5) 39 | { 40 | TEvent++; 41 | } 42 | if (event == 6) 43 | { 44 | str = "*Welcome to your new#home, innocent one.$*Allow me to educate you#in the operation of the#RUINS."; 45 | tipechat = 0; 46 | action = true; 47 | hom = "toriel_neutral"; 48 | TEvent = 7; 49 | } 50 | if (event == 7) 51 | { 52 | str = "*The RUINS are full of#puzzles.$*Ancient fusions bettwen#diversions and door keys.$*One must solve them#to move from room to#room$*Please adjust yourself#to the sight of them."; 53 | tipechat = 0; 54 | action = true; 55 | hom = "toriel_neutral"; 56 | TEvent = 8; 57 | } 58 | if (event == 8) 59 | { 60 | str = "*To make progress here,#you will need to trigger#several switches.$*Do not worry, I have#labelled the ones that#you need to flip."; 61 | tipechat = 0; 62 | action = true; 63 | hom = "toriel_neutral"; 64 | TEvent = 9; 65 | setcolissioninmap(618, -36, 790, 52);//19 66 | } 67 | if (event == 9) 68 | { 69 | 70 | TEvent = 10; 71 | instances[0].dir = 1; 72 | NumOfCol--; 73 | setcolissioninmap(1058, -32, 1200, 52);//19 74 | } 75 | if (event == 10) 76 | { 77 | TEvent = 11; 78 | instances[1].dir = 1; 79 | NumOfCol--; 80 | } 81 | if (event == 11) 82 | { 83 | str = "*Explendid!#*I am proud of you,#little one.$Let us move to the#next room."; 84 | tipechat = 0; 85 | action = true; 86 | hom = "toriel_happy"; 87 | TEvent = 12; 88 | } 89 | if (event == 12) 90 | { 91 | str = "*As a human living in#the UNDERGROUND,#monsters may attack you.$*You will need to be#prepared for this#situation.$*However, worry not!#*The process is simple.$*When you encounter a#monster, you will enter#a FIGHT.$*While you are in a#FIGHT, strike up a#friendly conversation.$*Stall for time.#I will come to resolve#the conflict.$*Practice talking to#the dummy."; 92 | tipechat = 0; 93 | action = true; 94 | hom = "toriel_neutral"; 95 | TEvent = 13; 96 | } 97 | if (event == 14) 98 | { 99 | if (TL_Dummy == 0) str = "*Ah, very good!#*You are very good."; 100 | if (TL_Dummy == 1) str = "*Ahh.. the dummies are#not for fighting!#*They are for talking!$*We do not want to hurt#anybody, do we...?#*Come now."; 101 | if (TL_Dummy == 2) str = "*...$*...$*The next room awaits."; 102 | if (TL_Dummy == 3) str = "*...$*... you ran away...$*Truthfully, that was not#a poor choice.$*It is better to#avoid conflict#whenever possible.$*That... however, is#only a dummy.#*It cannot harm you,$*It is only made of cotton.#*It has no desire#for revenge...$*Nevermind.#*Stay close to me and#I will keep you safe."; 103 | tipechat = 0; 104 | action = true; 105 | hom = "toriel_neutral"; 106 | TEvent = 15; 107 | } 108 | if (event == 99) 109 | { 110 | str = "..."; 111 | tipechat = 0; 112 | action = true; 113 | hom = ""; 114 | TEvent = 8; 115 | } 116 | 117 | 118 | } 119 | } 120 | 121 | 122 | } -------------------------------------------------------------------------------- /src/instances.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | 3 | namespace tale 4 | { 5 | using namespace Tyra; 6 | 7 | void tale::setinstance(Vec2 pos, int id) 8 | { 9 | auto& repo = engine->renderer.getTextureRepository(); 10 | std::string path1, path2, path3, path4; 11 | std::string pathw1, pathw2, pathw3, pathw4; 12 | std::string pathwd1, pathwd2, pathwd3, pathwd4; 13 | instances[InstanceCount].Pos.x = pos.x; 14 | instances[InstanceCount].Pos.y = pos.y; 15 | if (id == 0) 16 | { 17 | path1 = FileUtils::fromCwd("sprites/Characters/Flowey/f0.png"); 18 | } 19 | if (id == 1) 20 | { 21 | path1 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_d_0.png"); 22 | path2 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_r_0.png"); 23 | path3 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_u_0.png"); 24 | path4 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_l_0.png"); 25 | 26 | pathw1 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_d_1.png"); 27 | pathw2 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_r_1.png"); 28 | pathw3 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_u_1.png"); 29 | pathw4 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_l_1.png"); 30 | 31 | pathwd1 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_d_3.png"); 32 | pathwd2 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_r_3.png"); 33 | pathwd3 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_u_3.png"); 34 | pathwd4 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_l_3.png"); 35 | instances[InstanceCount].ins_sprite.size = Vec2(64 * 2,64 * 2); 36 | instances[InstanceCount].direnable = true; 37 | instances[InstanceCount].walkanm = true; 38 | } 39 | instances[InstanceCount].id = id; 40 | instances[InstanceCount].texture = repo.add(path1); 41 | if (instances[InstanceCount].direnable) 42 | { 43 | instances[InstanceCount].texture1 = repo.add(path2); 44 | instances[InstanceCount].texture2 = repo.add(path3); 45 | instances[InstanceCount].texture3 = repo.add(path4); 46 | } 47 | if (instances[InstanceCount].walkanm) 48 | { 49 | instances[InstanceCount].MoveD1 = repo.add(pathw1); 50 | instances[InstanceCount].MoveR1 = repo.add(pathw2); 51 | instances[InstanceCount].MoveU1 = repo.add(pathw3); 52 | instances[InstanceCount].MoveL1 = repo.add(pathw4); 53 | 54 | instances[InstanceCount].MoveD2 = repo.add(pathwd1); 55 | instances[InstanceCount].MoveR2 = repo.add(pathwd2); 56 | instances[InstanceCount].MoveU2 = repo.add(pathwd3); 57 | instances[InstanceCount].MoveL2 = repo.add(pathwd4); 58 | } 59 | instances[InstanceCount].texture->addLink(instances[InstanceCount].ins_sprite.id); 60 | InstanceCount++; 61 | } 62 | void tale::setinstance(int posX, int posY, int id) 63 | { 64 | auto& repo = engine->renderer.getTextureRepository(); 65 | std::string path1, path2, path3, path4; 66 | std::string pathw1, pathw2, pathw3, pathw4; 67 | std::string pathwd1, pathwd2, pathwd3, pathwd4; 68 | instances[InstanceCount].Pos.x = posX; 69 | instances[InstanceCount].Pos.y = posY; 70 | if (id == 0) 71 | { 72 | path1 = FileUtils::fromCwd("sprites/Characters/Flowey/f0.png"); 73 | } 74 | if (id == 1) 75 | { 76 | path1 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_d_0.png"); 77 | path2 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_r_0.png"); 78 | path3 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_u_0.png"); 79 | path4 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_l_0.png"); 80 | 81 | pathw1 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_d_1.png"); 82 | pathw2 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_r_1.png"); 83 | pathw3 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_u_1.png"); 84 | pathw4 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_l_1.png"); 85 | 86 | pathwd1 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_d_3.png"); 87 | pathwd2 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_r_3.png"); 88 | pathwd3 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_u_3.png"); 89 | pathwd4 = FileUtils::fromCwd("sprites/Characters/Toriel/spr_toriel_l_3.png"); 90 | instances[InstanceCount].ins_sprite.size = Vec2(64 * 2,64 * 2); 91 | instances[InstanceCount].direnable = true; 92 | instances[InstanceCount].walkanm = true; 93 | } 94 | if (id == 2) 95 | { 96 | path1 = FileUtils::fromCwd("sprites/instances/inst_button0.png"); 97 | path2 = FileUtils::fromCwd("sprites/instances/inst_button1.png"); 98 | path3 = FileUtils::fromCwd("sprites/instances/inst_button0.png"); 99 | path4 = FileUtils::fromCwd("sprites/instances/inst_button1.png"); 100 | instances[InstanceCount].direnable = true; 101 | } 102 | if (id == 3) 103 | { 104 | path1 = FileUtils::fromCwd("sprites/instances/RuinsDoor.png"); 105 | instances[InstanceCount].ins_sprite.size *= 2; 106 | 107 | } 108 | if (id == 4) 109 | { 110 | path1 = FileUtils::fromCwd("sprites/instances/switch0.png"); 111 | path2 = FileUtils::fromCwd("sprites/instances/switch1.png"); 112 | path3 = FileUtils::fromCwd("sprites/instances/switch0.png"); 113 | path4 = FileUtils::fromCwd("sprites/instances/switch1.png"); 114 | instances[InstanceCount].direnable = true; 115 | instances[InstanceCount].ins_sprite.size /= 2; 116 | } 117 | if (id == 5) 118 | { 119 | path1 = FileUtils::fromCwd("sprites/Characters/dummy/dummy_ins.png"); 120 | } 121 | if (id == 6) 122 | { 123 | path1 = FileUtils::fromCwd("sprites/instances/sign.png"); 124 | } 125 | instances[InstanceCount].id = id; 126 | instances[InstanceCount].texture = repo.add(path1); 127 | instances[InstanceCount].dir = 0; 128 | if (instances[InstanceCount].direnable) 129 | { 130 | instances[InstanceCount].texture1 = repo.add(path2); 131 | instances[InstanceCount].texture2 = repo.add(path3); 132 | instances[InstanceCount].texture3 = repo.add(path4); 133 | } 134 | if (instances[InstanceCount].walkanm) 135 | { 136 | instances[InstanceCount].MoveD1 = repo.add(pathw1); 137 | instances[InstanceCount].MoveR1 = repo.add(pathw2); 138 | instances[InstanceCount].MoveU1 = repo.add(pathw3); 139 | instances[InstanceCount].MoveL1 = repo.add(pathw4); 140 | 141 | instances[InstanceCount].MoveD2 = repo.add(pathwd1); 142 | instances[InstanceCount].MoveR2 = repo.add(pathwd2); 143 | instances[InstanceCount].MoveU2 = repo.add(pathwd3); 144 | instances[InstanceCount].MoveL2 = repo.add(pathwd4); 145 | } 146 | instances[InstanceCount].texture->addLink(instances[InstanceCount].ins_sprite.id); 147 | InstanceCount++; 148 | } 149 | void tale::removeinstances() 150 | { 151 | for (int i = 0; i < InstanceCount; i++) 152 | { 153 | instances[i].Pos = Vec2(0,0); 154 | instances[i].id = -1; 155 | auto* rem = engine->renderer.getTextureRepository().getBySpriteId(instances[i].ins_sprite.id); 156 | rem->removeLinkById(instances[i].ins_sprite.id); 157 | instances[i].texture->addLink(instances[i].ins_sprite.id); 158 | engine->renderer.getTextureRepository().free(instances[i].texture); 159 | if (instances[InstanceCount].direnable) 160 | { 161 | engine->renderer.getTextureRepository().free(instances[i].texture1); 162 | engine->renderer.getTextureRepository().free(instances[i].texture2); 163 | engine->renderer.getTextureRepository().free(instances[i].texture3); 164 | } 165 | if (instances[InstanceCount].walkanm) 166 | { 167 | engine->renderer.getTextureRepository().free(instances[i].MoveR1); 168 | engine->renderer.getTextureRepository().free(instances[i].MoveL1); 169 | engine->renderer.getTextureRepository().free(instances[i].MoveU1); 170 | engine->renderer.getTextureRepository().free(instances[i].MoveD1); 171 | engine->renderer.getTextureRepository().free(instances[i].MoveR2); 172 | engine->renderer.getTextureRepository().free(instances[i].MoveL2); 173 | engine->renderer.getTextureRepository().free(instances[i].MoveU2); 174 | engine->renderer.getTextureRepository().free(instances[i].MoveD2); 175 | } 176 | instances[i].direnable = false; 177 | instances[i].walkanm = false; 178 | instances[i].dir = 0; 179 | instances[i].ins_sprite.size = Vec2(32 * 2,32 * 2); 180 | } 181 | InstanceCount = 0; 182 | } 183 | void tale::drawinstances() 184 | { 185 | if (mapid == mapcons){ 186 | auto& ren = engine->renderer.renderer2D; 187 | for (int i = 0; i < InstanceCount; i++) 188 | { 189 | if (instances[i].dir != instances[i].dircons && !instances[i].movingX && !instances[i].movingY) 190 | { 191 | auto* rem = engine->renderer.getTextureRepository().getBySpriteId(instances[i].ins_sprite.id); 192 | rem->removeLinkById(instances[i].ins_sprite.id); 193 | if (instances[i].dir == 0) instances[i].texture->addLink(instances[i].ins_sprite.id); 194 | if (instances[i].dir == 1) instances[i].texture1->addLink(instances[i].ins_sprite.id); 195 | if (instances[i].dir == 2) instances[i].texture2->addLink(instances[i].ins_sprite.id); 196 | if (instances[i].dir == 3) instances[i].texture3->addLink(instances[i].ins_sprite.id); 197 | instances[i].dircons = instances[i].dir; 198 | 199 | } 200 | if (!instances[i].movingX && !instances[i].movingY && instances[i].movingcons) 201 | { 202 | auto* rem = engine->renderer.getTextureRepository().getBySpriteId(instances[i].ins_sprite.id); 203 | rem->removeLinkById(instances[i].ins_sprite.id); 204 | instances[i].dircons = 999; 205 | instances[i].movingcons = false; 206 | instances[i].anmcount = 0; 207 | } 208 | else if ((instances[i].movingX || instances[i].movingY) && instances[i].walkanm) 209 | { 210 | if (instances[i].dir != instances[i].dircons) 211 | { 212 | instances[i].anmcount = -1; 213 | instances[i].dircons = instances[i].dir; 214 | } 215 | if (instances[i].anmcount == 0) 216 | { 217 | auto* rem = engine->renderer.getTextureRepository().getBySpriteId(instances[i].ins_sprite.id); 218 | rem->removeLinkById(instances[i].ins_sprite.id); 219 | if (instances[i].dir == 0) instances[i].MoveD1->addLink(instances[i].ins_sprite.id); 220 | if (instances[i].dir == 1) instances[i].MoveR1->addLink(instances[i].ins_sprite.id); 221 | if (instances[i].dir == 2) instances[i].MoveU1->addLink(instances[i].ins_sprite.id); 222 | if (instances[i].dir == 3) instances[i].MoveL1->addLink(instances[i].ins_sprite.id); 223 | } 224 | else if (instances[i].anmcount == 10) 225 | { 226 | auto* rem = engine->renderer.getTextureRepository().getBySpriteId(instances[i].ins_sprite.id); 227 | rem->removeLinkById(instances[i].ins_sprite.id); 228 | if (instances[i].dir == 0) instances[i].texture->addLink(instances[i].ins_sprite.id); 229 | if (instances[i].dir == 1) instances[i].texture1->addLink(instances[i].ins_sprite.id); 230 | if (instances[i].dir == 2) instances[i].texture2->addLink(instances[i].ins_sprite.id); 231 | if (instances[i].dir == 3) instances[i].texture3->addLink(instances[i].ins_sprite.id); 232 | } 233 | else if (instances[i].anmcount == 20) 234 | { 235 | auto* rem = engine->renderer.getTextureRepository().getBySpriteId(instances[i].ins_sprite.id); 236 | rem->removeLinkById(instances[i].ins_sprite.id); 237 | if (instances[i].dir == 0) instances[i].MoveD2->addLink(instances[i].ins_sprite.id); 238 | if (instances[i].dir == 1) instances[i].MoveR2->addLink(instances[i].ins_sprite.id); 239 | if (instances[i].dir == 2) instances[i].MoveU2->addLink(instances[i].ins_sprite.id); 240 | if (instances[i].dir == 3) instances[i].MoveL2->addLink(instances[i].ins_sprite.id); 241 | } 242 | else if (instances[i].anmcount == 30) 243 | { 244 | auto* rem = engine->renderer.getTextureRepository().getBySpriteId(instances[i].ins_sprite.id); 245 | rem->removeLinkById(instances[i].ins_sprite.id); 246 | if (instances[i].dir == 0) instances[i].texture->addLink(instances[i].ins_sprite.id); 247 | if (instances[i].dir == 1) instances[i].texture1->addLink(instances[i].ins_sprite.id); 248 | if (instances[i].dir == 2) instances[i].texture2->addLink(instances[i].ins_sprite.id); 249 | if (instances[i].dir == 3) instances[i].texture3->addLink(instances[i].ins_sprite.id); 250 | } 251 | 252 | if (instances[i].anmcount >= 40) {instances[i].anmcount = -1;} 253 | } 254 | instances[i].ins_sprite.position.x = map1.position.x + (instances[i].Pos.x + 256); 255 | instances[i].ins_sprite.position.y = map1.position.y + (instances[i].Pos.y + 256); 256 | 257 | if (instances[i].id == 0) 258 | { 259 | if (TEvent <= 1) {draw_instance(i);} 260 | } 261 | else if (instances[i].id == 1 && mapid == 1) 262 | { 263 | draw_instance(i); 264 | } 265 | else if (instances[i].id == 3 && mapid == 3) 266 | { 267 | if (TEvent < 8 && mapanmcount < 5) draw_instance(i); 268 | } 269 | else if (instances[i].id == 5 && mapid == 5) 270 | { 271 | if (TL_Dummy != 1) draw_instance(i); 272 | } 273 | else draw_instance(i); 274 | } 275 | ren.render(player); 276 | } 277 | } 278 | bool tale::instmoveX(int id, int X1, int X2) 279 | { 280 | if (!action) 281 | { 282 | for (int i = 0; i < InstanceCount; i++) 283 | { 284 | if (instances[i].id == id) 285 | { 286 | 287 | if (X1 > 0) 288 | { 289 | if (instances[i].Pos.x < X2) 290 | { 291 | instances[i].Pos.x += X1; 292 | instances[i].dir = 1; 293 | instances[i].movingX = true; 294 | instances[i].anmcount++; 295 | } 296 | else 297 | { 298 | instances[i].movingX = false; 299 | return true; 300 | } 301 | } 302 | else if (X1 < 0) 303 | { 304 | if (instances[i].Pos.x > X2) 305 | { 306 | instances[i].Pos.x += X1; 307 | instances[i].dir = 3; 308 | instances[i].movingX = true; 309 | instances[i].anmcount++; 310 | } 311 | else 312 | { 313 | instances[i].movingX = false; 314 | return true; 315 | } 316 | } 317 | } 318 | } 319 | } 320 | return false; 321 | } 322 | bool tale::instmoveY(int id, int Y1, int Y2) 323 | { 324 | if (!action) 325 | { 326 | for (int i = 0; i < InstanceCount; i++) 327 | { 328 | if (instances[i].id == id) 329 | { 330 | 331 | if (Y1 > 0) 332 | { 333 | if (instances[i].Pos.y < Y2) 334 | { 335 | instances[i].Pos.y += Y1; 336 | instances[i].dir = 0; 337 | instances[i].movingY = true; 338 | instances[i].anmcount++; 339 | } 340 | else 341 | { 342 | instances[i].movingY = false; 343 | return true; 344 | } 345 | } 346 | else if (Y1 < 0) 347 | { 348 | if (instances[i].Pos.y > Y2) 349 | { 350 | instances[i].Pos.y += Y1; 351 | instances[i].dir = 2; 352 | instances[i].movingY = true; 353 | instances[i].anmcount++; 354 | } 355 | else 356 | { 357 | instances[i].movingY = false; 358 | return true; 359 | } 360 | } 361 | } 362 | } 363 | } 364 | return false; 365 | } 366 | void tale::instmove(int id, int dir) 367 | { 368 | if (!action) 369 | { 370 | for (int i = 0; i < InstanceCount; i++) 371 | { 372 | if (instances[i].id == id) 373 | { 374 | if (instances[i].direnable) instances[i].dir = dir; 375 | } 376 | } 377 | } 378 | } 379 | void tale::inst_conditionmove() 380 | { 381 | if (mapid == 1 && TEvent == 2) 382 | { 383 | if (instmoveY(1, -4, 0)) 384 | { 385 | instfadeout(1); 386 | } 387 | } 388 | if (mapid == 2) 389 | { 390 | if (TEvent == 3 && instmoveY(1, -4, 284)) instmove(1, 0); 391 | if (TEvent == 4 ) 392 | { 393 | bool Yt = instmoveY(1, -4, 76); 394 | bool Xt = instmoveX(1, 4, 150); 395 | if (Yt && Xt) instmove(1, 0); 396 | } 397 | if (TEvent == 5 ) 398 | { 399 | bool Yt = instmoveY(1, -4, -100); 400 | bool Xt = instmoveX(1, 4, 234); 401 | if (Yt && Xt) instmove(1, 0); 402 | } 403 | if (TEvent == 6 ) 404 | { 405 | bool Xt = instmoveX(1, -4, 35); 406 | if (Xt) 407 | { 408 | instmove(1, 2); 409 | instfadeout(1); 410 | } 411 | } 412 | } 413 | if (mapid == 3) 414 | { 415 | if (TEvent == 7 ) 416 | { 417 | 418 | if (mapanmcount == 0) 419 | { 420 | bool Xt = instmoveX(1, 4, 178); 421 | if (instances[8].Pos.x > 70) instances[4].dir = 1; 422 | if (instances[8].Pos.x > 140) instances[5].dir = 1; 423 | Pstop = true; 424 | if (Xt) mapanmcount = 1; 425 | 426 | } 427 | if (mapanmcount == 1) 428 | { 429 | bool Yt = instmoveY(1, -4, -140); 430 | if (Yt) mapanmcount = 2; 431 | } 432 | if (mapanmcount == 2) 433 | { 434 | bool Xt = instmoveX(1, -4, 92); 435 | if (instances[8].Pos.x < 110) instances[1].dir = 1; 436 | if (instances[8].Pos.x < 186) instances[2].dir = 1; 437 | if (Xt) mapanmcount = 3; 438 | } 439 | if (mapanmcount == 3) 440 | { 441 | bool Yt = instmoveY(1, -4, -180); 442 | if (Yt) mapanmcount = 4; 443 | } 444 | if (mapanmcount == 4) 445 | { 446 | bool Xt = instmoveX(1, 4, 150); 447 | if (Xt) 448 | { 449 | mapanmcount = 5; 450 | instmove(1, 2); 451 | } 452 | } 453 | if (mapanmcount == 5) 454 | { 455 | bool shakin = mapshake(); 456 | instances[7].dir = 1; 457 | 458 | if (!shakin) 459 | mapanmcount = 6; 460 | } 461 | if (mapanmcount == 6) 462 | { 463 | bool Xt = instmoveX(1, -4, 0); 464 | if (Xt) 465 | { 466 | mapanmcount = 7; 467 | } 468 | } 469 | if (mapanmcount == 7) 470 | { 471 | bool Yt = instmoveY(1, 4, -88); 472 | if (Yt) 473 | { 474 | mapanmcount = 0; 475 | event(7); 476 | Pstop = false; 477 | } 478 | } 479 | } 480 | if (TEvent == 8 ) 481 | { 482 | bool Yt = instmoveY(1, -4, -200); 483 | if (Yt) 484 | { 485 | instfadeout(1); 486 | } 487 | } 488 | } 489 | if (mapid == 4) 490 | { 491 | if (TEvent == 9) 492 | { 493 | bool Xt = instmoveX(1, 4, 654); 494 | if (Xt) 495 | { 496 | instmove(1, 3); 497 | } 498 | } 499 | if (TEvent == 10 ) 500 | { 501 | bool Xt = instmoveX(1, 4, 1094); 502 | if (Xt) 503 | { 504 | instmove(1, 3); 505 | } 506 | } 507 | if (TEvent == 11 ) 508 | { 509 | Pstop = true; 510 | bool shakin = mapshake(); 511 | if (!shakin) 512 | { 513 | event(11); 514 | } 515 | } 516 | if (TEvent == 12 ) 517 | { 518 | mapanmcount = 0; 519 | Pstop = false; 520 | instmoveX(1, 4, 1500); 521 | 522 | } 523 | } 524 | if (mapid == 5) 525 | { 526 | if (TEvent == 13 ) 527 | { 528 | if (mapanmcount == 0) 529 | { 530 | bool check = instmoveY(1, -4, -170); 531 | if (check) {mapanmcount = 1; instmove(1, 0);} 532 | } 533 | 534 | } 535 | if (TEvent == 14 && GameState == 0) 536 | { 537 | event(14); 538 | } 539 | if (TEvent == 15) 540 | { 541 | bool check = instmoveY(1, -4, -200); 542 | if (check) { instfadeout(1); } 543 | } 544 | } 545 | } 546 | void tale::instfadeout(int id) 547 | { 548 | for (int i = 0; i < InstanceCount; i++) 549 | { 550 | if (instances[i].id == id) 551 | { 552 | instances[i].ins_sprite.color.a -= 6; 553 | if (instances[i].ins_sprite.color.a < 0) instances[i].ins_sprite.color.a = 0; 554 | } 555 | } 556 | } 557 | 558 | void tale::draw_instance(int ID) 559 | { 560 | engine->renderer.renderer2D.render(instances[ID].ins_sprite); 561 | } 562 | } -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "Undertale.hpp" 3 | 4 | int main() { 5 | Tyra::EngineOptions options; 6 | 7 | #if !debugmode 8 | options.writeLogsToFile = true; 9 | options.loadUsbDriver = true; 10 | #endif 11 | 12 | Tyra::Engine engine(options); 13 | tale::tale game(&engine); 14 | engine.run(&game); 15 | SleepThread(); 16 | return 0; 17 | } 18 | -------------------------------------------------------------------------------- /src/maps.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | 3 | namespace tale 4 | { 5 | using namespace Tyra; 6 | 7 | void tale::mapinit() 8 | { 9 | map1.mode = SpriteMode::MODE_STRETCH; 10 | map2.mode = SpriteMode::MODE_STRETCH; 11 | map3.mode = SpriteMode::MODE_STRETCH; 12 | map4.mode = SpriteMode::MODE_STRETCH; 13 | map5.mode = SpriteMode::MODE_STRETCH; 14 | 15 | map1.size = Vec2(512 * 2, 512 * 2); 16 | map2.size = Vec2(512 * 2, 512 * 2); 17 | map3.size = Vec2(512 * 2, 512 * 2); 18 | map4.size = Vec2(512 * 2, 512 * 2); 19 | map5.size = Vec2(512 * 2, 512 * 2); 20 | player.size = Vec2(32 * 2, 32 * 2); 21 | 22 | camborder = Vec4(-9999, -9999, 9999, 9999); 23 | if (mapid == 0) 24 | { 25 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_1a.png"); 26 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_1b.png"); 27 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_1a.png"); 28 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_1b.png"); 29 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_1a.png"); 30 | 31 | camborder = Vec4(12, 60, 828, 60); 32 | setcolissioninmap(-300, -212, -140, -144);//0 33 | setcolissioninmap(-188, -216,340, -184);//1 34 | setcolissioninmap(184, -208,324, -144);//2 35 | setcolissioninmap(264, -180, 940, 16);//3 36 | setcolissioninmap(980, -64, 1104, 16);//4 37 | setcolissioninmap(1028, -40, 1084, 140);//5 38 | setcolissioninmap(188, 80,1072, 160);//6 39 | setcolissioninmap(152, 120,248, 204);//7 40 | setcolissioninmap(-152, 160,228, 196);//8 41 | setcolissioninmap(-188, 120, -100, 204);//9 42 | setcolissioninmap(-212, 84,-136, 124);//10 43 | setcolissioninmap(-260, 36,-180, 80);//11 44 | setcolissioninmap(-288, -200,-216, 72);//12 45 | setcolissioninmap(888, -88, 1032, -16);//13 46 | 47 | colact[13].x = 1; 48 | colact[13].y = 1; 49 | colact[13].z = 0; 50 | 51 | if (mapspawn == 0){ Ppos = Vec2(28, -28); } 52 | if (mapspawn == 1){ Ppos = Vec2(968, 24); } 53 | 54 | 55 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 56 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 57 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 58 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 59 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 60 | texture1->addLink(map1.id); 61 | texture2->addLink(map2.id); 62 | texture3->addLink(map3.id); 63 | texture4->addLink(map4.id); 64 | texture5->addLink(map5.id); 65 | } 66 | 67 | if (mapid == 1) 68 | { 69 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_2.png"); 70 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_2.png"); 71 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_2.png"); 72 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_2.png"); 73 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_2.png"); 74 | 75 | camborder = Vec4(46, -9999, 46, 9999); 76 | setcolissioninmap(-78, 612, 186, 640);//0 77 | setcolissioninmap(-34, -32, 178, 8);//1 78 | setcolissioninmap(70, -16, 126, 756);//2 79 | setcolissioninmap(-70, -24, 26, 768);//3 80 | setcolissioninmap(-110, 400, 270, 420); 81 | if (TEvent == 0) setinstance(Vec2(42, 315), 0); 82 | 83 | colact[0].x = 1; 84 | colact[0].y = 0; 85 | colact[0].z = 1; 86 | 87 | colact[1].x = 1; 88 | colact[1].y = 2; 89 | colact[1].z = 0; 90 | 91 | 92 | colact[4].x = 2; 93 | colact[4].y = 0; 94 | colact[4].z = 0; 95 | 96 | if (mapspawn == 0){Ppos = Vec2(46, 584);} 97 | if (mapspawn == 1){Ppos = Vec2(46, 28);} 98 | 99 | 100 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 101 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 102 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 103 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 104 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 105 | texture1->addLink(map1.id); 106 | texture2->addLink(map2.id); 107 | texture3->addLink(map3.id); 108 | texture4->addLink(map4.id); 109 | texture5->addLink(map5.id); 110 | } 111 | 112 | if (mapid == 2) 113 | { 114 | 115 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_3.png"); 116 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_3.png"); 117 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_3.png"); 118 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_3.png"); 119 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_3.png"); 120 | 121 | 122 | camborder = Vec4(38, 40, 90, 504); 123 | setcolissioninmap(-10, 580, 118, 640);//0 124 | setcolissioninmap(-6, -112, 102, -72);//1 125 | 126 | setcolissioninmap(-250, -120, -174, 272);//2 127 | setcolissioninmap(-242, 84, -138, 504);//3 128 | setcolissioninmap(230, 84, 300, 504);//4 129 | 130 | setcolissioninmap(-294, 444, -22, 548);//5 131 | setcolissioninmap(106, 444, 362, 548);//6 132 | setcolissioninmap(-50, 524, 26, 700);//7 133 | setcolissioninmap(70, 524, 200, 700);//8 134 | setcolissioninmap(270, -148, 374, 524);//9 135 | setcolissioninmap(-170, -112, 314, -72);//10 136 | setcolissioninmap(-126, -32, 218, 8);//11 137 | 138 | setcolissioninmap(-18, 500, 102, 516);//12 139 | setcolissioninmap(-134, 348, 226, 404);//13 140 | setcolissioninmap(-134, 120, 226, 216);//14 141 | 142 | setcolissioninmap(-170, 12, 266, 28);//15 143 | 144 | colact[12].x = 2; 145 | colact[12].y = 2; 146 | 147 | colact[13].x = 2; 148 | colact[13].y = 3; 149 | 150 | colact[14].x = 2; 151 | colact[14].y = 4; 152 | 153 | colact[15].x = 2; 154 | colact[15].y = 5; 155 | 156 | if (TEvent == 2) setinstance(Vec2(26, 384), 1); 157 | if (TEvent == 3) setinstance(Vec2(26, 284), 1); 158 | if (TEvent == 4) setinstance(Vec2(150, 76), 1); 159 | if (TEvent == 5) setinstance(Vec2(234, -68), 1); 160 | 161 | colact[0].x = 1; 162 | colact[0].y = 1; 163 | colact[0].z = 1; 164 | 165 | colact[1].x = 1; 166 | colact[1].y = 3; 167 | colact[1].z = 0; 168 | 169 | if (mapspawn == 0){Ppos = Vec2(42, 552);} 170 | if (mapspawn == 1){Ppos = Vec2(46, -60);} 171 | 172 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 173 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 174 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 175 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 176 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 177 | texture1->addLink(map1.id); 178 | texture2->addLink(map2.id); 179 | texture3->addLink(map3.id); 180 | texture4->addLink(map4.id); 181 | texture5->addLink(map5.id); 182 | } 183 | 184 | if (mapid == 3) 185 | { 186 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_4.png"); 187 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_4.png"); 188 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_4.png"); 189 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_4.png"); 190 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_4.png"); 191 | 192 | 193 | camborder = Vec4(66, 24, 66, 24); 194 | setcolissioninmap(-10, 124, 102, 164);//0 195 | setcolissioninmap(-34, -184, 54, -156);//1 196 | setcolissioninmap(-266, 48, 378, 84);//2 197 | 198 | setcolissioninmap(-246, -204, 362, -156);//3 199 | setcolissioninmap(186, -180, 322, -104);//4 200 | setcolissioninmap(226, -136, 362, -64);//5 201 | setcolissioninmap(266, -144, 54, 184);//6 202 | setcolissioninmap(-206, -192, -134, -108);//7 203 | setcolissioninmap(-242, -172, -178, 168);//8 204 | setcolissioninmap(-174, 123, 314, 164);//9 205 | setcolissioninmap(266, -60, 358, 168);//10 206 | setcolissioninmap(226, 44, 330, 84);//11 207 | setcolissioninmap(190, 84, 298, 120);//12 208 | setcolissioninmap(-174, 84, -58, 120);//13 209 | setcolissioninmap(-110, -152, -74, -152);//14 210 | 211 | setinstance(-15, -220, 3);//0 212 | 213 | setinstance(110, -48, 2);//1 214 | setinstance(186, -48, 2);//2 215 | setinstance(150, -8, 2);//3 216 | setinstance(110, 32, 2);//4 217 | setinstance(186, 32, 2);//5 218 | setinstance(150, 72, 2);//6 219 | setinstance(174, -128, 4);//7 220 | if (TEvent > 6) { instances[7].dir = 1; } 221 | if (TEvent == 6) setinstance(22, -52, 1);//8 222 | 223 | 224 | colact[0].x = 1; 225 | colact[0].y = 2; 226 | colact[0].z = 1; 227 | 228 | colact[1].x = 1; 229 | colact[1].y = 4; 230 | 231 | colact[2].x = 2; 232 | colact[2].y = 6; 233 | 234 | colact[14].x = 4; 235 | colact[14].y = 0; 236 | 237 | if (mapspawn == 0){Ppos = Vec2(42, 116);} 238 | if (mapspawn == 1){Ppos = Vec2(6, -140);} 239 | 240 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 241 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 242 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 243 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 244 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 245 | texture1->addLink(map1.id); 246 | texture2->addLink(map2.id); 247 | texture3->addLink(map3.id); 248 | texture4->addLink(map4.id); 249 | texture5->addLink(map5.id); 250 | } 251 | if (mapid == 4) 252 | { 253 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_5a.png"); 254 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_5b.png"); 255 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_1a.png"); 256 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_1b.png"); 257 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_1a.png"); 258 | 259 | camborder = Vec4(70, 24, 962, 24); 260 | setcolissioninmap(-58, 144, 62, 176);//0 261 | setcolissioninmap(1174, -52, 1214, 80);//1 262 | 263 | setcolissioninmap(-218, -188, 1154, -148);//2 264 | setcolissioninmap(1106, -192, 1200, -24);//3 265 | setcolissioninmap(1106, 44, 1238, 180);//4 266 | setcolissioninmap(30, 120, 1206, 160);//5 267 | setcolissioninmap(190, 40, 298, 160);//6 268 | setcolissioninmap(190, -172, 298, -24);//7 269 | setcolissioninmap(674, -164, 778, -24);//8 270 | setcolissioninmap(674, 44, 778, 164);//9 271 | setcolissioninmap(-30, -76, 42, -20);//10 272 | setcolissioninmap(-35, -82, 46, -15);//11 273 | setcolissioninmap(-70, -144, -26, -144);//12 274 | setcolissioninmap(-262, 120, -18, 120);//13 275 | setcolissioninmap(-270, -256, -174, 116);//14 276 | 277 | setinstance(534, -136, 4); 278 | if (TEvent > 9) instances[0].dir = 1; 279 | setinstance(942, -136, 4); 280 | if (TEvent > 10) instances[1].dir = 1; 281 | 282 | setinstance(1014, -136, 4); 283 | 284 | setcolissioninmap(510, -144, 550, -144);//15 285 | colact[15].x = 4; 286 | colact[15].y = 6; 287 | 288 | setcolissioninmap(918, -144, 960, -144);//16 289 | colact[16].x = 4; 290 | colact[16].y = 7; 291 | 292 | setcolissioninmap(830, -144, 882, -144);//17 293 | colact[17].x = 4; 294 | colact[17].y = 9; 295 | setcolissioninmap(434, -144, 482, -144);//18 296 | colact[18].x = 4; 297 | colact[18].y = 8; 298 | setcolissioninmap(982, -144, 1030, -144);//19 299 | colact[19].x = 4; 300 | colact[19].y = 10; 301 | 302 | if (TEvent == 8 ) {setinstance(58, -32, 1); instmove(1, 0);} 303 | if (TEvent == 9 ) {setinstance(654, -32, 1); instmove(1, 3);} 304 | if (TEvent == 10 ) {setinstance(1094, -32, 1); instmove(1, 3);} 305 | 306 | if (TEvent == 9) {setcolissioninmap(618, -36, 790, 52);} 307 | if (TEvent == 10) {setcolissioninmap(1058, -32, 1200, 52);} 308 | event(8); 309 | 310 | colact[0].x = 1; 311 | colact[0].y = 3; 312 | colact[0].z = 1; 313 | 314 | colact[1].x = 1; 315 | colact[1].y = 5; 316 | 317 | colact[11].x = 4; 318 | colact[11].y = 2; 319 | 320 | colact[12].x = 4; 321 | colact[12].y = 1; 322 | 323 | if (mapspawn == 0){Ppos = Vec2(6, 96);} 324 | if (mapspawn == 1){Ppos = Vec2 (1150, -4);} 325 | 326 | 327 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 328 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 329 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 330 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 331 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 332 | texture1->addLink(map1.id); 333 | texture2->addLink(map2.id); 334 | texture3->addLink(map3.id); 335 | texture4->addLink(map4.id); 336 | texture5->addLink(map5.id); 337 | } 338 | 339 | if (mapid == 5) 340 | { 341 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_6.png"); 342 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_5b.png"); 343 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_1a.png"); 344 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_1b.png"); 345 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_1a.png"); 346 | 347 | 348 | camborder = Vec4(6, 14, 62, 14); 349 | setcolissioninmap(-298, -54, -234, 90);//0 350 | setcolissioninmap(-22, -198, 106, -158);//1 351 | setcolissioninmap(106, -106, 178, -62);//2 352 | setcolissioninmap(-318, -78, -174, -30);//3 353 | setcolissioninmap(-214, -142, -138, -66);//4 354 | setcolissioninmap(-186, -166, -98, -106);//5 355 | setcolissioninmap(-174, -194, 26, -150);//6 356 | setcolissioninmap(66, -194, 282, -150);//7 357 | setcolissioninmap(186, -182, 314, -110);//8 358 | setcolissioninmap(258, -114, 334, 158);//9 359 | setcolissioninmap(226, 42, 346, 162);//10 360 | setcolissioninmap(190, 82, 330, 202);//11 361 | setcolissioninmap(-226, 122, 318, 166);//12 362 | setcolissioninmap(-210, 82, -94, 170);//13 363 | setcolissioninmap(-300, 42, -138, 78);//14 364 | setcolissioninmap(230, -106, 254, -66);//15 365 | 366 | setcolissioninmap(110, -130, 178, -66);//16 367 | if (TL_Dummy != 1) setcolissioninmap(100, -140, 188, -56);//17 368 | else setcolissioninmap(0, 0, 0, 0);//17 369 | if (TEvent < 14) {setcolissioninmap(-22, -146, 90, -114); setcolissioninmap(-26, -146, 94, -110); 370 | colact[19].x = 4; 371 | colact[19].y = 11; 372 | }//18 19 373 | else {setcolissioninmap(0, 0, 0, 0); setcolissioninmap(0, 0, 0, 0);}//18 19 374 | colact[17].x = 4; 375 | colact[17].y = 11; 376 | 377 | setinstance(146, -70, 5);//0 378 | if (TEvent == 12){setinstance(38, -26, 1); instmove(1, 3);} 379 | if (TEvent == 13){setinstance(38, -170, 1); instmove(1, 0);} 380 | event(12); 381 | 382 | 383 | colact[0].x = 1; 384 | colact[0].y = 4; 385 | colact[0].z = 1; 386 | 387 | colact[1].x = 1; 388 | colact[1].y = 6; 389 | 390 | colact[2].x = 2; 391 | colact[2].y = 5; 392 | 393 | 394 | 395 | if (mapspawn == 0){Ppos = Vec2(-210, -10);} 396 | if (mapspawn == 1){Ppos = Vec2(46, -138);} 397 | 398 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 399 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 400 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 401 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 402 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 403 | texture1->addLink(map1.id); 404 | texture2->addLink(map2.id); 405 | texture3->addLink(map3.id); 406 | texture4->addLink(map4.id); 407 | texture5->addLink(map5.id); 408 | } 409 | if (mapid == 6) 410 | { 411 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_7a.png"); 412 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_7b.png"); 413 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_7c.png"); 414 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_1b.png"); 415 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_1a.png"); 416 | 417 | camborder = Vec4(-4032, 22, -2212, 22); 418 | setcolissioninmap(-4176, 126, -3964, 174);//0 419 | setcolissioninmap(-2020, -138, -1952, 50);//1 420 | setcolissioninmap(-4032, 82, -2604, 154);//2 421 | setcolissioninmap(-2952, 42, -2016, 122);//3 422 | setcolissioninmap(-2152, -42, -1928, 94);//4 423 | setcolissioninmap(-3520, -150, -1896, -102);//5 424 | setcolissioninmap(-3060, -100, -2675, -22);//6 425 | setcolissioninmap(-3348, -126, -2992, 18);//7 426 | setcolissioninmap(-3592, -2, -3392, 138);//8 427 | setcolissioninmap(-3308, -18, -3228, 146);//9 428 | setcolissioninmap(-3588, -186, -3320, -62);//10 429 | setcolissioninmap(-4328, -198, -3524, -146);//11 430 | setcolissioninmap(-4340, -210, -4272, 162);//12 431 | setcolissioninmap(-4364, 82, -4072, 106);//13 432 | 433 | setcolissioninmap(-3228, 10, -3120, 24);//14 434 | 435 | 436 | colact[0].x = 1; 437 | colact[0].y = 5; 438 | colact[0].z = 1; 439 | 440 | colact[1].x = 1; 441 | colact[1].y = 7; 442 | colact[1].z = 0; 443 | 444 | colact[9].x = 3; 445 | colact[9].y = 1; 446 | 447 | colact[14].x = 4; 448 | colact[14].y = 3; 449 | 450 | if (mapspawn == 0){Ppos = Vec2(-4052, 98);} 451 | if (mapspawn == 1){Ppos = Vec2(-2032, -86);} 452 | 453 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 454 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 455 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 456 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 457 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 458 | texture1->addLink(map1.id); 459 | texture2->addLink(map2.id); 460 | texture3->addLink(map3.id); 461 | texture4->addLink(map4.id); 462 | texture5->addLink(map5.id); 463 | } 464 | if (mapid == 7) 465 | { 466 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_8a.png"); 467 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_8b.png"); 468 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_8c.png"); 469 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_8d.png"); 470 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_8e.png"); 471 | 472 | camborder = Vec4(0, -26, 4472, -26); 473 | setcolissioninmap(4674, -154, 4762, 66);//0 474 | setcolissioninmap(4618, -190, 4800, -106);//1 475 | setcolissioninmap(4618, -34, 4754, 90);//2 476 | setcolissioninmap(-242, -178, 4674, -146);//3 477 | setcolissioninmap(-318, -42, -186, 114);//4 478 | setcolissioninmap(-314, -326, -186, -106);//5 479 | setcolissioninmap(-314, -138, -232, -30);//6 480 | setcolissioninmap(-234, 42, 4718, 98);//7 481 | 482 | 483 | colact[6].x = 1; 484 | colact[6].y = 6; 485 | colact[6].z = 1; 486 | 487 | colact[0].x = 1; 488 | colact[0].y = 8; 489 | colact[0].z = 0; 490 | 491 | if (mapspawn == 0){Ppos = Vec2(-200, -90);} 492 | if (mapspawn == 1){Ppos = Vec2(4646, -86);} 493 | 494 | 495 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 496 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 497 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 498 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 499 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 500 | texture1->addLink(map1.id); 501 | texture2->addLink(map2.id); 502 | texture3->addLink(map3.id); 503 | texture4->addLink(map4.id); 504 | texture5->addLink(map5.id); 505 | } 506 | if (mapid == 8) 507 | { 508 | 509 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_9.png"); 510 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_9.png"); 511 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_9.png"); 512 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_9.png"); 513 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_9.png"); 514 | 515 | camborder = Vec4(6, 10, 122, 418); 516 | setcolissioninmap(-322, -294, -134, -106);//0 517 | setcolissioninmap(-186, -278, 26, -142);//1 518 | setcolissioninmap(66, -234, 314, -146);//2 519 | setcolissioninmap(226, -226, 382, 378);//3 520 | setcolissioninmap(-274, -38, -134, 646);//4 521 | setcolissioninmap(-190, 518, 310, 570);//5 522 | setcolissioninmap(-326, -150, -222, 14);//6 523 | setcolissioninmap(-22, -218, 114, -166);//7 524 | setcolissioninmap(310, 358, 386, 486);//8 525 | setcolissioninmap(230, 442, 414, 598);//9 526 | 527 | colact[6].x = 1; 528 | colact[6].y = 7; 529 | colact[6].z = 1; 530 | 531 | colact[8].x = 1; 532 | colact[8].y = 10; 533 | colact[8].z = 0; 534 | 535 | colact[7].x = 1; 536 | colact[7].y = 9; 537 | colact[7].z = 0; 538 | 539 | colact[10].x = 3; 540 | colact[10].y = 2; 541 | colact[10].z = 0; 542 | 543 | if (mapspawn == 0){Ppos = Vec2(-214, -86);} 544 | if (mapspawn == 1){Ppos = Vec2(46, -134);} 545 | if (mapspawn == 2){Ppos = Vec2(310, 394);} 546 | 547 | 548 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 549 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 550 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 551 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 552 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 553 | texture1->addLink(map1.id); 554 | texture2->addLink(map2.id); 555 | texture3->addLink(map3.id); 556 | texture4->addLink(map4.id); 557 | texture5->addLink(map5.id); 558 | } 559 | if (mapid == 9) 560 | { 561 | auto PPath1 = FileUtils::fromCwd("sprites/maps/ruin_10.png"); 562 | auto PPath2 = FileUtils::fromCwd("sprites/maps/ruin_10.png"); 563 | auto PPath3 = FileUtils::fromCwd("sprites/maps/ruin_8c.png"); 564 | auto PPath4 = FileUtils::fromCwd("sprites/maps/ruin_8d.png"); 565 | auto PPath5 = FileUtils::fromCwd("sprites/maps/ruin_8e.png"); 566 | 567 | camborder = Vec4(46, 22, 46, 22); 568 | setcolissioninmap(-10, 126, 114, 194);//0 569 | setcolissioninmap(-166, -190, 262, -134);//1 570 | setcolissioninmap(110, -178, 214, 130);//2 571 | setcolissioninmap(70, 82, 186, 178);//3 572 | setcolissioninmap(-170, 82, 18, 186);//4 573 | setcolissioninmap(-150, -206, -22, 150);//4 574 | 575 | colact[0].x = 1; 576 | colact[0].y = 8; 577 | colact[0].z = 1; 578 | 579 | 580 | if (mapspawn == 0){Ppos = Vec2(42, 118);} 581 | 582 | 583 | auto* texture1 = engine->renderer.getTextureRepository().add(PPath1); 584 | auto* texture2 = engine->renderer.getTextureRepository().add(PPath2); 585 | auto* texture3 = engine->renderer.getTextureRepository().add(PPath3); 586 | auto* texture4 = engine->renderer.getTextureRepository().add(PPath4); 587 | auto* texture5 = engine->renderer.getTextureRepository().add(PPath5); 588 | texture1->addLink(map1.id); 589 | texture2->addLink(map2.id); 590 | texture3->addLink(map3.id); 591 | texture4->addLink(map4.id); 592 | texture5->addLink(map5.id); 593 | } 594 | 595 | } 596 | 597 | void tale::setcolissioninmap(float X1, float Y1, float X2, float Y2) 598 | { 599 | colpos[NumOfCol] = Tyra::Vec4(X1,Y1, X2, Y2); 600 | NumOfCol++; 601 | }; 602 | void tale::resetcolissioninmap() 603 | { 604 | for (int i = 0; i <= 100; i++){ 605 | colpos[i] = Vec4(0,0,0,0); 606 | colact[i] = Vec4(0,0,0,0); 607 | } 608 | 609 | NumOfCol = 0; 610 | } 611 | void tale::colcheck() 612 | { 613 | for (int i = 0; i < NumOfCol; i++) 614 | { 615 | bool xcol = false, ycol = false, pxcol = false, pycol = false; 616 | if (colpos[i].x <= Ppos.x && colpos[i].z >= Ppos.x) 617 | { 618 | xcol = true; 619 | } 620 | if (colpos[i].y <= Ppos.y && colpos[i].w >= Ppos.y) 621 | { 622 | ycol = true; 623 | } 624 | if (colpos[i].x <= Pposcons.x && colpos[i].z >= Pposcons.x) 625 | { 626 | pxcol = true; 627 | } 628 | if (colpos[i].y <= Pposcons.y && colpos[i].w >= Pposcons.y) 629 | { 630 | pycol = true; 631 | } 632 | 633 | if (xcol && ycol && !pxcol && pycol) 634 | { 635 | if (colact[i].x == 0) { Ppos.x = Pposcons.x;} 636 | if (colact[i].x == 1) { mapid = colact[i].y; mapspawn = colact[i].z;} 637 | if (colact[i].x == 2 && !action) { event(colact[i].y);} 638 | if (colact[i].x == 3) {battlestart(colact[i].y);} 639 | 640 | } 641 | if (xcol && ycol && pxcol && !pycol) 642 | { 643 | if (colact[i].x == 0) { Ppos.y = Pposcons.y;} 644 | if (colact[i].x == 1) { mapid = colact[i].y; mapspawn = colact[i].z;} 645 | if (colact[i].x == 2 && !action) { event(colact[i].y);} 646 | if (colact[i].x == 3) {battlestart(colact[i].y);} 647 | } 648 | if (xcol && ycol && pxcol && pycol) 649 | { 650 | if (colact[i].x == 4 && !action) {if(engine->pad.getClicked().Cross){chatstart(colact[i].y);}} 651 | } 652 | 653 | } 654 | 655 | Pposcons = Ppos; 656 | } 657 | void tale::mapchange() { 658 | if (mapid != mapcons && !mapdone) 659 | { 660 | Tbool = true; 661 | } 662 | } 663 | 664 | void tale::maptheme() 665 | { 666 | if (mapid >= 2 && music != 0) 667 | { 668 | music = 0; 669 | engine->audio.song.load(FileUtils::fromCwd("Sounds/Ruins.wav")); 670 | engine->audio.song.inLoop = true; 671 | engine->audio.song.setVolume(60); 672 | engine->audio.song.play(); 673 | } 674 | if (mapid == 0 || mapid == 1) 675 | { 676 | engine->audio.song.stop(); 677 | music = 99999; 678 | } 679 | } 680 | 681 | bool tale::mapshake() 682 | { 683 | camstatic = true; 684 | if (mapshakeanm == 0) 685 | { 686 | map1.position.x += 30; 687 | player.position.x += 30; 688 | } 689 | if (mapshakeanm == 10) 690 | { 691 | map1.position.x -= 60; 692 | player.position.x -= 60; 693 | 694 | } 695 | if (mapshakeanm == 20) 696 | { 697 | map1.position.x += 60; 698 | player.position.x += 60; 699 | 700 | } 701 | if (mapshakeanm == 30) 702 | { 703 | map1.position.x -= 60; 704 | player.position.x -= 60; 705 | 706 | } 707 | if (mapshakeanm == 40) 708 | { 709 | map1.position.x += 30; 710 | player.position.x += 30; 711 | 712 | } 713 | mapshakeanm++; 714 | if (mapshakeanm >= 60) 715 | { 716 | camstatic = false; 717 | mapshakeanm = 0; 718 | return false; 719 | } 720 | return true; 721 | } 722 | } 723 | -------------------------------------------------------------------------------- /src/monsters.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | 3 | namespace tale 4 | { 5 | using namespace Tyra; 6 | 7 | void tale::battlestart(int monsid) 8 | { 9 | Enemyinfo enf; 10 | music = 99999; 11 | if (monsid == 0) 12 | { 13 | enf.name = "Dummy"; 14 | enf.encountertex = "*You encountered the Dummy."; 15 | enf.neutral1 = "*Dummy stands around #absentmindedly."; 16 | enf.neutral2 = "*Dummy looks like it's #about to fall over."; 17 | enf.textpath = FileUtils::fromCwd("sprites/Characters/dummy/Dummy.png"); 18 | enf.dmgtextpath = FileUtils::fromCwd("sprites/Characters/dummy/Dummy_defeat.png"); 19 | enf.musicpath = FileUtils::fromCwd("Sounds/Anticipation.wav"); 20 | enf.check = "*A cotton heart and a button eye. #*You are the apple of my eye."; 21 | enf.spech1 = ". . . . ."; 22 | enf.spech2 = ". . . . ."; 23 | enf.spech3 = ". . . . ."; 24 | enf.actaction[0] = "*You talk to the dummy.#*...$*It doesn't seem much for#conversation.$*TORIEL seems happy with you."; 25 | enf.hostile = false; 26 | enf.numactoptions = 1; 27 | enf.specialcontition = 0; 28 | enf.adcdiag = "*Dummy tires of your aimless shenanigans."; 29 | enf.actoption[0] = "*Talk"; 30 | } 31 | if (monsid == 1) 32 | { 33 | enf.name = "Froggit"; 34 | enf.att = 5; 35 | enf.def = 4; 36 | enf.maxhp = 20; 37 | enf.currhp = 20; 38 | enf.encountertex = "*Froggit attacks you!"; 39 | enf.neutral1 = "*You are intimidated by#Froggit's raw strength. #Only kidding."; 40 | enf.neutral2 = "*Froggit hops to and fro."; 41 | enf.textpath = FileUtils::fromCwd("sprites/Characters/Froggit/spr_placeholder.png"); 42 | enf.dmgtextpath = FileUtils::fromCwd("sprites/Characters/Froggit/spr_froggit_1.png"); 43 | enf.musicpath = FileUtils::fromCwd("Sounds/009-Enemy-Approaching.wav"); 44 | enf.check = "*Life is difficult for this enemy."; 45 | enf.spech1 = "Ribbit, ribbit."; 46 | enf.spech2 = "Croak, croak"; 47 | enf.hostile = false; 48 | } 49 | if (monsid == 2) 50 | { 51 | enf.name = "Froggit"; 52 | enf.att = 5; 53 | enf.def = 4; 54 | enf.maxhp = 40; 55 | enf.currhp = 40; 56 | enf.encountertex = "*Froggit hopped close!"; 57 | enf.neutral1 = "*You are intimidated by#Froggit's raw strength. #Only kidding."; 58 | enf.neutral2 = "*Froggit hops to and fro."; 59 | enf.textpath = FileUtils::fromCwd("sprites/Characters/Froggit/spr_placeholder.png"); 60 | enf.dmgtextpath = FileUtils::fromCwd("sprites/Characters/Froggit/spr_froggit_1.png"); 61 | enf.musicpath = FileUtils::fromCwd("Sounds/009-Enemy-Approaching.wav"); 62 | enf.check = "*Life is difficult for this enemy."; 63 | enf.spech1 = "Ribbit, ribbit."; 64 | enf.spech2 = "Croak, croak"; 65 | enf.hostile = false; 66 | } 67 | 68 | Enemy = enf; 69 | GameState = 1; 70 | } 71 | } -------------------------------------------------------------------------------- /src/player.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | 3 | namespace tale 4 | { 5 | using namespace Tyra; 6 | 7 | 8 | void tale::reloadplayer() 9 | { 10 | if (!Tbool && !mapdone && !action && !Pstop){ 11 | const auto pad = engine->pad.getPressed(); 12 | const auto ppad = engine->pad.getClicked(); 13 | 14 | 15 | #if debugmode 16 | if (ppad.Cross) {TYRA_LOG(Ppos.x); TYRA_LOG(Ppos.y); TYRA_LOG(TL_Dummy); TYRA_LOG(TEvent); TYRA_LOG("-------------------------");} 17 | if (ppad.R1) { mapid++; } 18 | if (ppad.L1) { mapid--; } 19 | if (ppad.Triangle) { TEvent++;TYRA_LOG(TEvent); } 20 | if (ppad.Circle) { TEvent--;TYRA_LOG(TEvent); } 21 | #endif 22 | 23 | if (pad.DpadRight) 24 | { 25 | 26 | Ppos.x += vel; 27 | direction = 4; 28 | 29 | }else if (pad.DpadLeft) 30 | { 31 | Ppos.x -= vel; 32 | direction = 2; 33 | } 34 | if (pad.DpadUp) 35 | { 36 | Ppos.y -= vel; 37 | direction = 3; 38 | 39 | }else if (pad.DpadDown) 40 | { 41 | Ppos.y += vel; 42 | direction = 1; 43 | 44 | } 45 | 46 | if (pad.DpadUp || pad.DpadDown || pad.DpadLeft || pad.DpadRight) 47 | { 48 | moving = true; 49 | standing = false; 50 | } else 51 | { 52 | moving = false; 53 | anm = 0; 54 | } 55 | 56 | if (moving == false && standing == false) 57 | { 58 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 59 | textremove->removeLinkById(player.id); 60 | if (direction == 1){ptex1->addLink(player.id);} 61 | else if (direction == 2){ptex2->addLink(player.id);} 62 | else if(direction == 3){ptex3->addLink(player.id);} 63 | else if(direction == 4){ptex4->addLink(player.id);} 64 | standing = true; 65 | } 66 | 67 | if (moving) 68 | { 69 | anm += 4; 70 | if (anm > 100) {anm = 0;} 71 | 72 | if (direction == 1) 73 | { 74 | if (dircons != 1 && anm < 50) {anmt=false;} 75 | if (dircons != 1 && anm > 50) {anmt=true;} 76 | if (anm < 50 && !anmt) 77 | { 78 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 79 | textremove->removeLinkById(player.id); 80 | pmtex1->addLink(player.id); 81 | anmt = true; 82 | } 83 | if (anm > 50 && anmt) 84 | { 85 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 86 | textremove->removeLinkById(player.id); 87 | pmtex2->addLink(player.id); 88 | anmt = false; 89 | } 90 | } 91 | if (direction == 2) 92 | { 93 | if (dircons != 2 && anm < 50) {anmt=false;} 94 | if (dircons != 2 && anm > 50) {anmt=true;} 95 | if (anm < 50 && !anmt) 96 | { 97 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 98 | textremove->removeLinkById(player.id); 99 | pmtex3->addLink(player.id); 100 | anmt = true; 101 | } 102 | if (anm > 50 && anmt) 103 | { 104 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 105 | textremove->removeLinkById(player.id); 106 | pmtex4->addLink(player.id); 107 | anmt = false; 108 | } 109 | } 110 | if (direction == 3) 111 | { 112 | if (dircons != 3 && anm < 50) {anmt=false;} 113 | if (dircons != 3 && anm > 50) {anmt=true;} 114 | if (anm < 50 && !anmt) 115 | { 116 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 117 | textremove->removeLinkById(player.id); 118 | pmtex5->addLink(player.id); 119 | anmt = true; 120 | } 121 | if (anm > 50 && anmt) 122 | { 123 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 124 | textremove->removeLinkById(player.id); 125 | pmtex6->addLink(player.id); 126 | anmt = false; 127 | } 128 | } 129 | if (direction == 4) 130 | { 131 | if (dircons != 4 && anm < 50) {anmt=false;} 132 | if (dircons != 4 && anm > 50) {anmt=true;} 133 | if (anm < 50 && !anmt) 134 | { 135 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 136 | textremove->removeLinkById(player.id); 137 | pmtex7->addLink(player.id); 138 | anmt = true; 139 | } 140 | if (anm > 50 && anmt) 141 | { 142 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 143 | textremove->removeLinkById(player.id); 144 | pmtex8->addLink(player.id); 145 | anmt = false; 146 | } 147 | } 148 | 149 | 150 | }else{ 151 | 152 | if (direction != dircons){ 153 | auto* textremove = engine->renderer.getTextureRepository().getBySpriteId(player.id); 154 | textremove->removeLinkById(player.id); 155 | if (direction == 1){ptex1->addLink(player.id);} 156 | else if (direction == 2){ptex2->addLink(player.id);} 157 | else if(direction == 3){ptex3->addLink(player.id);} 158 | else if(direction == 4){ptex4->addLink(player.id);} 159 | } 160 | } 161 | dircons = direction; 162 | 163 | } 164 | 165 | } 166 | 167 | void tale::startplayer() 168 | { 169 | auto PPath1 = FileUtils::fromCwd("sprites/transition.png"); 170 | TYRA_LOG("started"); 171 | auto* transtexture = engine->renderer.getTextureRepository().add(PPath1); 172 | transtexture->addLink(trans.id); 173 | 174 | 175 | trans.position = Vec2(0, 0); 176 | trans.size = Vec2(512,512); 177 | trans.color.a = 0; 178 | 179 | auto Pathp3 = FileUtils::fromCwd("sprites/spr_maincharau_2.png"); 180 | auto Pathp2 = FileUtils::fromCwd("sprites/spr_maincharal_0.png"); 181 | auto Pathp1 = FileUtils::fromCwd("sprites/spr_maincharad_2.png"); 182 | auto Pathp4 = FileUtils::fromCwd("sprites/spr_maincharar_0.png"); 183 | 184 | Tyra::Texture* Ptex[4] = { 185 | engine->renderer.getTextureRepository().add(Pathp1), 186 | engine->renderer.getTextureRepository().add(Pathp2), 187 | engine->renderer.getTextureRepository().add(Pathp3), 188 | engine->renderer.getTextureRepository().add(Pathp4) 189 | }; 190 | 191 | auto Pathm1 = FileUtils::fromCwd("sprites/spr_maincharad_1.png"); 192 | auto Pathm2 = FileUtils::fromCwd("sprites/spr_maincharad_3.png"); 193 | 194 | auto Pathm3 = FileUtils::fromCwd("sprites/spr_maincharal_1.png"); 195 | auto Pathm4 = FileUtils::fromCwd("sprites/spr_maincharal_0.png"); 196 | 197 | auto Pathm5 = FileUtils::fromCwd("sprites/spr_maincharau_1.png"); 198 | auto Pathm6 = FileUtils::fromCwd("sprites/spr_maincharau_3.png"); 199 | 200 | auto Pathm7 = FileUtils::fromCwd("sprites/spr_maincharar_1.png"); 201 | auto Pathm8 = FileUtils::fromCwd("sprites/spr_maincharar_0.png"); 202 | 203 | Tyra::Texture* PtexM[8] = { 204 | engine->renderer.getTextureRepository().add(Pathm1), 205 | engine->renderer.getTextureRepository().add(Pathm2), 206 | engine->renderer.getTextureRepository().add(Pathm3), 207 | engine->renderer.getTextureRepository().add(Pathm4), 208 | engine->renderer.getTextureRepository().add(Pathm5), 209 | engine->renderer.getTextureRepository().add(Pathm6), 210 | engine->renderer.getTextureRepository().add(Pathm7), 211 | engine->renderer.getTextureRepository().add(Pathm8) 212 | }; 213 | 214 | 215 | ptex1 = Ptex[0]; 216 | ptex2 = Ptex[1]; 217 | ptex3 = Ptex[2]; 218 | ptex4 = Ptex[3]; 219 | 220 | pmtex1 = PtexM[0]; 221 | pmtex2 = PtexM[1]; 222 | pmtex3 = PtexM[2]; 223 | pmtex4 = PtexM[3]; 224 | pmtex5 = PtexM[4]; 225 | pmtex6 = PtexM[5]; 226 | pmtex7 = PtexM[6]; 227 | pmtex8 = PtexM[7]; 228 | 229 | 230 | player.mode = SpriteMode::MODE_STRETCH; 231 | player.size = Vec2(24, 32); 232 | player.position = Vec2(256, 256); 233 | Ptex[0]->addLink(player.id); 234 | 235 | menuoptionoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_select.adpcm")); 236 | texnoise = engine->audio.adpcm.load(FileUtils::fromCwd("Sounds/adpcm/snd_TXT1.adpcm")); 237 | 238 | 239 | for (int i = 0; i < 100; i++) 240 | { 241 | instances[i].ins_sprite.mode = MODE_STRETCH; 242 | instances[i].direnable = false; 243 | instances[i].walkanm = false; 244 | instances[i].id = -1; 245 | instances[i].ins_sprite.size = Vec2(32 * 2,32 * 2); 246 | } 247 | 248 | fontload(0); 249 | } 250 | } -------------------------------------------------------------------------------- /src/transition.cpp: -------------------------------------------------------------------------------- 1 | #include "Undertale.hpp" 2 | 3 | namespace tale 4 | { 5 | using namespace Tyra; 6 | 7 | void tale::transition() 8 | { 9 | if (Tbool) 10 | { 11 | if (trans.color.a < 128) 12 | { 13 | trans.color.a += 6; 14 | } 15 | if (trans.color.a >= 128 && !mapdone) 16 | { 17 | trans.color.a = 128; 18 | engine->renderer.getTextureRepository().freeBySprite(map1); 19 | engine->renderer.getTextureRepository().freeBySprite(map2); 20 | engine->renderer.getTextureRepository().freeBySprite(map3); 21 | engine->renderer.getTextureRepository().freeBySprite(map4); 22 | engine->renderer.getTextureRepository().freeBySprite(map5); 23 | mapanmcount = 0; 24 | for (int i = 0; i < 100; i++) 25 | { 26 | instances[i].ins_sprite.mode = MODE_STRETCH; 27 | instances[i].id = -1; 28 | instances[i].ins_sprite.color.a = 128; 29 | instances[i].ins_sprite.size = Vec2(32 * 2,32 * 2); 30 | } 31 | resetcolissioninmap(); 32 | removeinstances(); 33 | mapcons = mapid; 34 | mapinit(); 35 | mapdone = true; 36 | maptheme(); 37 | Tbool = false; 38 | } 39 | } 40 | 41 | if (mapdone) 42 | { 43 | trans.color.a -= 6; 44 | if (trans.color.a < 0) 45 | { 46 | trans.color.a = 0; 47 | mapdone = false; 48 | } 49 | } 50 | } 51 | 52 | } -------------------------------------------------------------------------------- /windows-pcsx2.ps1: -------------------------------------------------------------------------------- 1 | $PCSX2_PATH = "${Env:ProgramFiles(x86)}/PCSX2" 2 | $PCSX2_EXE = 'pcsx2.exe' 3 | 4 | function GetTargetELFName { 5 | return (Select-String -Path './Makefile' -Pattern "[^ ]*.elf").Matches.Value 6 | } 7 | 8 | function RunPCSX2 { 9 | $PCSX2_EXE_WITHOUT_EXT = (Split-Path $PCSX2_EXE -Leaf).Split('.')[0] 10 | Stop-Process -Name $PCSX2_EXE_WITHOUT_EXT -ErrorAction 'SilentlyContinue' 11 | Start-Process -FilePath "$PCSX2_PATH/$PCSX2_EXE" -ArgumentList "--elf=$PWD/bin/$(GetTargetELFName)" 12 | } --------------------------------------------------------------------------------