Skip to content

Commit 4f2b040

Browse files
committed
e
1 parent 45a04a3 commit 4f2b040

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+15097
-0
lines changed

.gitignore

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
build
2+
*.elf
3+
*.nacp
4+
*.nro
5+
source/other/
6+
romfs/game_data.sav
7+
saves
8+
script

.vscode/c_cpp_properties.json

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"configurations": [
3+
{
4+
"name": "DKP aarch64",
5+
"includePath": [
6+
"C:/devkitPro/devkitA64/aarch64-none-elf/include/**",
7+
"C:/devkitPro/devkitA64/lib/gcc/aarch64-none-elf/10.2.0/include/**",
8+
"C:/devkitPro/libnx/include/**",
9+
"C:/devkitPro/portlibs/switch/include/**",
10+
"${workspaceRoot}/include/**"
11+
],
12+
"defines": [
13+
"SWITCH",
14+
"__SWITCH__",
15+
"DEBUG"
16+
],
17+
"compilerPath": "C:/devkitPro/devkitA64/bin/aarch64-none-elf-g++.exe",
18+
"cStandard": "c11",
19+
"cppStandard": "c++17",
20+
"intelliSenseMode": "gcc-x64"
21+
}
22+
],
23+
"version": 4
24+
}

.vscode/settings.json

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"files.associations": {
3+
"array": "cpp",
4+
"atomic": "cpp",
5+
"bit": "cpp",
6+
"*.tcc": "cpp",
7+
"cctype": "cpp",
8+
"chrono": "cpp",
9+
"clocale": "cpp",
10+
"cmath": "cpp",
11+
"compare": "cpp",
12+
"concepts": "cpp",
13+
"condition_variable": "cpp",
14+
"cstdarg": "cpp",
15+
"cstddef": "cpp",
16+
"cstdint": "cpp",
17+
"cstdio": "cpp",
18+
"cstdlib": "cpp",
19+
"cstring": "cpp",
20+
"ctime": "cpp",
21+
"cwchar": "cpp",
22+
"cwctype": "cpp",
23+
"deque": "cpp",
24+
"map": "cpp",
25+
"unordered_map": "cpp",
26+
"vector": "cpp",
27+
"exception": "cpp",
28+
"algorithm": "cpp",
29+
"functional": "cpp",
30+
"iterator": "cpp",
31+
"memory": "cpp",
32+
"memory_resource": "cpp",
33+
"numeric": "cpp",
34+
"optional": "cpp",
35+
"random": "cpp",
36+
"ratio": "cpp",
37+
"string": "cpp",
38+
"string_view": "cpp",
39+
"system_error": "cpp",
40+
"tuple": "cpp",
41+
"type_traits": "cpp",
42+
"utility": "cpp",
43+
"fstream": "cpp",
44+
"initializer_list": "cpp",
45+
"iosfwd": "cpp",
46+
"iostream": "cpp",
47+
"istream": "cpp",
48+
"limits": "cpp",
49+
"mutex": "cpp",
50+
"new": "cpp",
51+
"ostream": "cpp",
52+
"ranges": "cpp",
53+
"sstream": "cpp",
54+
"stdexcept": "cpp",
55+
"stop_token": "cpp",
56+
"streambuf": "cpp",
57+
"thread": "cpp",
58+
"cinttypes": "cpp",
59+
"typeinfo": "cpp",
60+
"iomanip": "cpp"
61+
}
62+
}

.vscode/tasks.json

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"tasks": [
3+
{
4+
"type": "shell",
5+
"label": "Run (Yuzu)",
6+
"command": "./yuzu.bat",
7+
"problemMatcher": [],
8+
"group": {
9+
"kind": "build",
10+
"isDefault": true
11+
},
12+
"dependsOn": [
13+
"Build"
14+
]
15+
},
16+
{
17+
"type": "shell",
18+
"label": "Run (Switch)",
19+
"command": "./nxlink.bat",
20+
"problemMatcher": [],
21+
"group": {
22+
"kind": "build",
23+
"isDefault": true
24+
},
25+
"dependsOn": [
26+
"Build"
27+
]
28+
},
29+
{
30+
"type": "shell",
31+
"label": "Build",
32+
"command": "make -j 3",
33+
"problemMatcher": []
34+
}
35+
],
36+
"version": "2.0.0"
37+
}

Makefile

