summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/copy_demos.sh20
-rwxr-xr-xbin/copy_videos.sh20
-rwxr-xr-xbin/make_archives.sh58
-rwxr-xr-xbin/make_html_archives.sh31
-rwxr-xr-xbin/make_html_index.sh34
-rwxr-xr-xbin/make_html_table.sh89
-rwxr-xr-xbin/make_thumbnails.sh24
7 files changed, 276 insertions, 0 deletions
diff --git a/bin/copy_demos.sh b/bin/copy_demos.sh
new file mode 100755
index 0000000..dc827e4
--- /dev/null
+++ b/bin/copy_demos.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+SOURCE_DIR="demos"
+DEST_DIR="public/demos"
+
+mkdir -p "$DEST_DIR"
+
+for demo in "$SOURCE_DIR"/*; do
+ [ -f "$demo" ] || continue
+
+ filename=$(basename -- "$demo")
+ dest="$DEST_DIR/$filename"
+
+ [ -f "$dest" ] && continue
+
+ echo " copying demo: $filename"
+
+ cp "$demo" "$dest"
+done
+
diff --git a/bin/copy_videos.sh b/bin/copy_videos.sh
new file mode 100755
index 0000000..d8d1fe6
--- /dev/null
+++ b/bin/copy_videos.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+SOURCE_DIR="videos"
+DEST_DIR="public/videos"
+
+mkdir -p "$DEST_DIR"
+
+for video in "$SOURCE_DIR"/*; do
+ [ -f "$video" ] || continue
+
+ filename=$(basename -- "$video")
+ dest="$DEST_DIR/$filename"
+
+ [ -f "$dest" ] && continue
+
+ echo " copying video: $filename"
+
+ cp "$video" "$dest"
+done
+
diff --git a/bin/make_archives.sh b/bin/make_archives.sh
new file mode 100755
index 0000000..02bec66
--- /dev/null
+++ b/bin/make_archives.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+CSV_FILE="tricks.csv"
+VIDEO_DIR="videos"
+DEMO_DIR="demos"
+ARCHIVE_DIR="public/archives"
+
+mkdir -p "$ARCHIVE_DIR"
+
+declare -A montage_videos
+declare -A montage_demos
+
+while IFS=',' read -r name players train_videos ingame_videos demos montage; do
+ key="$(echo "$montage" | xargs)"
+ videos_raw=$(echo "$ingame_videos" | xargs)
+ demos_raw=$(echo "$demos" | xargs)
+ key="$(echo "$key" | sed 's/ /_/g')"
+
+ videos=""
+ IFS=';' read -ra video_items <<< "$videos_raw"
+ for item in "${video_items[@]}"; do
+ videos+="${VIDEO_DIR}/${item}.mp4 "
+ done
+
+ demos=""
+ IFS=';' read -ra demo_items <<< "$demos_raw"
+ for item in "${demo_items[@]}"; do
+ demos+="${DEMO_DIR}/${item} "
+ done
+
+ if [[ -z "$key" ]]; then
+ key="Unused"
+ fi
+
+ if [[ -n "${montage_videos[$key]}" ]]; then
+ montage_videos[$key]="${montage_videos[$key]} $videos"
+ else
+ montage_videos[$key]="$videos"
+ fi
+
+ if [[ -n "${montage_demos[$key]}" ]]; then
+ montage_demos[$key]="${montage_demos[$key]} $demos"
+ else
+ montage_demos[$key]="$demos"
+ fi
+done < <(tail -n +2 "$CSV_FILE")
+
+for montage in "${!montage_videos[@]}"; do
+ [[ -n "${montage_videos[$montage]}" ]] \
+ && zip -r "${ARCHIVE_DIR}/${montage}_videos.zip" ${montage_videos[$montage]}
+ continue
+done
+
+for montage in "${!montage_demos[@]}"; do
+ [[ -n "${montage_demos[$montage]}" ]] \
+ && zip -r "${ARCHIVE_DIR}/${montage}_demos.zip" ${montage_demos[$montage]}
+done
+
diff --git a/bin/make_html_archives.sh b/bin/make_html_archives.sh
new file mode 100755
index 0000000..239f878
--- /dev/null
+++ b/bin/make_html_archives.sh
@@ -0,0 +1,31 @@
+#/bin/sh
+
+ARCHIVE_DIR="public/archives"
+
+for file in $ARCHIVE_DIR/*_demos.zip $ARCHIVE_DIR/*_videos.zip; do
+ [ -f "$file" ] || continue
+ base="${file%_demos.zip}"
+ base="${base%_videos.zip}"
+ base="${base#$ARCHIVE_DIR/}"
+ bases="$bases
+$base"
+done
+
+[ -n "$bases" ] && printf "\n<h2>Archives</h2>\n\n"
+
+for base in $(echo "$bases" | sort -u); do
+ title=$(echo "$base" | tr '_' ' ')
+
+ line="<p>$title tricks archive:"
+
+ video_archive="$ARCHIVE_DIR/${base}_videos.zip"
+ demo_archive="$ARCHIVE_DIR/${base}_demos.zip"
+
+ [ -f "$video_archive" ] && line="$line <a href=\"archives/${base}_videos.zip\">videos</a>"
+ [ -f "$demo_archive" ] && [ -f "$video_archive" ] && line="$line, "
+ [ -f "$demo_archive" ] && line="$line <a href=\"archives/${base}_demos.zip\">demos</a>"
+
+ echo "$line"
+
+done
+
diff --git a/bin/make_html_index.sh b/bin/make_html_index.sh
new file mode 100755
index 0000000..cba5479
--- /dev/null
+++ b/bin/make_html_index.sh
@@ -0,0 +1,34 @@
+#/bin/sh
+
+DIR="$(dirname "$0")"
+OUTDIR="$DIR/../public"
+
+exec >"$OUTDIR/index.html"
+
+cat <<'EOF'
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>Liber Dolorum</title>
+ <link rel='stylesheet' type='text/css' href="style.css">
+ <link rel="icon" type="image/png" href="favicon.png">
+</head>
+
+<body>
+<h1>Liber Dolorum</h1>
+<p><em>"Another trick in the book"</em></p>
+
+EOF
+
+"$DIR/make_html_table.sh"
+"$DIR/make_html_archives.sh"
+
+cat <<'EOF'
+
+<p>alpha 0.1</p>
+
+</body>
+
+</html>
+EOF
diff --git a/bin/make_html_table.sh b/bin/make_html_table.sh
new file mode 100755
index 0000000..c820f27
--- /dev/null
+++ b/bin/make_html_table.sh
@@ -0,0 +1,89 @@
+#!/bin/bash
+
+CSV_FILE="${1:-tricks.csv}"
+
+make_video_cell() {
+ local field="$1"
+ if [[ -n "$field" ]]; then
+ echo " <td>"
+ IFS=';' read -ra files <<< "$field"
+ for f in "${files[@]}"; do
+ f_trimmed=$(echo "$f" | xargs)
+ echo " <video width=\"256\" controls preload=\"none\" poster=\"thumbnails/$f_trimmed.jpg\">"
+ echo " <source src=\"videos/$f_trimmed.mp4\" type=\"video/mp4\">"
+ echo " Your browser does not support the video tag."
+ echo " </video>"
+ done
+ echo " </td>"
+ else
+ echo " <td></td>"
+ fi
+}
+
+make_demo_cell() {
+ local field="$1"
+ if [[ -n "$field" ]]; then
+ echo " <td>"
+ IFS=';' read -ra files <<< "$field"
+ for f in "${files[@]}"; do
+ f_trimmed=$(echo "$f" | xargs)
+ echo " <a href=\"demos/$f_trimmed\" download>demo</a><br>"
+ done
+ echo " </td>"
+ else
+ echo " <td></td>"
+ fi
+}
+
+make_montage_cell() {
+ local montage="$1"
+
+ if [ -z "$montage" ]; then
+ echo " <td></td>"
+ return
+ fi
+
+ case "$montage" in
+ 'Cowboy Teebop') montage_url='https://www.youtube.com/watch?v=eJgiPbio9BY' ;;
+ 'Tee Jams') montage_url='https://www.youtube.com/watch?v=ReoM0rVXduQ' ;;
+ 'On Noby Street') montage_url='https://www.youtube.com/watch?v=lxVu5XX9Rmk' ;;
+ 'Any Trickers') montage_url='https://www.youtube.com/watch?v=u2CbuvmiXCc' ;;
+ *) echo "ERROR: invalid montage name '$montage'" >&2; exit 1 ;;
+ esac
+ echo " <td><a href=\"$montage_url\" target=\"_blank\" rel=\"noopener\">$montage</a></td>"
+}
+
+cat <<'EOF'
+<table>
+ <tr>
+EOF
+
+IFS=',' read -r -a headers < "$CSV_FILE"
+
+for header in "${headers[@]}"; do
+ echo " <th><strong>$header</strong></th>"
+done
+
+echo " </tr>"
+
+while IFS=',' read -r name players train_videos ingame_videos demos montage; do
+ [[ -z "$name" ]] && continue
+
+ echo " <tr>"
+ echo " <td><strong>$name</strong></td>"
+
+ players_html=$(echo "$players" | sed 's/;/,<br>/g')
+ echo " <td>$players_html</td>"
+
+ make_video_cell "$train_videos"
+ make_video_cell "$ingame_videos"
+ make_demo_cell "$demos"
+ make_montage_cell "$montage"
+
+ echo " </tr>"
+done < <(tail -n +2 "$CSV_FILE")
+
+cat <<'EOF'
+</table>
+EOF
+
diff --git a/bin/make_thumbnails.sh b/bin/make_thumbnails.sh
new file mode 100755
index 0000000..9371d7a
--- /dev/null
+++ b/bin/make_thumbnails.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+WIDTH="${1:-320}"
+
+VIDEO_DIR="videos"
+THUMB_DIR="public/thumbnails"
+
+mkdir -p "$THUMB_DIR"
+
+for video in "$VIDEO_DIR"/*; do
+ [ -f "$video" ] || continue
+
+ filename=$(basename -- "$video")
+ name="${filename%.*}"
+ thumbnail="$THUMB_DIR/$name.jpg"
+
+ [ -f "$thumbnail" ] && continue
+
+ echo " creating image: $thumbnail"
+
+ ffmpeg -i "$video" -ss 00:00:01 -vframes 1 -vf "scale=${WIDTH}:-1" -q:v 7 "$thumbnail" -y >/dev/null 2>&1
+
+done
+