#!/usr/bin/env bash # Pack the Metin2 asset tree into build/export/assets.zip for the mobile builds. # # The APK/IPA is code-only (assets are gitignored and can't go in res://). The # zip is mounted at runtime by AssetPack.ensure() -> res://assets/... and read # through godot::FileAccess (all C++ asset IO now goes through it). # # ./pack-assets.sh # bake index + zip -0 (store, no compression) # # Deploy: # Android: adb push build/export/assets.zip /sdcard/Android/data/org.internal.mtgodotpoc/files/ # iOS: ios-deploy --bundle_id org.internal.mtgodotpoc --upload build/export/assets.zip --to Documents/ # desktop: not needed (loose assets/ is used directly) set -euo pipefail cd "$(dirname "$0")" GODOT="${GODOT:-godot}" OUT="build/export/assets.zip" if [ ! -d assets ]; then echo "no ./assets — nothing to pack" >&2 exit 1 fi # 1. refresh the AssetResolver index (baked; device can't std::filesystem-scan a pack) "$GODOT" --headless --path project --script bake_asset_index.gd || { echo "asset_index bake failed" >&2; exit 1; } # 2. zip -0 (store): DDS/gr2 barely compress and we want fast random access from # FileAccess; -X drops extra file attrs. Paths stay assets/... bgm/... so they # mount as res://assets/... res://bgm/... mkdir -p build/export rm -f "$OUT" zip -0 -r -X "$OUT" assets bgm \ -x '*/.git/*' -x '*.DS_Store' -x 'assets/.gdignore' SZ=$(du -h "$OUT" | cut -f1) N=$(unzip -l "$OUT" | tail -1 | awk '{print $2}') echo echo ">> $OUT ($SZ, $N entries)" echo ">> Android: adb push $OUT /sdcard/Android/data/org.internal.mtgodotpoc/files/"