+226
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
#---------------------------------------------------------------------------------
2+
.SUFFIXES:
3+
#---------------------------------------------------------------------------------
4+
5+
ifeq ($(strip $(DEVKITPRO)),)
6+
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
7+
endif
8+
9+
TOPDIR ?= $(CURDIR)
10+
include $(DEVKITPRO)/libnx/switch_rules
11+
12+
#---------------------------------------------------------------------------------
13+
# TARGET is the name of the output
14+
# BUILD is the directory where object files & intermediate files will be placed
15+
# SOURCES is a list of directories containing source code
16+
# DATA is a list of directories containing data files
17+
# INCLUDES is a list of directories containing header files
18+
# ROMFS is the directory containing data to be added to RomFS, relative to the Makefile (Optional)
19+
#
20+
# NO_ICON: if set to anything, do not use icon.
21+
# NO_NACP: if set to anything, no .nacp file is generated.
22+
# APP_TITLE is the name of the app stored in the .nacp file (Optional)
23+
# APP_AUTHOR is the author of the app stored in the .nacp file (Optional)
24+
# APP_VERSION is the version of the app stored in the .nacp file (Optional)
25+
# APP_TITLEID is the titleID of the app stored in the .nacp file (Optional)
26+
# ICON is the filename of the icon (.jpg), relative to the project folder.
27+
# If not set, it attempts to use one of the following (in this order):
28+
# - <Project name>.jpg
29+
# - icon.jpg
30+
# - <libnx folder>/default_icon.jpg
31+
#
32+
# CONFIG_JSON is the filename of the NPDM config file (.json), relative to the project folder.
33+
# If not set, it attempts to use one of the following (in this order):
34+
# - <Project name>.json
35+
# - config.json
36+
# If a JSON file is provided or autodetected, an ExeFS PFS0 (.nsp) is built instead
37+
# of a homebrew executable (.nro). This is intended to be used for sysmodules.
38+
# NACP building is skipped as well.
39+
#---------------------------------------------------------------------------------
40+
41+
APP_TITLE := BotW Unexplored
42+
APP_AUTHOR := BigBear
43+
44+
TARGET := $(notdir $(CURDIR))
45+
BUILD := build
46+
SOURCES := source source/Graphics
47+
DATA := data
48+
INCLUDES := include
49+
ROMFS := romfs
50+
51+
#---------------------------------------------------------------------------------
52+
# options for code generation
53+
#---------------------------------------------------------------------------------
54+
ARCH := -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE
55+
56+
CFLAGS := -g -Wall -O2 -ffunction-sections \
57+
$(ARCH) $(DEFINES) `freetype-config --cflags`
58+
59+
CFLAGS += $(INCLUDE) -D__SWITCH__
60+
61+
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions
62+
63+
ASFLAGS := -g $(ARCH)
64+
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
65+
66+
LIBS := -lglad -lEGL -lglapi -ldrm_nouveau -lnx `freetype-config --libs`
67+
68+
#---------------------------------------------------------------------------------
69+
# list of directories containing libraries, this must be the top level containing
70+
# include and lib
71+
#---------------------------------------------------------------------------------
72+
LIBDIRS := $(PORTLIBS) $(LIBNX)
73+
74+
75+
#---------------------------------------------------------------------------------
76+
# no real need to edit anything past this point unless you need to add additional
77+
# rules for different file extensions
78+
#---------------------------------------------------------------------------------
79+
ifneq ($(BUILD),$(notdir $(CURDIR)))
80+
#---------------------------------------------------------------------------------
81+
82+
export OUTPUT := $(CURDIR)/$(TARGET)
83+
export TOPDIR := $(CURDIR)
84+
85+
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
86+
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
87+
88+
export DEPSDIR := $(CURDIR)/$(BUILD)
89+
90+
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
91+
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
92+
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
93+
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
94+
95+
#---------------------------------------------------------------------------------
96+
# use CXX for linking C++ projects, CC for standard C
97+
#---------------------------------------------------------------------------------
98+
ifeq ($(strip $(CPPFILES)),)
99+
#---------------------------------------------------------------------------------
100+
export LD := $(CC)
101+
#---------------------------------------------------------------------------------
102+
else
103+
#---------------------------------------------------------------------------------
104+
export LD := $(CXX)
105+
#---------------------------------------------------------------------------------
106+
endif
107+
#---------------------------------------------------------------------------------
108+
109+
export OFILES_BIN := $(addsuffix .o,$(BINFILES))
110+
export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
111+
export OFILES := $(OFILES_BIN) $(OFILES_SRC)
112+
export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES)))
113+
114+
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
115+
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
116+
-I$(CURDIR)/$(BUILD)
117+
118+
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
119+
120+
ifeq ($(strip $(CONFIG_JSON)),)
121+
jsons := $(wildcard *.json)
122+
ifneq (,$(findstring $(TARGET).json,$(jsons)))
123+
export APP_JSON := $(TOPDIR)/$(TARGET).json
124+
else
125+
ifneq (,$(findstring config.json,$(jsons)))
126+
export APP_JSON := $(TOPDIR)/config.json
127+
endif
128+
endif
129+
else
130+
export APP_JSON := $(TOPDIR)/$(CONFIG_JSON)
131+
endif
132+
133+
ifeq ($(strip $(ICON)),)
134+
icons := $(wildcard *.jpg)
135+
ifneq (,$(findstring $(TARGET).jpg,$(icons)))
136+
export APP_ICON := $(TOPDIR)/$(TARGET).jpg
137+
else
138+
ifneq (,$(findstring icon.jpg,$(icons)))
139+
export APP_ICON := $(TOPDIR)/icon.jpg
140+
endif
141+
endif
142+
else
143+
export APP_ICON := $(TOPDIR)/$(ICON)
144+
endif
145+
146+
ifeq ($(strip $(NO_ICON)),)
147+
export NROFLAGS += --icon=$(APP_ICON)
148+
endif
149+
150+
ifeq ($(strip $(NO_NACP)),)
151+
export NROFLAGS += --nacp=$(CURDIR)/$(TARGET).nacp
152+
endif
153+
154+
ifneq ($(APP_TITLEID),)
155+
export NACPFLAGS += --titleid=$(APP_TITLEID)
156+
endif
157+
158+
ifneq ($(ROMFS),)
159+
export NROFLAGS += --romfsdir=$(CURDIR)/$(ROMFS)
160+
endif
161+
162+
.PHONY: $(BUILD) clean all
163+
164+
#---------------------------------------------------------------------------------
165+
all: $(BUILD)
166+
167+
$(BUILD):
168+
@[ -d $@ ] || mkdir -p $@
169+
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
170+
171+
#---------------------------------------------------------------------------------
172+
clean:
173+
@echo clean ...
174+
ifeq ($(strip $(APP_JSON)),)
175+
@rm -fr $(BUILD) $(TARGET).nro $(TARGET).nacp $(TARGET).elf
176+
else
177+
@rm -fr $(BUILD) $(TARGET).nsp $(TARGET).nso $(TARGET).npdm $(TARGET).elf
178+
endif
179+
180+
181+
#---------------------------------------------------------------------------------
182+
else
183+
.PHONY: all
184+
185+
DEPENDS := $(OFILES:.o=.d)
186+
187+
#---------------------------------------------------------------------------------
188+
# main targets
189+
#---------------------------------------------------------------------------------
190+
ifeq ($(strip $(APP_JSON)),)
191+
192+
all : $(OUTPUT).nro
193+
194+
ifeq ($(strip $(NO_NACP)),)
195+
$(OUTPUT).nro : $(OUTPUT).elf $(OUTPUT).nacp
196+
else
197+
$(OUTPUT).nro : $(OUTPUT).elf
198+
endif
199+
200+
else
201+
202+
all : $(OUTPUT).nsp
203+
204+
$(OUTPUT).nsp : $(OUTPUT).nso $(OUTPUT).npdm
205+
206+
$(OUTPUT).nso : $(OUTPUT).elf
207+
208+
endif
209+
210+
$(OUTPUT).elf : $(OFILES)
211+
212+
$(OFILES_SRC) : $(HFILES_BIN)
213+
214+
#---------------------------------------------------------------------------------
215+
# you need a rule like this for each extension you use as binary data
216+
#---------------------------------------------------------------------------------
217+
%.bin.o %_bin.h : %.bin
218+
#---------------------------------------------------------------------------------
219+
@echo $(notdir $<)
220+
@$(bin2o)
221+
222+
-include $(DEPENDS)
223+
224+
#---------------------------------------------------------------------------------------
225+
endif
226+
#---------------------------------------------------------------------------------------

