diff --git a/LICENSING.md b/LICENSING.md index 125b9e1..12fd067 100644 --- a/LICENSING.md +++ b/LICENSING.md @@ -50,12 +50,15 @@ make the source of every part available at the revisions it was built from. can only give away what is theirs. The code is a reimplementation derived from a decompilation of Nintendo's game; whether and where that is lawful to use or share is not something these licences settle. -- **Artwork.** `ps5/sce_sys/icon0.png`, `pic0.dds`, `pic1.dds` and the menu - pictures in `ps5/art/res/` (which a built title carries in place of - Dusklight's own logo, icon, emblem and pre-launch background) are drawn by - `ps5/art/make-title-art.py`: a generated landscape, the lettering of - Dusklight's logo (CC0, without its mascot), and Aurora's own mark. Nothing in - them is Nintendo's. +- **Artwork.** `ps5/sce_sys/icon0.png`, `pic0.dds` and `pic1.dds` come from + `ps5/art/icon0-source.png` and `ps5/art/pic-source.jpg`, the port's own + pictures (a young swordsman and a black wolf split by a seam of twilight, over + carved stone, made for it by Gary Riches with an image generator): nothing in + them is from the game. The menu pictures + in `ps5/art/res/` (which a built title carries in place of Dusklight's own + logo, icon, emblem and pre-launch background) are drawn by + `ps5/art/make-title-art.py`: a generated landscape and the lettering of + Dusklight's logo (CC0, without its mascot). Nothing in them is Nintendo's. - **Button symbols.** `ps5/art/glyphs/` (shipped as `res/ps5-glyphs/`) is made from Kenney's Input Prompts (www.kenney.nl), Creative Commons Zero: `ps5/art/kenney/License.txt`. The cross, circle, square and triangle are diff --git a/ps5/art/icon0-source.png b/ps5/art/icon0-source.png new file mode 100644 index 0000000..d74e935 Binary files /dev/null and b/ps5/art/icon0-source.png differ diff --git a/ps5/art/make-title-art.py b/ps5/art/make-title-art.py index 1d5414d..eea3bca 100644 --- a/ps5/art/make-title-art.py +++ b/ps5/art/make-title-art.py @@ -3,13 +3,18 @@ # # python3 ps5/art/make-title-art.py OUTPUT_DIR # -# Writes icon0.png (512x512), pic0.png and pic1.png (3840x2160): a dusk sky over -# hills, generated by this script, with Dusklight's wordmark on pic0 and pic1 and -# Aurora's mark on pic1. Writes res/ too: the pictures the game's menus load, -# to go over Dusklight's own in a title (ps5/art/res/ holds them, and -# tools/link-title.sh lays them in). +# Writes icon0.png (512x512) from icon0-source.png, and pic0.png and pic1.png +# (3840x2160, the same picture) from pic-source.jpg: a young swordsman and a black +# wolf split by a seam of twilight, over carved stone, made for this port by Gary +# Riches with an image generator; nothing in them is from the game. +# tools/png-to-title-dds.py turns pic0.png into sce_sys/pic0.dds, and pic1.dds is +# a copy of it. # -# Nothing here is Nintendo's. Of Dusklight's own artwork only the lettering of +# Writes res/ too: the pictures the game's menus load, drawn by this script (a +# dusk sky over hills), to go over Dusklight's own in a title (ps5/art/res/ holds +# them, and tools/link-title.sh lays them in). +# +# Nothing in res/ is Nintendo's. Of Dusklight's own artwork only the lettering of # res/logo.png is used: its mascot, its application icon, its organisation icon # and its pre-launch background all depict the game (a character, the Triforce, # a screenshot) and stay out of the title. The lettering is cut from the logo @@ -96,20 +101,14 @@ def place(picture: Image.Image, mark: Image.Image, width: int, centre: tuple[flo def main() -> int: out = Path(sys.argv[1]) out.mkdir(parents=True, exist_ok=True) - letters = with_shadow(wordmark(), 14, 0.75) - aurora = Image.open(DUSKLIGHT / "assets/aurora-powered.png").convert("RGBA") + art = Path(__file__).resolve().parent + # pic0, behind the title on the home screen, and pic1, the splash: one picture + picture = Image.open(art / "pic-source.jpg").convert("RGB").resize((3840, 2160), Image.LANCZOS) + picture.save(out / "pic0.png") + picture.save(out / "pic1.png") + Image.open(art / "icon0-source.png").convert("RGB").resize((512, 512), Image.LANCZOS).save(out / "icon0.png") - background = scene(3840, 2160).convert("RGBA") - # pic0, behind the title on the home screen: the shell writes over the lower left - pic0 = background.copy() - place(pic0, letters, 1500, (0.70, 0.30)) - pic0.convert("RGB").save(out / "pic0.png") - # pic1, the splash - pic1 = background.copy() - place(pic1, letters, 2500, (0.50, 0.40)) - place(pic1, with_shadow(aurora, 8, 0.6), 520, (0.50, 0.90)) - pic1.convert("RGB").save(out / "pic1.png") - # icon0: the same sky, square, with the wordmark's first letter + # the drawn sky, square, with the wordmark's first letter: the game's own icon icon = scene(1024, 1024, seed=11).convert("RGBA") mark = wordmark() # the D ends at the first empty column @@ -117,7 +116,6 @@ def main() -> int: end = next(x for x in range(40, mark.width) if columns[x] == 0) initial = with_shadow(mark.crop((0, 0, end, mark.height)), 10, 0.8) place(icon, initial, 430, (0.50, 0.45)) - icon.resize((512, 512), Image.LANCZOS).convert("RGB").save(out / "icon0.png") # res/: the pictures the game's own menus load. Dusklight's show the game (a # character as mascot, the Triforce in the emblem, a screenshot behind the diff --git a/ps5/art/pic-source.jpg b/ps5/art/pic-source.jpg new file mode 100644 index 0000000..df6c130 Binary files /dev/null and b/ps5/art/pic-source.jpg differ diff --git a/ps5/sce_sys/icon0.png b/ps5/sce_sys/icon0.png index 11c796d..c152961 100644 Binary files a/ps5/sce_sys/icon0.png and b/ps5/sce_sys/icon0.png differ diff --git a/ps5/sce_sys/param.json b/ps5/sce_sys/param.json index 9fb3033..e3a39f5 100644 --- a/ps5/sce_sys/param.json +++ b/ps5/sce_sys/param.json @@ -10,7 +10,7 @@ "conceptId": "99305", "contentBadgeType": 1, "contentId": "UP9000-PPSA99305_00-DUSKLIGHT0000000", - "contentVersion": "01.003.000", + "contentVersion": "02.000.000", "downloadDataSize": 256, "gameIntent": { "permittedIntents": [ diff --git a/ps5/sce_sys/pic0.dds b/ps5/sce_sys/pic0.dds index dfa5342..2272912 100644 Binary files a/ps5/sce_sys/pic0.dds and b/ps5/sce_sys/pic0.dds differ diff --git a/ps5/sce_sys/pic1.dds b/ps5/sce_sys/pic1.dds index 2f5a91d..2272912 100644 Binary files a/ps5/sce_sys/pic1.dds and b/ps5/sce_sys/pic1.dds differ diff --git a/ps5/tools/package-release.sh b/ps5/tools/package-release.sh index 5691edc..6249dac 100755 --- a/ps5/tools/package-release.sh +++ b/ps5/tools/package-release.sh @@ -79,8 +79,8 @@ Compiler: $(${PS5_CLANG:-clang} --version | head -1) No game data is included. The Legend of Zelda: Twilight Princess belongs to Nintendo; this title does nothing without a GameCube disc image (.iso or .ciso) -that you provide, placed beside eboot.bin. The pictures in sce_sys/ are drawn by -the port's ps5/art/make-title-art.py and contain nothing of Nintendo's. +that you provide, placed beside eboot.bin. The pictures in sce_sys/ are the +port's own, made for it with an image generator; nothing in them is from the game. eboot.bin sha256: $(sha256sum "$app/eboot.bin" | cut -d' ' -f1) SOURCE