README.md

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# BotW Unexplored
2+
Easily view what hasn't been discovered in your Breath of the Wild savefile, on your Nintendo Switch.
3+
4+
The korok seeds that haven't been collected and the locations that are left to visit are shown on a map, where it's easy to see koroks or locations you've missed.
5+
6+
<img src="https://github.com/lud99/botw-unexplored/blob/master/map1.jpeg?raw=true" width=600>
7+
8+
## Why?
9+
There are other websites and tools to display and even edit your BotW savefile, but none of them run on your Switch. You would have to backup your savefile and then transfer it to a computer, which is unnecessarily complicated. That's why I created this homebrew app.
10+
11+
## Usage
12+
* Download ```botw-unexplored.nro``` from the [releases](https://github.com/lud99/botw-unexplored/releases/download/1.0.0/botw-unexplored.nro), transfer it to your SD card and launch it.
13+
* Choose the profile with your savefile
14+
* Done! Use the analog sticks to move the camera, or use the touch screen to move around
15+
16+
## Building
17+
switch-mesa, switch-glad, switch-freetype and switch-glm are required for building the project. Install them with the command ```pacman -S switch-mesa switch-glad switch-glm switch-freetype```
18+
Then run ```Make``` to build the .nro file.
19+
20+
### Credits
21+
Huge thanks to these kind people for making this project possible
22+
23+
https://github.com/marcrobledo/savegame-editors For most of the data and my primary inspiration
24+
https://github.com/MrCheeze/botw-waypoint-map For all the location data
25+
https://github.com/d4mation/botw-unexplored-viewer For the savefile parsing

icon.jpg

8.21 KB
Loading

0 commit comments

Comments
 (0)