From c5a17a0a6999d44b99382758f2c2715c302874d9 Mon Sep 17 00:00:00 2001 From: Ajax Davis Date: Wed, 21 Jan 2026 07:37:04 +1000 Subject: [PATCH] Add architecture docs and humanize use case copy --- alien.sh | 67 --- apps/web/src/components/NodeDetailDrawer.tsx | 115 +++++ apps/web/src/components/UseCaseCaseStudy.tsx | 6 + apps/web/src/lib/use-cases/generate.ts | 16 +- beast.sh | 144 ------ docs/ARCHITECTURE-DIAGRAM.md | 392 +++++++++++++++ docs/architecture-v1.d2 | 497 +++++++++++++++++++ docs/architecture-v1.svg | 109 ++++ docs/diagrams/01-overview.d2 | 139 ++++++ docs/diagrams/01-overview.svg | 118 +++++ docs/diagrams/02-discovery.d2 | 137 +++++ docs/diagrams/02-discovery.svg | 102 ++++ docs/diagrams/03-execution.d2 | 98 ++++ docs/diagrams/03-execution.svg | 102 ++++ docs/diagrams/README.md | 142 ++++++ hotel.sh | 100 ---- knight.sh | 182 ------- reptile1_halfblock.sh | 156 ------ reptile2_quadrant.sh | 180 ------- reptile3_braille.sh | 280 ----------- robot.sh | 69 --- robot2.sh | 104 ---- robot3.sh | 121 ----- sprite.sh | 61 --- 24 files changed, 1969 insertions(+), 1468 deletions(-) delete mode 100755 alien.sh create mode 100644 apps/web/src/components/NodeDetailDrawer.tsx delete mode 100755 beast.sh create mode 100644 docs/ARCHITECTURE-DIAGRAM.md create mode 100644 docs/architecture-v1.d2 create mode 100644 docs/architecture-v1.svg create mode 100644 docs/diagrams/01-overview.d2 create mode 100644 docs/diagrams/01-overview.svg create mode 100644 docs/diagrams/02-discovery.d2 create mode 100644 docs/diagrams/02-discovery.svg create mode 100644 docs/diagrams/03-execution.d2 create mode 100644 docs/diagrams/03-execution.svg create mode 100644 docs/diagrams/README.md delete mode 100755 hotel.sh delete mode 100755 knight.sh delete mode 100755 reptile1_halfblock.sh delete mode 100755 reptile2_quadrant.sh delete mode 100755 reptile3_braille.sh delete mode 100755 robot.sh delete mode 100755 robot2.sh delete mode 100755 robot3.sh delete mode 100755 sprite.sh diff --git a/alien.sh b/alien.sh deleted file mode 100755 index de88096..0000000 --- a/alien.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -printf "\n\033[1m WALKING DOWN\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m\n" -printf " \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m\n" -printf " \033[38;2;255;200;50m▄███▄\033[0m \033[38;2;255;200;50m▄███▄\033[0m \033[38;2;255;200;50m▄███▄\033[0m \033[38;2;255;200;50m▄███▄\033[0m\n" -printf " \033[38;2;255;200;50m███████\033[0m \033[38;2;255;200;50m███████\033[0m \033[38;2;255;200;50m███████\033[0m \033[38;2;255;200;50m███████\033[0m\n" -printf " \033[38;2;255;200;50m█\033[38;2;0;0;0m██\033[38;2;255;200;50m█\033[38;2;0;0;0m██\033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[38;2;0;0;0m██\033[38;2;255;200;50m█\033[38;2;0;0;0m██\033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[38;2;0;0;0m██\033[38;2;255;200;50m█\033[38;2;0;0;0m██\033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[38;2;0;0;0m██\033[38;2;255;200;50m█\033[38;2;0;0;0m██\033[38;2;255;200;50m█\033[0m\n" -printf " \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m\n" -printf " \033[38;2;255;200;50m███\033[0m \033[38;2;255;200;50m███\033[0m \033[38;2;255;200;50m███\033[0m \033[38;2;255;200;50m███\033[0m\n" -printf " \033[38;2;139;90;43m▄█████▄\033[0m \033[38;2;139;90;43m▄█████▄\033[0m \033[38;2;139;90;43m▄█████▄\033[0m \033[38;2;139;90;43m▄█████▄\033[0m\n" -printf " \033[38;2;139;90;43m███\033[38;2;255;215;0m█\033[38;2;139;90;43m███\033[0m \033[38;2;139;90;43m███\033[38;2;255;215;0m█\033[38;2;139;90;43m███\033[0m \033[38;2;139;90;43m███\033[38;2;255;215;0m█\033[38;2;139;90;43m███\033[0m \033[38;2;139;90;43m███\033[38;2;255;215;0m█\033[38;2;139;90;43m███\033[0m\n" -printf " \033[38;2;139;90;43m███████\033[0m \033[38;2;139;90;43m███████\033[0m \033[38;2;139;90;43m███████\033[0m \033[38;2;139;90;43m███████\033[0m\n" -printf " \033[38;2;139;90;43m█████\033[0m \033[38;2;139;90;43m█████\033[0m \033[38;2;139;90;43m█████\033[0m \033[38;2;139;90;43m█████\033[0m\n" -printf " \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m\n" -printf " \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m██\033[0m\n" - -printf "\n\033[1m WALKING UP\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m\n" -printf " \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m\n" -printf " \033[38;2;255;200;50m▄███▄\033[0m \033[38;2;255;200;50m▄███▄\033[0m \033[38;2;255;200;50m▄███▄\033[0m \033[38;2;255;200;50m▄███▄\033[0m\n" -printf " \033[38;2;255;200;50m███████\033[0m \033[38;2;255;200;50m███████\033[0m \033[38;2;255;200;50m███████\033[0m \033[38;2;255;200;50m███████\033[0m\n" -printf " \033[38;2;255;200;50m███████\033[0m \033[38;2;255;200;50m███████\033[0m \033[38;2;255;200;50m███████\033[0m \033[38;2;255;200;50m███████\033[0m\n" -printf " \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m\n" -printf " \033[38;2;255;200;50m███\033[0m \033[38;2;255;200;50m███\033[0m \033[38;2;255;200;50m███\033[0m \033[38;2;255;200;50m███\033[0m\n" -printf " \033[38;2;139;90;43m▄█████▄\033[0m \033[38;2;139;90;43m▄█████▄\033[0m \033[38;2;139;90;43m▄█████▄\033[0m \033[38;2;139;90;43m▄█████▄\033[0m\n" -printf " \033[38;2;139;90;43m███████\033[0m \033[38;2;139;90;43m███████\033[0m \033[38;2;139;90;43m███████\033[0m \033[38;2;139;90;43m███████\033[0m\n" -printf " \033[38;2;139;90;43m███████\033[0m \033[38;2;139;90;43m███████\033[0m \033[38;2;139;90;43m███████\033[0m \033[38;2;139;90;43m███████\033[0m\n" -printf " \033[38;2;139;90;43m█████\033[0m \033[38;2;139;90;43m█████\033[0m \033[38;2;139;90;43m█████\033[0m \033[38;2;139;90;43m█████\033[0m\n" -printf " \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m\n" -printf " \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m██\033[0m\n" - -printf "\n\033[1m WALKING LEFT\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m\n" -printf " \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m\n" -printf " \033[38;2;255;200;50m▄███\033[0m \033[38;2;255;200;50m▄███\033[0m \033[38;2;255;200;50m▄███\033[0m \033[38;2;255;200;50m▄███\033[0m\n" -printf " \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m\n" -printf " \033[38;2;0;0;0m██\033[38;2;255;200;50m███\033[0m \033[38;2;0;0;0m██\033[38;2;255;200;50m███\033[0m \033[38;2;0;0;0m██\033[38;2;255;200;50m███\033[0m \033[38;2;0;0;0m██\033[38;2;255;200;50m███\033[0m\n" -printf " \033[38;2;255;200;50m████\033[0m \033[38;2;255;200;50m████\033[0m \033[38;2;255;200;50m████\033[0m \033[38;2;255;200;50m████\033[0m\n" -printf " \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m██\033[0m\n" -printf " \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m\n" -printf " \033[38;2;139;90;43m██\033[38;2;255;215;0m█\033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[38;2;255;215;0m█\033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[38;2;255;215;0m█\033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[38;2;255;215;0m█\033[38;2;139;90;43m██\033[0m\n" -printf " \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m\n" -printf " \033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[0m\n" -printf " \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m\n" -printf " \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m██\033[0m\n" - -printf "\n\033[1m WALKING RIGHT\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m\n" -printf " \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m \033[38;2;139;90;43m█\033[0m\n" -printf " \033[38;2;255;200;50m███▄\033[0m \033[38;2;255;200;50m███▄\033[0m \033[38;2;255;200;50m███▄\033[0m \033[38;2;255;200;50m███▄\033[0m\n" -printf " \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m \033[38;2;255;200;50m█████\033[0m\n" -printf " \033[38;2;255;200;50m███\033[38;2;0;0;0m██\033[0m \033[38;2;255;200;50m███\033[38;2;0;0;0m██\033[0m \033[38;2;255;200;50m███\033[38;2;0;0;0m██\033[0m \033[38;2;255;200;50m███\033[38;2;0;0;0m██\033[0m\n" -printf " \033[38;2;255;200;50m████\033[0m \033[38;2;255;200;50m████\033[0m \033[38;2;255;200;50m████\033[0m \033[38;2;255;200;50m████\033[0m\n" -printf " \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m██\033[0m\n" -printf " \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m\n" -printf " \033[38;2;139;90;43m██\033[38;2;255;215;0m█\033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[38;2;255;215;0m█\033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[38;2;255;215;0m█\033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[38;2;255;215;0m█\033[38;2;139;90;43m██\033[0m\n" -printf " \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m \033[38;2;139;90;43m████\033[0m\n" -printf " \033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[0m \033[38;2;139;90;43m██\033[0m\n" -printf " \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m██\033[0m \033[38;2;255;200;50m█\033[0m \033[38;2;255;200;50m█\033[0m\n" -printf " \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m█\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m██\033[0m \033[38;2;101;67;33m█\033[0m\n" - -printf "\n" diff --git a/apps/web/src/components/NodeDetailDrawer.tsx b/apps/web/src/components/NodeDetailDrawer.tsx new file mode 100644 index 0000000..66d3eca --- /dev/null +++ b/apps/web/src/components/NodeDetailDrawer.tsx @@ -0,0 +1,115 @@ +'use client'; + +import { Button } from '@tpmjs/ui/Button/Button'; +import { Drawer } from '@tpmjs/ui/Drawer/Drawer'; +import { Icon } from '@tpmjs/ui/Icon/Icon'; +import Link from 'next/link'; +import { ExecutorsDiagram } from './architecture/ExecutorsDiagram'; +import { NpmRegistryDiagram } from './architecture/NpmRegistryDiagram'; +import { OutputsDiagram } from './architecture/OutputsDiagram'; +import { ToolsDiagram } from './architecture/ToolsDiagram'; +import { TpmjsDiagram } from './architecture/TpmjsDiagram'; +import { UsersDiagram } from './architecture/UsersDiagram'; + +// Map node IDs to their diagram components +const diagramComponents: Record = { + tools: ToolsDiagram, + npm: NpmRegistryDiagram, + tpmjs: TpmjsDiagram, + users: UsersDiagram, + executors: ExecutorsDiagram, + outputs: OutputsDiagram, +}; + +interface NodeDetailDrawerProps { + open: boolean; + onClose: () => void; + nodeId: string; + title: string; + description: string; + bullets: string[]; + links?: { label: string; href: string }[]; +} + +export function NodeDetailDrawer({ + open, + onClose, + nodeId, + title, + description, + bullets, + links, +}: NodeDetailDrawerProps): React.ReactElement { + const DiagramComponent = diagramComponents[nodeId]; + + return ( + + + + } + > +
+ {/* Interactive Diagram */} + {DiagramComponent && ( +
+

+ How It Works +

+
+ +
+

+ Hover over elements for more details +

+
+ )} + + {/* Description */} +

{description}

+ + {/* Bullet points */} +
+

+ Key Features +

+
    + {bullets.map((bullet, i) => ( +
  • + + {bullet} +
  • + ))} +
+
+ + {/* Links */} + {links && links.length > 0 && ( +
+

+ Learn More +

+
+ {links.map((link) => ( + + + + ))} +
+
+ )} +
+
+ ); +} diff --git a/apps/web/src/components/UseCaseCaseStudy.tsx b/apps/web/src/components/UseCaseCaseStudy.tsx index c710901..43f5076 100644 --- a/apps/web/src/components/UseCaseCaseStudy.tsx +++ b/apps/web/src/components/UseCaseCaseStudy.tsx @@ -236,6 +236,12 @@ export default function UseCaseCaseStudy({ useCase }: UseCaseCaseStudyProps) { > {useCase.scenario.collection.name} + + View scenario details + )} diff --git a/apps/web/src/lib/use-cases/generate.ts b/apps/web/src/lib/use-cases/generate.ts index 68f46c5..9c6a633 100644 --- a/apps/web/src/lib/use-cases/generate.ts +++ b/apps/web/src/lib/use-cases/generate.ts @@ -145,7 +145,7 @@ async function generateMarketingContent( model: openai('gpt-4o-mini'), schema: UseCaseGenerationSchema, system: `You are a marketing expert specializing in B2B SaaS and AI tools. -Your task is to transform technical test scenarios into compelling marketing use cases. +Your task is to transform technical test scenarios into compelling marketing use cases that read like natural, human-written copy. Guidelines: 1. Write clear, benefit-focused titles that resonate with business users @@ -158,6 +158,14 @@ Guidelines: - business-process: business area (customer-support, sales, hr) - technical: technical domain (api-integration, data-processing) +Writing rules (avoid AI tell-tales): +- Avoid inflated significance, trend talk, or vague "experts say" attributions. +- Avoid promo hype, generic positivity, and grand claims. +- Prefer simple copula sentences ("is/are/has") over "serves as/stands as/boasts." +- Avoid filler and hedging, rule-of-three padding, and negative parallelism. +- Avoid em dashes, bolded lists, emojis, and title-case headings. +- Use concrete details and natural rhythm with varied sentence length. + For personas, use common roles like: - CTO, VP Engineering, Engineering Manager - Product Manager, Product Owner @@ -515,8 +523,8 @@ export async function generateUseCasesForQualifyingScenarios(): Promise Collection -> Default" + step6: "6. EXECUTOR (Railway)\nPOST /execute-tool" + step7: "7. SSE Stream Response\n(chunk, tokens, complete)" + + step1 -> step2 -> step3 -> step4 -> step5 -> step6 -> step7 + } + + mcp_flow: "Path B: MCP Flow\n(External AI Client)" { + class: executor + + mcp1: "1. External AI Client" + mcp2: "2. JSON-RPC 2.0" + mcp3: "3. /api/mcp/[user]/[slug]/[transport]" + mcp4: "4. MCP Handler\ntools/list, tools/call" + mcp5: "5. Tool Name Resolution\nRegistry + Bridge tools" + mcp6: "6. Same Executor" + mcp7: "7. JSON-RPC Response" + + mcp1 -> mcp2 -> mcp3 -> mcp4 -> mcp5 -> mcp6 -> mcp7 + } +} + +# ============================================================================== +# 5. SCHEMA EXTRACTION PIPELINE +# ============================================================================== + +schema_pipeline: Schema Extraction Pipeline { + class: ai + + npm_source: "NPM Registry\npackages with 'tpmjs' keyword" { + class: external + } + + sync_workers: "Sync Workers (Vercel Cron)" { + changes_feed: "/api/sync/changes (every 2 min)\nnpm _changes feed" + keyword_search: "/api/sync/keyword (every 15 min)\nkeyword search" + metrics_sync: "/api/sync/metrics (every hour)\ndownloads, stars" + } + + extraction: "Schema Extraction" { + step1: "1. Fetch package from npm" + step2: "2. Import via esm.sh (dynamic)" + step3: "3. listToolExports() - discover exports" + step4: "4. extractToolSchema() - analyze signatures" + step5: "5. AI extraction (if needed)" + step6: "6. validateTpmjsField()" + step7: "7. Store in database (inputSchema)" + } + + zod_conversion: "Zod / AI SDK Conversion" { + params: "TPMJS Parameters" + convert: "convertToZodSchema()" + zod: "Zod Schema\nz.object({ ... })" + ai_sdk: "AI SDK inputSchema" + llm_def: "LLM Tool Definition\n(OpenAI/Anthropic format)" + + params -> convert -> zod -> ai_sdk -> llm_def + } + + npm_source -> sync_workers -> extraction -> zod_conversion +} + +# ============================================================================== +# 6. EXECUTOR ARCHITECTURE +# ============================================================================== + +executors: Executor Architecture { + class: executor + + contract: "Executor Contract" { + execute: "POST /execute-tool\n{ packageName, name, version, params, env }" + response: "Response: { success, output, error, executionTimeMs }" + health: "GET /health" + } + + implementations: "Implementations" { + railway: "Railway (Default)\n- Sandboxed Node.js\n- Dynamic imports from esm.sh\n- Runs untrusted npm code safely" + + vercel_template: "Vercel Template\n- Serverless functions\n- One-click deploy" + + future: "Future Options\n- AWS Lambda\n- Docker\n- Custom HTTP service" + } + + contract -> implementations +} + +# ============================================================================== +# 7. DATABASE (Logical Groups) +# ============================================================================== + +database: "Database (Neon PostgreSQL)" { + class: db + + packages_group: PACKAGES { + Package: "Package" + Tool: "Tool" + HealthCheck: "HealthCheck" + } + + users_group: USERS { + User: "User" + Session: "Session" + Account: "Account" + Verification: "Verification" + UserApiKey: "UserApiKey" + TpmjsApiKey: "TpmjsApiKey" + } + + execution_group: EXECUTION { + Simulation: "Simulation" + TokenUsage: "TokenUsage" + ExecutionLog: "ExecutionLog" + ApiUsageRecord: "ApiUsageRecord" + ApiUsageSummary: "ApiUsageSummary" + } + + collections_group: COLLECTIONS { + Collection: "Collection" + CollectionTool: "CollectionTool" + CollectionLike: "CollectionLike" + CollectionBridgeTool: "CollectionBridgeTool" + } + + agents_group: AGENTS { + Agent: "Agent" + AgentCollection: "AgentCollection" + AgentTool: "AgentTool" + AgentLike: "AgentLike" + Conversation: "Conversation" + Message: "Message" + } + + sync_group: SYNC { + SyncCheckpoint: "SyncCheckpoint" + SyncLog: "SyncLog" + StatsSnapshot: "StatsSnapshot" + EndpointHealthReport: "EndpointHealthReport" + } + + scenarios_group: SCENARIOS { + Scenario: "Scenario" + ScenarioRun: "ScenarioRun" + ScenarioEmbedding: "ScenarioEmbedding" + ScenarioQuota: "ScenarioQuota" + } + + use_cases_group: USE_CASES { + UseCase: "UseCase" + Persona: "Persona" + Industry: "Industry" + Category: "Category" + SocialProof: "SocialProof" + } + + engagement_group: ENGAGEMENT { + ToolLike: "ToolLike" + ToolRating: "ToolRating" + ToolReview: "ToolReview" + UserActivity: "UserActivity" + } + + bridge_group: BRIDGE { + class: wip + BridgeConnection: "BridgeConnection" + } + + # Relationships between groups + packages_group.Tool -> collections_group.CollectionTool + packages_group.Tool -> agents_group.AgentTool + packages_group.Tool -> engagement_group.ToolLike + packages_group.Tool -> scenarios_group.Scenario: "via Collection" + + users_group.User -> collections_group.Collection + users_group.User -> agents_group.Agent + users_group.User -> bridge_group.BridgeConnection + + collections_group.Collection -> agents_group.AgentCollection + collections_group.Collection -> scenarios_group.Scenario + + scenarios_group.Scenario -> use_cases_group.UseCase +} + +# ============================================================================== +# 8. BACKGROUND WORKERS +# ============================================================================== + +workers: "Background Workers (Vercel Cron)" { + class: external + + sync_jobs: "Sync Jobs" { + changes: "Every 2 min: /api/sync/changes\n(npm changes feed)" + keyword: "Every 15 min: /api/sync/keyword\n(keyword search)" + metrics: "Every hour: /api/sync/metrics\n(downloads, stars)" + } + + daily_jobs: "Daily Jobs" { + stats: "Daily: /api/sync/stats-snapshot" + cleanup: "Daily 3am: /api/sync/cleanup-activity" + discord: "Daily 9am: /api/cron/discord-summary" + use_cases: "Daily: /api/cron/use-cases\n(AI generation)" + } +} + +# ============================================================================== +# 9. EXTERNAL SERVICES +# ============================================================================== + +external: External Services { + class: external + + package_sources: "Package Sources" { + npm: "npm Registry\nMetadata, changes feed" + github: "GitHub API\nStars, repo metadata" + bundlephobia: "Bundlephobia\nPackage size analysis" + } + + runtime: "Runtime" { + esm_sh: "esm.sh\nDynamic ESM imports" + vercel: "Vercel\nHosting, Edge, Cron" + railway: "Railway\nDefault executor hosting" + } + + data: "Data" { + neon: "Neon\nPostgreSQL database" + } + + ai_providers: "AI Providers" { + openai: "OpenAI\nGPT-4, embeddings" + anthropic: "Anthropic\nClaude" + google: "Google\nGemini" + groq: "Groq" + mistral: "Mistral" + } + + notifications: "Notifications" { + discord: "Discord\nDaily summaries" + } +} + +# ============================================================================== +# 10. BRIDGE SYSTEM (WIP) +# ============================================================================== + +bridge_system: "Bridge System (WIP)" { + class: wip + + local_mcp: "Local MCP Server\n(Blender, etc.)" + bridge_cli: "Bridge CLI\n(@tpmjs/bridge)" + api_bridge: "POST /api/bridge\n{ type: 'register', tools: [...] }" + db_record: "BridgeConnection record" + polling: "Tool calls via polling:\nGET /api/bridge -> pending calls\nPOST /api/bridge -> tool results" + + local_mcp -> bridge_cli -> api_bridge -> db_record -> polling +} + +# ============================================================================== +# 11. AI INTEGRATION POINTS +# ============================================================================== + +ai_integration: AI Integration Points { + class: ai + + user_keys: "User-Provided Keys" { + agent_chat: "Agent chats\n(users bring their own API keys)" + custom_collections: "Custom collections\nwith API key storage" + } + + internal_keys: "Internal Keys (TPMJS)" { + schema_extraction: "Schema extraction\n(analyze tool signatures)" + use_case_gen: "Use case generation\n(marketing content)" + scenario_eval: "Scenario evaluation\n(pass/fail determination)" + discord_summaries: "Discord summaries" + } + + providers: "Supported Providers" { + list: "OpenAI (GPT-4, GPT-4 Turbo)\nAnthropic (Claude)\nGoogle (Gemini)\nGroq\nMistral" + } +} + +# ============================================================================== +# CONNECTIONS +# ============================================================================== + +# Clients -> Gateway +clients.web -> gateway.auth +clients.cli -> gateway.auth +clients.ai_clients -> gateway.auth +clients.bridge_cli -> gateway.auth: { + style.stroke-dash: 5 +} + +# Gateway -> API +gateway -> api + +# API -> Execution +api.discovery -> execution_flows.playground_flow.step2 +api.execution -> execution_flows.playground_flow.step2 +api.mcp -> execution_flows.mcp_flow.mcp3 + +# Execution -> Executors +execution_flows.playground_flow.step6 -> executors.contract +execution_flows.mcp_flow.mcp6 -> executors.contract + +# Executors -> External +executors.implementations.railway -> external.runtime.railway + +# Schema Pipeline -> Database +schema_pipeline.extraction.step7 -> database.packages_group.Tool + +# Schema Pipeline -> External +schema_pipeline.npm_source -> external.package_sources.npm +schema_pipeline.extraction.step2 -> external.runtime.esm_sh +schema_pipeline.extraction.step5 -> external.ai_providers + +# Workers -> API (cron triggers) +workers.sync_jobs -> api.sync +workers.daily_jobs -> api.testing + +# API -> Database +api.discovery -> database.packages_group +api.agents -> database.agents_group +api.agents -> database.collections_group +api.testing -> database.scenarios_group +api.testing -> database.use_cases_group +api.health -> database.sync_group + +# External Services -> Database +external.data.neon -> database + +# AI Integration -> External Providers +ai_integration.user_keys -> external.ai_providers +ai_integration.internal_keys -> external.ai_providers + +# Bridge System (WIP - dashed lines) +clients.bridge_cli -> bridge_system.bridge_cli: { + style.stroke-dash: 5 +} +bridge_system -> api.bridge: { + style.stroke-dash: 5 +} +bridge_system.db_record -> database.bridge_group: { + style.stroke-dash: 5 +} diff --git a/docs/architecture-v1.svg b/docs/architecture-v1.svg new file mode 100644 index 0000000..1e9e2e4 --- /dev/null +++ b/docs/architecture-v1.svg @@ -0,0 +1,109 @@ +External ClientsAPI GatewayAPI EndpointsExecution FlowsSchema Extraction PipelineExecutor ArchitectureDatabase (Neon PostgreSQL)Background Workers (Vercel Cron)External ServicesBridge System (WIP)AI Integration PointsWeb App(Next.js 16)TPMJS CLI(@tpmjs/cli)AI Clients(Claude Desktop, GPT, etc.)Bridge CLI(@tpmjs/bridge)AuthenticationRate LimitingTool DiscoveryExecutionMCP ProtocolAgents & CollectionsBridgeScenariosSync (Cron)Stats & HealthPath A: Playground Flow(Web UI)Path B: MCP Flow(External AI Client)NPM Registrypackages with 'tpmjs' keywordSync Workers (Vercel Cron)Schema ExtractionZod / AI SDK ConversionExecutor ContractImplementationsPACKAGESUSERSEXECUTIONCOLLECTIONSAGENTSSYNCSCENARIOSUSE_CASESENGAGEMENTBRIDGESync JobsDaily JobsPackage SourcesRuntimeDataAI ProvidersNotificationsLocal MCP Server(Blender, etc.)Bridge CLI(@tpmjs/bridge)POST /api/bridge{ type: 'register', tools: [...] }BridgeConnection recordTool calls via polling:GET /api/bridge -> pending callsPOST /api/bridge -> tool resultsUser-Provided KeysInternal Keys (TPMJS)Supported ProvidersBetter Auth(email/password, OAuth)TPMJS API Keys(scoped permissions)Session TokensPer-endpoint limitsUser tier-based(FREE, PRO, ENTERPRISE)GET /api/toolsGET /api/tools/searchGET /api/tools/[id]POST /api/tools/execute/[slug](SSE streaming)/api/mcp/[user]/[slug]/[transport](JSON-RPC 2.0)/api/agents/*/api/collections/*/api/chat/*POST /api/bridgeGET /api/bridge(polling + results)/api/scenarios/*/api/use-cases/*/api/sync/changes/api/sync/keyword/api/sync/metricsGET /api/statsGET /api/healthPOST /api/health/report1. User Prompt2. POST /api/tools/execute/[slug]3. AI Agent (AI SDK v6)GPT-4 / Claude / etc.4. Tool Schema (Zod)5. Executor ResolutionAgent -> Collection -> Default6. EXECUTOR (Railway)POST /execute-tool7. SSE Stream Response(chunk, tokens, complete)1. External AI Client2. JSON-RPC 2.03. /api/mcp/[user]/[slug]/[transport]4. MCP Handlertools/list, tools/call5. Tool Name ResolutionRegistry + Bridge tools6. Same Executor7. JSON-RPC Response/api/sync/changes (every 2 min)npm _changes feed/api/sync/keyword (every 15 min)keyword search/api/sync/metrics (every hour)downloads, stars1. Fetch package from npm2. Import via esm.sh (dynamic)3. listToolExports() - discover exports4. extractToolSchema() - analyze signatures5. AI extraction (if needed)6. validateTpmjsField()7. Store in database (inputSchema)TPMJS ParametersconvertToZodSchema()Zod Schemaz.object({ ... })AI SDK inputSchemaLLM Tool Definition(OpenAI/Anthropic format)POST /execute-tool{ packageName, name, version, params, env }Response: { success, output, error, executionTimeMs }GET /healthRailway (Default)- Sandboxed Node.js- Dynamic imports from esm.sh- Runs untrusted npm code safelyVercel Template- Serverless functions- One-click deployFuture Options- AWS Lambda- Docker- Custom HTTP servicePackageToolHealthCheckUserSessionAccountVerificationUserApiKeyTpmjsApiKeySimulationTokenUsageExecutionLogApiUsageRecordApiUsageSummaryCollectionCollectionToolCollectionLikeCollectionBridgeToolAgentAgentCollectionAgentToolAgentLikeConversationMessageSyncCheckpointSyncLogStatsSnapshotEndpointHealthReportScenarioScenarioRunScenarioEmbeddingScenarioQuotaUseCasePersonaIndustryCategorySocialProofToolLikeToolRatingToolReviewUserActivityBridgeConnectionEvery 2 min: /api/sync/changes(npm changes feed)Every 15 min: /api/sync/keyword(keyword search)Every hour: /api/sync/metrics(downloads, stars)Daily: /api/sync/stats-snapshotDaily 3am: /api/sync/cleanup-activityDaily 9am: /api/cron/discord-summaryDaily: /api/cron/use-cases(AI generation)npm RegistryMetadata, changes feedGitHub APIStars, repo metadataBundlephobiaPackage size analysisesm.shDynamic ESM importsVercelHosting, Edge, CronRailwayDefault executor hostingNeonPostgreSQL databaseOpenAIGPT-4, embeddingsAnthropicClaudeGoogleGeminiGroqMistralDiscordDaily summariesAgent chats(users bring their own API keys)Custom collectionswith API key storageSchema extraction(analyze tool signatures)Use case generation(marketing content)Scenario evaluation(pass/fail determination)Discord summariesOpenAI (GPT-4, GPT-4 Turbo)Anthropic (Claude)Google (Gemini)GroqMistral via Collection + + + diff --git a/docs/diagrams/01-overview.d2 b/docs/diagrams/01-overview.d2 new file mode 100644 index 0000000..76c5ff0 --- /dev/null +++ b/docs/diagrams/01-overview.d2 @@ -0,0 +1,139 @@ +# System Overview +# Purpose: Show the TPMJS ecosystem from tools to execution + +direction: down + +# ============================================================================== +# STYLES +# ============================================================================== + +classes: { + tools: { + style: { + fill: "#e3f2fd" + stroke: "#1976d2" + border-radius: 8 + } + } + npm: { + style: { + fill: "#fff3e0" + stroke: "#f57c00" + border-radius: 8 + } + } + tpmjs: { + style: { + fill: "#e8f5e9" + stroke: "#388e3c" + border-radius: 8 + } + } + user: { + style: { + fill: "#f3e5f5" + stroke: "#7b1fa2" + border-radius: 8 + } + } + execution: { + style: { + fill: "#fce4ec" + stroke: "#c2185b" + border-radius: 8 + } + } + output: { + style: { + fill: "#e8f5e9" + stroke: "#388e3c" + border-radius: 8 + } + } +} + +# ============================================================================== +# TOOLS (Examples) +# ============================================================================== + +tools: Tools { + class: tools + + weather: weather-tool + calculator: calculator-tool + translator: translator-tool +} + +# ============================================================================== +# NPM REGISTRY +# ============================================================================== + +npm: npm Registry { + class: npm + + packages: Packages with\n'tpmjs' keyword +} + +# ============================================================================== +# TPMJS PLATFORM +# ============================================================================== + +tpmjs: TPMJS { + class: tpmjs + + sync: Sync Workers + registry: Tool Registry +} + +# ============================================================================== +# USER LAYER +# ============================================================================== + +user: Users { + class: user + + collections: Collections + agents: Agents + mcp: MCP Servers +} + +# ============================================================================== +# EXECUTION +# ============================================================================== + +execution: Executors { + class: execution + direction: down + + sandbox: Official Sandbox + custom: Custom Executor +} + +# ============================================================================== +# OUTPUTS +# ============================================================================== + +outputs: Outputs { + class: output + + sse: SSE Response + jsonrpc: JSON-RPC Response +} + +# ============================================================================== +# MAIN FLOW +# ============================================================================== + +tools -> npm: publish +npm -> tpmjs.sync: sync +tpmjs.sync -> tpmjs.registry: store + +tpmjs.registry -> user.collections: collect & share +user.collections -> user.agents: power +user.collections -> user.mcp: auto-generate + +user.collections -> execution: run +user.agents -> execution: run +user.mcp -> execution: run + +execution -> outputs: expose diff --git a/docs/diagrams/01-overview.svg b/docs/diagrams/01-overview.svg new file mode 100644 index 0000000..9cbbb0a --- /dev/null +++ b/docs/diagrams/01-overview.svg @@ -0,0 +1,118 @@ +Toolsnpm RegistryTPMJSUsersExecutorsOutputsweather-toolcalculator-tooltranslator-toolPackages with'tpmjs' keywordSync WorkersTool RegistryCollectionsAgentsMCP ServersOfficial SandboxCustom ExecutorSSE ResponseJSON-RPC Response publishsyncstorecollect & sharepowerauto-generaterunrunrunexpose + + + + + + + + + + + + diff --git a/docs/diagrams/02-discovery.d2 b/docs/diagrams/02-discovery.d2 new file mode 100644 index 0000000..5bdefdd --- /dev/null +++ b/docs/diagrams/02-discovery.d2 @@ -0,0 +1,137 @@ +# Tool Discovery Flow (Hero Path) +# Purpose: Show how npm packages become TPMJS tools +# Direction: Left → Right + +direction: right + +# ============================================================================== +# STYLES +# ============================================================================== + +classes: { + external: { + style: { + fill: "#fff3e0" + stroke: "#f57c00" + border-radius: 8 + } + } + sync: { + style: { + fill: "#e8eaf6" + stroke: "#3f51b5" + border-radius: 8 + } + } + extract: { + style: { + fill: "#f3e5f5" + stroke: "#7b1fa2" + border-radius: 8 + } + } + storage: { + style: { + fill: "#e8f5e9" + stroke: "#388e3c" + border-radius: 8 + } + } + available: { + style: { + fill: "#e3f2fd" + stroke: "#1976d2" + border-radius: 8 + } + } + hero: { + style: { + stroke-width: 3 + stroke: "#1976d2" + } + } +} + +# ============================================================================== +# NPM REGISTRY (Source) +# ============================================================================== + +npm: npm Registry { + class: external + + packages: "'tpmjs' keyword" +} + +# ============================================================================== +# SYNC WORKERS +# ============================================================================== + +sync: Sync Workers { + class: sync +} + +# ============================================================================== +# SCHEMA EXTRACTION +# ============================================================================== + +extract: Schema Extraction { + class: extract + + import: Import via esm.sh + analyze: Extract Schema + zod: Convert to Zod +} + +# ============================================================================== +# TOOL REGISTRY (Storage) +# ============================================================================== + +registry: Tool Registry { + class: storage + + tools: Tool Table +} + +# ============================================================================== +# AVAILABLE FOR USE +# ============================================================================== + +available: Available { + class: available + + web: Web UI + mcp: MCP Protocol + api: REST API +} + +# ============================================================================== +# HERO PATH CONNECTIONS (emphasized) +# ============================================================================== + +npm -> sync: { + class: hero + style.stroke: "#1976d2" + style.stroke-width: 3 +} + +sync -> extract: { + class: hero + style.stroke: "#1976d2" + style.stroke-width: 3 +} + + + +# ============================================================================== +# INTERNAL CONNECTIONS +# ============================================================================== + +# Extract internal +extract.import -> extract.analyze +extract.analyze -> extract.zod +extract.zod -> registry.tools + +# Available internal +registry.tools -> available.web +registry.tools -> available.mcp +registry.tools -> available.api diff --git a/docs/diagrams/02-discovery.svg b/docs/diagrams/02-discovery.svg new file mode 100644 index 0000000..9500790 --- /dev/null +++ b/docs/diagrams/02-discovery.svg @@ -0,0 +1,102 @@ +npm RegistrySync WorkersSchema ExtractionTool RegistryAvailable'tpmjs' keywordImport via esm.shExtract SchemaConvert to ZodTool TableWeb UIMCP ProtocolREST API + + + diff --git a/docs/diagrams/03-execution.d2 b/docs/diagrams/03-execution.d2 new file mode 100644 index 0000000..403df85 --- /dev/null +++ b/docs/diagrams/03-execution.d2 @@ -0,0 +1,98 @@ +# Tool Execution Flow +# Purpose: Show how tools get executed +# Direction: Left → Right + +direction: right + +# ============================================================================== +# STYLES +# ============================================================================== + +classes: { + input: { + style: { + fill: "#e3f2fd" + stroke: "#1976d2" + border-radius: 8 + } + } + executor: { + style: { + fill: "#fce4ec" + stroke: "#c2185b" + border-radius: 8 + } + } + custom: { + style: { + fill: "#fafafa" + stroke: "#9e9e9e" + stroke-dash: 5 + border-radius: 8 + } + } + output: { + style: { + fill: "#e8f5e9" + stroke: "#388e3c" + border-radius: 8 + } + } +} + +# ============================================================================== +# INPUT +# ============================================================================== + +input: Input { + class: input + + tool: Tool + payload: Payload +} + +# ============================================================================== +# EXECUTORS +# ============================================================================== + +executors: Executors { + class: executor + + official: Official Executor { + direction: down + + esm: esm.sh Import + deno: Deno Runtime + resolve: Resolution + } + + custom: Custom/Community Executors { + class: custom + label: "Anyone can build\nand host their own" + } +} + +# ============================================================================== +# OUTPUTS +# ============================================================================== + +web_output: SSE Response { + class: output +} + +mcp_output: JSON-RPC Response { + class: output +} + +# ============================================================================== +# CONNECTIONS +# ============================================================================== + +input -> executors + +# Executor internal +executors.official.esm -> executors.official.deno +executors.official.deno -> executors.official.resolve + +executors -> web_output +executors -> mcp_output diff --git a/docs/diagrams/03-execution.svg b/docs/diagrams/03-execution.svg new file mode 100644 index 0000000..53f3f2f --- /dev/null +++ b/docs/diagrams/03-execution.svg @@ -0,0 +1,102 @@ +InputExecutorsSSE ResponseJSON-RPC ResponseToolPayloadOfficial ExecutorAnyone can buildand host their ownesm.sh ImportDeno RuntimeResolution + + + diff --git a/docs/diagrams/README.md b/docs/diagrams/README.md new file mode 100644 index 0000000..e8a06c1 --- /dev/null +++ b/docs/diagrams/README.md @@ -0,0 +1,142 @@ +# TPMJS Architecture Diagrams + +Visual documentation of the TPMJS system architecture, optimized for quick understanding. + +## Diagram Index + +| Diagram | Purpose | View | +|---------|---------|------| +| [System Overview](./01-overview.svg) | 10-second understanding of TPMJS | [SVG](./01-overview.svg) | +| [Tool Discovery](./02-discovery.svg) | How npm packages become tools | [SVG](./02-discovery.svg) | +| [Tool Execution](./03-execution.svg) | How tools get called and run | [SVG](./03-execution.svg) | +| [Data Model](./04-data-model.svg) | Database domain groups | [SVG](./04-data-model.svg) | + +--- + +## 1. System Overview + +**Purpose:** Understand what TPMJS is at a glance. + +![System Overview](./01-overview.svg) + +**Flow:** Inputs → TPMJS Core → Execution → Outputs + +- **Inputs:** npm Registry, AI Clients, Web Users, Bridge CLI (WIP) +- **Core:** API Gateway, Tool Registry, Schema Pipeline +- **Execution:** AI Agents, Executor (Railway) +- **Outputs:** Tool Results, MCP Responses, SSE Streams + +--- + +## 2. Tool Discovery Flow + +**Purpose:** Show how npm packages become TPMJS tools (Hero Path). + +![Tool Discovery](./02-discovery.svg) + +**Flow:** npm Registry → Sync Workers → Schema Extraction → Tool Registry → Available + +1. **npm Registry** - Packages with `tpmjs` keyword +2. **Sync Workers** - Changes feed (2 min), Keyword search (15 min), Metrics (hourly) +3. **Schema Extraction** - Import via esm.sh, Extract schema, AI assist, Convert to Zod +4. **Tool Registry** - Database storage (Package + Tool tables) +5. **Available** - Web UI, MCP Protocol, REST API + +--- + +## 3. Tool Execution Flow + +**Purpose:** Show how tools get called and executed via two paths. + +![Tool Execution](./03-execution.svg) + +**Path A (Web Playground):** +``` +User Prompt → AI Agent → Tool Schema → Executor → SSE Response +``` + +**Path B (MCP Protocol):** +``` +AI Client → JSON-RPC → MCP Handler → Executor → JSON-RPC Response +``` + +Both paths converge at the **Executor** which handles: +- Resolution (Agent → Collection → Default) +- Railway execution (POST /execute-tool) +- Dynamic import via esm.sh + +--- + +## 4. Data Model + +**Purpose:** Database structure reference (domain groups, not individual tables). + +![Data Model](./04-data-model.svg) + +**6 Domain Groups:** + +| Group | Contains | +|-------|----------| +| Packages & Tools | Package, Tool, ToolVersion | +| Users & Auth | User, Session, Account, APIKey | +| Agents & Chats | Agent, Chat, Message, Prompt | +| Collections | Collection, CollectionTool | +| Execution & Usage | Execution, Usage, Feedback | +| Sync & Scenarios | SyncCheckpoint, SyncLog, Scenario | + +--- + +## Visual Legend + +### Arrow Styles +| Style | Meaning | +|-------|---------| +| **Solid →** | Synchronous request/response | +| **Dashed ⇢** | Async, event, or cron job | +| **Dotted ··→** | WIP / Future feature | + +### Color Coding +| Color | Domain | +|-------|--------| +| Blue | API / Gateway | +| Green | Database / Storage | +| Orange | External Services | +| Purple | AI / LLM | +| Pink | Execution | +| Gray | WIP Features | + +--- + +## Editing Diagrams + +Diagrams are written in [D2](https://d2lang.com/) and rendered to SVG. + +### Prerequisites +```bash +# Install D2 +brew install d2 +``` + +### Render a diagram +```bash +cd docs/diagrams +d2 01-overview.d2 01-overview.svg --layout=elk +``` + +### Render all diagrams +```bash +for f in *.d2; do d2 "$f" "${f%.d2}.svg" --layout=elk; done +``` + +### Source Files +- `01-overview.d2` - System Overview +- `02-discovery.d2` - Tool Discovery Flow +- `03-execution.d2` - Tool Execution Flow +- `04-data-model.d2` - Data Model + +--- + +## Version History + +- **v2** (Current) - Split into 4 focused diagrams, left-to-right flow +- **v1** - Single comprehensive diagram (archived as `../architecture-v1.d2`) diff --git a/hotel.sh b/hotel.sh deleted file mode 100755 index 43bf8b9..0000000 --- a/hotel.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/bash -# Hotel - Exterior View (Front Facade) -# Using ANSI 24-bit color codes - -clear -echo "" -echo " ╔══════════════════════════════════════════════════════════════════════╗" -echo " ║ GRAND HOTEL - EXTERIOR VIEW ║" -echo " ╚══════════════════════════════════════════════════════════════════════╝" -echo "" - -# Colors -SKY="\033[48;2;135;180;220m" -WALL="\033[48;2;180;160;140m" -WIN="\033[48;2;100;140;180m" -WIN_LIT="\033[48;2;255;230;150m" -WIN_FRAME="\033[48;2;80;70;60m" -ROOF="\033[48;2;100;80;70m" -ROOF_H="\033[48;2;120;100;90m" -GROUND="\033[48;2;80;80;80m" -GRASS="\033[48;2;60;120;50m" -DOOR="\033[48;2;120;60;40m" -DOOR_H="\033[48;2;160;100;60m" -GLASS="\033[48;2;180;200;210m" -AWN="\033[48;2;160;40;40m" -AWN_S="\033[48;2;120;30;30m" -SIGN="\033[48;2;40;40;50m" -SIGN_LIT="\033[48;2;255;200;100m" -TRIM="\033[48;2;200;190;170m" -PLANT="\033[48;2;40;100;40m" -LAMP="\033[48;2;60;60;60m" -LAMP_ON="\033[48;2;255;240;200m" -X="\033[0m" -P=" " - -# SKY -echo -e "${SKY}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${X}" - -# ROOF -echo -e "${SKY}${P}${P}${P}${P}${P}${P}${ROOF}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${SKY}${P}${P}${P}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${P}${P}${ROOF}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${SKY}${P}${P}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${P}${ROOF_H}${ROOF}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${ROOF}${SKY}${P}${P}${P}${X}" - -# ROOF EDGE / TRIM -echo -e "${SKY}${P}${P}${P}${TRIM}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${TRIM}${SKY}${P}${P}${X}" - -# FLOOR 5 -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${SKY}${P}${P}${X}" - -# FLOOR 4 -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${SKY}${P}${P}${X}" - -# FLOOR 3 -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${SKY}${P}${P}${X}" - -# FLOOR 2 -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${WIN_FRAME}${WIN_LIT}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${SKY}${P}${P}${X}" - -# HOTEL SIGN -echo -e "${SKY}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${SIGN}${P}${SIGN_LIT}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${SIGN_LIT}${P}${SIGN}${P}${P}${P}${P}${P}${WALL}${SKY}${P}${P}${X}" - -# FLOOR 1 - ENTRANCE -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${P}${P}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${P}${P}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${P}${P}${P}${GLASS}${GLASS}${DOOR}${DOOR}${DOOR}${DOOR}${DOOR}${DOOR}${GLASS}${GLASS}${P}${P}${WALL}${P}${WIN_FRAME}${WIN}${P}${WIN_FRAME}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${P}${P}${P}${GLASS}${GLASS}${DOOR}${DOOR_H}${DOOR}${DOOR}${DOOR_H}${DOOR}${GLASS}${GLASS}${P}${P}${WALL}${P}${P}${P}${P}${P}${WALL}${SKY}${P}${P}${X}" - -# AWNING -echo -e "${SKY}${P}${P}${P}${WALL}${P}${P}${P}${P}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${AWN}${P}${P}${P}${P}${WALL}${SKY}${P}${P}${X}" -echo -e "${SKY}${P}${P}${P}${WALL}${P}${P}${P}${AWN_S}${AWN}${AWN_S}${AWN}${AWN_S}${AWN}${AWN_S}${AWN}${AWN_S}${AWN}${AWN_S}${AWN}${AWN_S}${AWN}${AWN_S}${AWN}${AWN_S}${AWN}${AWN_S}${P}${P}${P}${WALL}${SKY}${P}${P}${X}" - -# ENTRANCE GROUND LEVEL -echo -e "${SKY}${P}${P}${LAMP}${WALL}${P}${PLANT}${P}${P}${P}${P}${P}${P}${GLASS}${GLASS}${DOOR}${DOOR_H}${DOOR}${DOOR}${DOOR_H}${DOOR}${GLASS}${GLASS}${P}${P}${P}${P}${P}${P}${PLANT}${P}${WALL}${LAMP}${SKY}${P}${X}" -echo -e "${SKY}${P}${P}${LAMP_ON}${WALL}${P}${PLANT}${P}${P}${P}${P}${P}${P}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${GLASS}${P}${P}${P}${P}${P}${P}${PLANT}${P}${WALL}${LAMP_ON}${SKY}${P}${X}" - -# GROUND / SIDEWALK -echo -e "${GRASS}${P}${P}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GROUND}${GRASS}${P}${X}" -echo -e "${GRASS}${P}${P}${P}${GROUND}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${GROUND}${P}${GRASS}${P}${X}" -echo -e "${GRASS}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${X}" - -echo "" -echo " ┌──────────────────────────────────────────────────────────────────────┐" -echo " │ LEGEND │" -echo " ├──────────────────────────────────────────────────────────────────────┤" -echo -e " │ ${WALL} ${X} Wall ${WIN} ${X} Window (dark) ${WIN_LIT} ${X} Window (lit) │" -echo -e " │ ${ROOF} ${X} Roof ${DOOR} ${X} Door ${GLASS} ${X} Glass │" -echo -e " │ ${AWN} ${X} Awning ${PLANT} ${X} Plants ${LAMP_ON} ${X} Lamp │" -echo -e " │ ${GROUND} ${X} Ground ${GRASS} ${X} Grass ${SIGN_LIT} ${X} Sign lights │" -echo " └──────────────────────────────────────────────────────────────────────┘" -echo "" -echo " 5-story hotel with central glass entrance, red awning, and lit windows" -echo "" diff --git a/knight.sh b/knight.sh deleted file mode 100755 index 66b86f2..0000000 --- a/knight.sh +++ /dev/null @@ -1,182 +0,0 @@ -#!/bin/bash -# Knight in Armor v2 - Improved Detail -# Better proportions, sharper edges, ground shadow - -clear - -c() { echo -en "\033[38;2;$1;$2;$3m\033[48;2;$4;$5;$6m"; } -X="\033[0m" - -echo "" -echo " ╔═══════════════════════════════════════════════════════════════════════════════════╗" -echo " ║ KNIGHT IN ARMOR v2 - IMPROVED DETAIL (Facing Down) ║" -echo " ╚═══════════════════════════════════════════════════════════════════════════════════╝" -echo "" - -# ═══════════════════════════════════════════════════════════════════════════════ -# REFINED COLOR PALETTE -# ═══════════════════════════════════════════════════════════════════════════════ - -# Metal (more contrast) -M1="220 225 235" # Brightest highlight -M2="170 175 185" # Light -M3="120 125 135" # Mid -M4="75 80 90" # Dark -M5="40 42 50" # Darkest - -# Gold (richer) -G1="255 200 60" # Bright gold -G2="180 140 40" # Dark gold - -# Cape (deeper blue) -C1="100 120 200" # Light -C2="60 80 160" # Mid -C3="35 50 120" # Dark - -# Plume (vibrant red) -P1="240 50 50" # Bright -P2="180 30 30" # Dark - -# Shield (bold red with gold cross) -SH="180 40 40" # Shield red -SHD="130 25 25" # Shield dark - -# Sword -SW="240 245 255" # Blade bright -SWD="180 185 195" # Blade shadow - -# Shadow on ground -SD="0 0 0" - -# Terrains -GR="40 95 40" # Grass -ST="85 85 90" # Stone -SA="170 150 110" # Sand -WA="45 90 130" # Water - -echo " ┌────────────────┐┌────────────────┐┌────────────────┐┌────────────────┐" -echo " │ GRASS ││ STONE ││ SAND ││ WATER │" -echo " └────────────────┘└────────────────┘└────────────────┘└────────────────┘" - -# Unified knight drawing - 12 cells wide, tighter layout -# Each column: terrain bg, knight on top - -# Row 1: Plume top -echo -en " " -echo -en "$(c $P1 $GR) ⢀⣴⣷⣦⡀ $(c $P1 $ST) ⢀⣴⣷⣦⡀ $(c $P1 $SA) ⢀⣴⣷⣦⡀ $(c $P1 $WA) ⢀⣴⣷⣦⡀ " -echo -e "${X}" - -# Row 2: Plume body -echo -en " " -echo -en "$(c $P1 $GR) $(c $P2 $GR)⣼$(c $P1 $GR)⣿⣿⣿⣿$(c $P2 $GR)⣧$(c $P1 $GR) $(c $P1 $ST) $(c $P2 $ST)⣼$(c $P1 $ST)⣿⣿⣿⣿$(c $P2 $ST)⣧$(c $P1 $ST) $(c $P1 $SA) $(c $P2 $SA)⣼$(c $P1 $SA)⣿⣿⣿⣿$(c $P2 $SA)⣧$(c $P1 $SA) $(c $P1 $WA) $(c $P2 $WA)⣼$(c $P1 $WA)⣿⣿⣿⣿$(c $P2 $WA)⣧$(c $P1 $WA) " -echo -e "${X}" - -# Row 3: Helmet crown with plume base -echo -en " " -echo -en "$(c $M4 $GR) ⣰$(c $M3 $GR)⣿$(c $P2 $GR)⣿⣿⣿⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣆ $(c $M4 $ST) ⣰$(c $M3 $ST)⣿$(c $P2 $ST)⣿⣿⣿⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣆ $(c $M4 $SA) ⣰$(c $M3 $SA)⣿$(c $P2 $SA)⣿⣿⣿⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣆ $(c $M4 $WA) ⣰$(c $M3 $WA)⣿$(c $P2 $WA)⣿⣿⣿⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣆ " -echo -e "${X}" - -# Row 4: Helmet dome - bright center -echo -en " " -echo -en "$(c $M5 $GR) ⣼$(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $M1 $GR)⣿⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR)⣧ $(c $M5 $ST) ⣼$(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $M1 $ST)⣿⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST)⣧ $(c $M5 $SA) ⣼$(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $M1 $SA)⣿⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA)⣧ $(c $M5 $WA) ⣼$(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $M1 $WA)⣿⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA)⣧ " -echo -e "${X}" - -# Row 5: Helmet back plate -echo -en " " -echo -en "$(c $M5 $GR) ⣿$(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $M1 $GR)⣿⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR)⣿ $(c $M5 $ST) ⣿$(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $M1 $ST)⣿⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST)⣿ $(c $M5 $SA) ⣿$(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $M1 $SA)⣿⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA)⣿ $(c $M5 $WA) ⣿$(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $M1 $WA)⣿⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA)⣿ " -echo -e "${X}" - -# Row 6: Gorget with gold trim -echo -en " " -echo -en "$(c $M5 $GR) ⠸$(c $M4 $GR)⣿$(c $G1 $GR)⡿$(c $M2 $GR)⣿⣿⣿⣿$(c $G1 $GR)⢿$(c $M4 $GR)⣿$(c $M5 $GR)⠇ $(c $M5 $ST) ⠸$(c $M4 $ST)⣿$(c $G1 $ST)⡿$(c $M2 $ST)⣿⣿⣿⣿$(c $G1 $ST)⢿$(c $M4 $ST)⣿$(c $M5 $ST)⠇ $(c $M5 $SA) ⠸$(c $M4 $SA)⣿$(c $G1 $SA)⡿$(c $M2 $SA)⣿⣿⣿⣿$(c $G1 $SA)⢿$(c $M4 $SA)⣿$(c $M5 $SA)⠇ $(c $M5 $WA) ⠸$(c $M4 $WA)⣿$(c $G1 $WA)⡿$(c $M2 $WA)⣿⣿⣿⣿$(c $G1 $WA)⢿$(c $M4 $WA)⣿$(c $M5 $WA)⠇ " -echo -e "${X}" - -# Row 7: Shoulders - wide pauldrons -echo -en " " -echo -en "$(c $C3 $GR)⣴$(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $M1 $GR)⣿$(c $C2 $GR)⣿⣿$(c $M1 $GR)⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣿$(c $C3 $GR)⣦$(c $C3 $ST)⣴$(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $M1 $ST)⣿$(c $C2 $ST)⣿⣿$(c $M1 $ST)⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣿$(c $C3 $ST)⣦$(c $C3 $SA)⣴$(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $M1 $SA)⣿$(c $C2 $SA)⣿⣿$(c $M1 $SA)⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣿$(c $C3 $SA)⣦$(c $C3 $WA)⣴$(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $M1 $WA)⣿$(c $C2 $WA)⣿⣿$(c $M1 $WA)⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣿$(c $C3 $WA)⣦" -echo -e "${X}" - -# Row 8: Pauldrons with spikes + cape -echo -en " " -echo -en "$(c $C1 $GR)⣿$(c $M3 $GR)⣿$(c $G1 $GR)⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $C1 $GR)⣿⣿$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $G1 $GR)⣿$(c $M3 $GR)⣿$(c $C1 $GR)⣿$(c $C1 $ST)⣿$(c $M3 $ST)⣿$(c $G1 $ST)⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $C1 $ST)⣿⣿$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $G1 $ST)⣿$(c $M3 $ST)⣿$(c $C1 $ST)⣿$(c $C1 $SA)⣿$(c $M3 $SA)⣿$(c $G1 $SA)⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $C1 $SA)⣿⣿$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $G1 $SA)⣿$(c $M3 $SA)⣿$(c $C1 $SA)⣿$(c $C1 $WA)⣿$(c $M3 $WA)⣿$(c $G1 $WA)⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $C1 $WA)⣿⣿$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $G1 $WA)⣿$(c $M3 $WA)⣿$(c $C1 $WA)⣿" -echo -e "${X}" - -# Row 9: Upper torso + cape + arms start -echo -en " " -echo -en "$(c $C1 $GR)⣿$(c $C2 $GR)⣿$(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $C2 $GR)⣿$(c $C1 $GR)⣿⣿$(c $C2 $GR)⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣿$(c $C2 $GR)⣿$(c $C1 $GR)⣿$(c $C1 $ST)⣿$(c $C2 $ST)⣿$(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $C2 $ST)⣿$(c $C1 $ST)⣿⣿$(c $C2 $ST)⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣿$(c $C2 $ST)⣿$(c $C1 $ST)⣿$(c $C1 $SA)⣿$(c $C2 $SA)⣿$(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $C2 $SA)⣿$(c $C1 $SA)⣿⣿$(c $C2 $SA)⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣿$(c $C2 $SA)⣿$(c $C1 $SA)⣿$(c $C1 $WA)⣿$(c $C2 $WA)⣿$(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $C2 $WA)⣿$(c $C1 $WA)⣿⣿$(c $C2 $WA)⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣿$(c $C2 $WA)⣿$(c $C1 $WA)⣿" -echo -e "${X}" - -# Row 10: Shield (left) + torso + sword hilt (right) -echo -en " " -echo -en "$(c $C2 $GR)⣿$(c $SH $GR)⣿$(c $G1 $GR)⣿$(c $SH $GR)⣿$(c $C2 $GR)⣿$(c $C1 $GR)⣿⣿$(c $C2 $GR)⣿$(c $M3 $GR)⣿$(c $G2 $GR)⣿$(c $SW $GR)⡇$(c $C2 $GR)⣿$(c $C2 $ST)⣿$(c $SH $ST)⣿$(c $G1 $ST)⣿$(c $SH $ST)⣿$(c $C2 $ST)⣿$(c $C1 $ST)⣿⣿$(c $C2 $ST)⣿$(c $M3 $ST)⣿$(c $G2 $ST)⣿$(c $SW $ST)⡇$(c $C2 $ST)⣿$(c $C2 $SA)⣿$(c $SH $SA)⣿$(c $G1 $SA)⣿$(c $SH $SA)⣿$(c $C2 $SA)⣿$(c $C1 $SA)⣿⣿$(c $C2 $SA)⣿$(c $M3 $SA)⣿$(c $G2 $SA)⣿$(c $SW $SA)⡇$(c $C2 $SA)⣿$(c $C2 $WA)⣿$(c $SH $WA)⣿$(c $G1 $WA)⣿$(c $SH $WA)⣿$(c $C2 $WA)⣿$(c $C1 $WA)⣿⣿$(c $C2 $WA)⣿$(c $M3 $WA)⣿$(c $G2 $WA)⣿$(c $SW $WA)⡇$(c $C2 $WA)⣿" -echo -e "${X}" - -# Row 11: Shield with cross + mid torso + sword blade -echo -en " " -echo -en "$(c $C3 $GR)⣿$(c $SH $GR)⣿$(c $G1 $GR)⣿$(c $G1 $GR)⣿$(c $C2 $GR)⣿$(c $C1 $GR)⣿⣿$(c $C2 $GR)⣿$(c $M4 $GR)⣿$(c $SW $GR)⣿$(c $SW $GR)⡇$(c $C3 $GR)⣿$(c $C3 $ST)⣿$(c $SH $ST)⣿$(c $G1 $ST)⣿$(c $G1 $ST)⣿$(c $C2 $ST)⣿$(c $C1 $ST)⣿⣿$(c $C2 $ST)⣿$(c $M4 $ST)⣿$(c $SW $ST)⣿$(c $SW $ST)⡇$(c $C3 $ST)⣿$(c $C3 $SA)⣿$(c $SH $SA)⣿$(c $G1 $SA)⣿$(c $G1 $SA)⣿$(c $C2 $SA)⣿$(c $C1 $SA)⣿⣿$(c $C2 $SA)⣿$(c $M4 $SA)⣿$(c $SW $SA)⣿$(c $SW $SA)⡇$(c $C3 $SA)⣿$(c $C3 $WA)⣿$(c $SH $WA)⣿$(c $G1 $WA)⣿$(c $G1 $WA)⣿$(c $C2 $WA)⣿$(c $C1 $WA)⣿⣿$(c $C2 $WA)⣿$(c $M4 $WA)⣿$(c $SW $WA)⣿$(c $SW $WA)⡇$(c $C3 $WA)⣿" -echo -e "${X}" - -# Row 12: Lower shield + fauld (waist) + sword -echo -en " " -echo -en "$(c $C3 $GR)⠸$(c $SHD $GR)⣿$(c $SH $GR)⣿$(c $SHD $GR)⣿$(c $C2 $GR)⣿$(c $G1 $GR)⣤⣤$(c $C2 $GR)⣿$(c $M4 $GR)⣿$(c $SW $GR)⣿$(c $SWD $GR)⡇$(c $C3 $GR)⠇$(c $C3 $ST)⠸$(c $SHD $ST)⣿$(c $SH $ST)⣿$(c $SHD $ST)⣿$(c $C2 $ST)⣿$(c $G1 $ST)⣤⣤$(c $C2 $ST)⣿$(c $M4 $ST)⣿$(c $SW $ST)⣿$(c $SWD $ST)⡇$(c $C3 $ST)⠇$(c $C3 $SA)⠸$(c $SHD $SA)⣿$(c $SH $SA)⣿$(c $SHD $SA)⣿$(c $C2 $SA)⣿$(c $G1 $SA)⣤⣤$(c $C2 $SA)⣿$(c $M4 $SA)⣿$(c $SW $SA)⣿$(c $SWD $SA)⡇$(c $C3 $SA)⠇$(c $C3 $WA)⠸$(c $SHD $WA)⣿$(c $SH $WA)⣿$(c $SHD $WA)⣿$(c $C2 $WA)⣿$(c $G1 $WA)⣤⣤$(c $C2 $WA)⣿$(c $M4 $WA)⣿$(c $SW $WA)⣿$(c $SWD $WA)⡇$(c $C3 $WA)⠇" -echo -e "${X}" - -# Row 13: Tassets + cape behind -echo -en " " -echo -en "$(c $C3 $GR) ⠈$(c $C2 $GR)⠻$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $C2 $GR)⠟$(c $C3 $GR)⠁ $(c $C3 $ST) ⠈$(c $C2 $ST)⠻$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $C2 $ST)⠟$(c $C3 $ST)⠁ $(c $C3 $SA) ⠈$(c $C2 $SA)⠻$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $C2 $SA)⠟$(c $C3 $SA)⠁ $(c $C3 $WA) ⠈$(c $C2 $WA)⠻$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $C2 $WA)⠟$(c $C3 $WA)⠁ " -echo -e "${X}" - -# Row 14: Upper legs (cuisses) - WIDER -echo -en " " -echo -en "$(c $M5 $GR) $(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $M5 $GR) $(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $M5 $GR) $(c $M5 $ST) $(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $M5 $ST) $(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $M5 $ST) $(c $M5 $SA) $(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $M5 $SA) $(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $M5 $SA) $(c $M5 $WA) $(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $M5 $WA) $(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $M5 $WA) " -echo -e "${X}" - -# Row 15: Knee guards (poleyns) with gold -echo -en " " -echo -en "$(c $M5 $GR) $(c $M4 $GR)⣿$(c $G1 $GR)⣿$(c $M2 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR) $(c $M4 $GR)⣿$(c $M2 $GR)⣿$(c $G1 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR) $(c $M5 $ST) $(c $M4 $ST)⣿$(c $G1 $ST)⣿$(c $M2 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST) $(c $M4 $ST)⣿$(c $M2 $ST)⣿$(c $G1 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST) $(c $M5 $SA) $(c $M4 $SA)⣿$(c $G1 $SA)⣿$(c $M2 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA) $(c $M4 $SA)⣿$(c $M2 $SA)⣿$(c $G1 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA) $(c $M5 $WA) $(c $M4 $WA)⣿$(c $G1 $WA)⣿$(c $M2 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA) $(c $M4 $WA)⣿$(c $M2 $WA)⣿$(c $G1 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA) " -echo -e "${X}" - -# Row 16: Greaves (shin) - WIDER -echo -en " " -echo -en "$(c $M5 $GR) $(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR) $(c $M4 $GR)⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR) $(c $M5 $ST) $(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST) $(c $M4 $ST)⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST) $(c $M5 $SA) $(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA) $(c $M4 $SA)⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA) $(c $M5 $WA) $(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA) $(c $M4 $WA)⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA) " -echo -e "${X}" - -# Row 17: Lower greaves -echo -en " " -echo -en "$(c $M5 $GR) $(c $M5 $GR)⢸$(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR)⡇$(c $M5 $GR) $(c $M5 $GR)⢸$(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR)⡇ $(c $M5 $ST) $(c $M5 $ST)⢸$(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST)⡇$(c $M5 $ST) $(c $M5 $ST)⢸$(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST)⡇ $(c $M5 $SA) $(c $M5 $SA)⢸$(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA)⡇$(c $M5 $SA) $(c $M5 $SA)⢸$(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA)⡇ $(c $M5 $WA) $(c $M5 $WA)⢸$(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA)⡇$(c $M5 $WA) $(c $M5 $WA)⢸$(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA)⡇ " -echo -e "${X}" - -# Row 18: Sabatons (feet) -echo -en " " -echo -en "$(c $M5 $GR) ⣠$(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR)⣄$(c $M4 $GR)⣿$(c $M3 $GR)⣿$(c $M2 $GR)⣿$(c $M3 $GR)⣿$(c $M4 $GR)⣿$(c $M5 $GR)⣄ $(c $M5 $ST) ⣠$(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST)⣄$(c $M4 $ST)⣿$(c $M3 $ST)⣿$(c $M2 $ST)⣿$(c $M3 $ST)⣿$(c $M4 $ST)⣿$(c $M5 $ST)⣄ $(c $M5 $SA) ⣠$(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA)⣄$(c $M4 $SA)⣿$(c $M3 $SA)⣿$(c $M2 $SA)⣿$(c $M3 $SA)⣿$(c $M4 $SA)⣿$(c $M5 $SA)⣄ $(c $M5 $WA) ⣠$(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA)⣄$(c $M4 $WA)⣿$(c $M3 $WA)⣿$(c $M2 $WA)⣿$(c $M3 $WA)⣿$(c $M4 $WA)⣿$(c $M5 $WA)⣄ " -echo -e "${X}" - -# Row 19: Ground shadow -echo -en " " -echo -en "$(c $SD $GR) ⠈⠉⠛⠛⠛⠛⠛⠛⠉⠁ $(c $SD $ST) ⠈⠉⠛⠛⠛⠛⠛⠛⠉⠁ $(c $SD $SA) ⠈⠉⠛⠛⠛⠛⠛⠛⠉⠁ $(c $SD $WA) ⠈⠉⠛⠛⠛⠛⠛⠛⠉⠁ " -echo -e "${X}" - -# Row 20: Terrain texture 1 -echo -en " " -echo -en "$(c 60 130 60 $GR)⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿$(c 105 105 110 $ST)⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿$(c 190 170 130 $SA)⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿$(c 70 120 160 $WA)⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿" -echo -e "${X}" - -# Row 21: Terrain texture 2 -echo -en " " -echo -en "$(c 35 75 35 $GR)⢻⣛⣛⣻⢻⣛⣛⣻⢻⣛⣛⣻$(c 65 65 70 $ST)⣿⣤⣤⣿⣿⣤⣤⣿⣿⣤⣤⣿$(c 150 130 90 $SA)⣀⣠⣄⣀⣀⣠⣄⣀⣀⣠⣄⣀$(c 90 140 180 $WA)⢀⣠⣤⣀⢀⣠⣤⣀⢀⣠⣤⣀" -echo -e "${X}" - -echo "" -echo " ┌─────────────────────────────────────────────────────────────────────────────────────┐" -echo " │ IMPROVEMENTS IN V2 │" -echo " ├─────────────────────────────────────────────────────────────────────────────────────┤" -echo " │ • Wider legs for better proportions │" -echo " │ • Larger feet (sabatons) for stability │" -echo " │ • Higher contrast metal shading (5 levels) │" -echo " │ • Cleaner gold trim on gorget and knees │" -echo " │ • Shield with visible gold cross pattern │" -echo " │ • Ground shadow for depth │" -echo " │ • Tighter tile spacing │" -echo " │ • Richer terrain textures │" -echo " └─────────────────────────────────────────────────────────────────────────────────────┘" -echo "" diff --git a/reptile1_halfblock.sh b/reptile1_halfblock.sh deleted file mode 100755 index b1bcdb2..0000000 --- a/reptile1_halfblock.sh +++ /dev/null @@ -1,156 +0,0 @@ -#!/bin/bash -# Reptile Lord - Method 1: Half-Block Characters (▀ ▄) -# Each cell = 2 vertical pixels using foreground + background color -# ▀ = top pixel (foreground), bottom pixel (background) -# ▄ = bottom pixel (foreground), top pixel (background) -# Full block = both same color, space = both background - -clear -echo "" -echo " ╔═══════════════════════════════════════════════════════════════════════════╗" -echo " ║ REPTILE LORD - HALF-BLOCK METHOD (2 vertical pixels/cell) ║" -echo " ╚═══════════════════════════════════════════════════════════════════════════╝" -echo "" - -# Color function: fg;bg -# Usage: $(c 0 100 0 50 50 50) = green foreground, dark gray background -c() { - echo -en "\033[38;2;$1;$2;$3m\033[48;2;$4;$5;$6m" -} - -X="\033[0m" - -# Colors (R G B) -# BG = transparent/background (dark purple for visibility) -BG="40 30 50" -# Scales -S1="0 120 80" # Dark green scales -S2="0 160 100" # Mid green scales -S3="0 200 120" # Light green scales/highlight -# Underbelly -U1="180 160 100" # Tan underbelly -U2="200 180 120" # Light tan -# Eyes -EY="255 200 0" # Yellow eyes -EP="0 0 0" # Pupil -# Claws/horns -CL="60 50 40" # Dark brown claws -CH="80 70 60" # Horn highlight -# Mouth -MO="150 50 50" # Red mouth interior - -echo " ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐" -echo " │ FACING DOWN │ │ FACING LEFT │ │ FACING RIGHT │" -echo " └─────────────────────┘ └─────────────────────┘ └─────────────────────┘" -echo "" - -# Each sprite is 10 cells wide x 12 cells tall = 10x24 "pixels" -# Row pairs (each row represents 2 pixel rows via half-blocks) - -# --- FACING DOWN --- -# Using ▀ (upper half) and ▄ (lower half) and █ (full) and space (empty) - -# Row 1-2: Top of head with small horns -echo -en " " -echo -en "$(c $BG $BG) $(c $CL $BG)▄$(c $S1 $BG)▄▄▄▄$(c $CL $BG)▄$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $BG $BG) $(c $CL $BG)▄$(c $S1 $BG)▄▄▄▄$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $BG)▄▄▄▄$(c $CL $BG)▄$(c $BG $BG) $(c $BG $BG) " -echo -e "${X}" - -# Row 3-4: Upper head with eyes -echo -en " " -echo -en "$(c $S2 $S1)▄$(c $S1 $S1)█$(c $EY $S1)▀$(c $S2 $S1)▄▄$(c $EY $S1)▀$(c $S1 $S1)█$(c $S2 $S1)▄" -echo -en " " -echo -en "$(c $BG $BG) $(c $S2 $S1)▄$(c $S1 $S1)█$(c $EY $S1)▀$(c $S2 $S1)▄▄$(c $S1 $S1)█$(c $S2 $S1)▄$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $S2 $S1)▄$(c $S1 $S1)█$(c $S2 $S1)▄▄$(c $EY $S1)▀$(c $S1 $S1)█$(c $S2 $S1)▄$(c $BG $BG) " -echo -e "${X}" - -# Row 5-6: Snout/muzzle -echo -en " " -echo -en "$(c $S1 $S2)▄$(c $S2 $S2)█$(c $S3 $S2)▀$(c $U1 $S2)▄▄$(c $S3 $S2)▀$(c $S2 $S2)█$(c $S1 $S2)▄" -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $S2)▄$(c $S2 $S2)██$(c $U1 $S2)▄$(c $S2 $S2)██$(c $S1 $S2)▄$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $S2)▄$(c $S2 $S2)██$(c $U1 $S2)▄$(c $S2 $S2)██$(c $S1 $S2)▄$(c $BG $BG) " -echo -e "${X}" - -# Row 7-8: Neck/shoulders -echo -en " " -echo -en "$(c $S1 $BG)▀$(c $S2 $S1)▄$(c $U1 $S2)▄$(c $U2 $U1)▀▀$(c $U1 $S2)▄$(c $S2 $S1)▄$(c $S1 $BG)▀" -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $BG)▀$(c $S2 $S1)▄$(c $U1 $U1)██$(c $S2 $S1)▄▄$(c $BG $BG) $(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $BG $BG) $(c $S2 $S1)▄▄$(c $U1 $U1)██$(c $S2 $S1)▄$(c $S1 $BG)▀$(c $BG $BG) " -echo -e "${X}" - -# Row 9-10: Upper torso with arms -echo -en " " -echo -en "$(c $CL $BG)▄$(c $S1 $S2)▄$(c $S2 $S2)█$(c $U1 $U1)██$(c $S2 $S2)█$(c $S1 $S2)▄$(c $CL $BG)▄" -echo -en " " -echo -en "$(c $CL $BG)▄$(c $S1 $BG)▀$(c $S2 $S1)▄$(c $U1 $U1)██$(c $S2 $S1)▄$(c $S1 $S2)▄$(c $S2 $BG)▀$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $S2 $BG)▀$(c $S1 $S2)▄$(c $S2 $S1)▄$(c $U1 $U1)██$(c $S2 $S1)▄$(c $S1 $BG)▀$(c $CL $BG)▄" -echo -e "${X}" - -# Row 11-12: Lower torso -echo -en " " -echo -en "$(c $CL $CL)█$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)██$(c $S2 $S2)█$(c $S1 $S1)█$(c $CL $CL)█" -echo -en " " -echo -en "$(c $CL $CL)█$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)██$(c $S2 $S2)█$(c $S1 $S1)█$(c $S1 $BG)▀$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $BG)▀$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)██$(c $S2 $S2)█$(c $S1 $S1)█$(c $CL $CL)█" -echo -e "${X}" - -# Row 13-14: Hips -echo -en " " -echo -en "$(c $BG $CL)▀$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)██$(c $S2 $S2)█$(c $S1 $S1)█$(c $BG $CL)▀" -echo -en " " -echo -en "$(c $BG $CL)▀$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)██$(c $S2 $S2)█$(c $S1 $S1)█$(c $BG $BG) $(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $BG $BG) $(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)██$(c $S2 $S2)█$(c $S1 $S1)█$(c $BG $CL)▀" -echo -e "${X}" - -# Row 15-16: Upper legs -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S2 $BG)▀$(c $BG $BG) $(c $BG $BG) $(c $S2 $BG)▀$(c $S1 $S1)█$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) $(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $S1 $BG)▄$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $BG)▄$(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) $(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) " -echo -e "${X}" - -# Row 17-18: Lower legs -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) $(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) $(c $BG $BG) $(c $S1 $S1)█$(c $S1 $BG)▀$(c $S1 $S1)█$(c $BG $BG) " -echo -en " " -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $BG)▀$(c $S1 $S1)█$(c $BG $BG) $(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) " -echo -e "${X}" - -# Row 19-20: Feet with claws -echo -en " " -echo -en "$(c $CL $BG)▄$(c $S1 $S1)█$(c $CL $S1)▄$(c $BG $BG) $(c $BG $BG) $(c $CL $S1)▄$(c $S1 $S1)█$(c $CL $BG)▄" -echo -en " " -echo -en "$(c $CL $BG)▄$(c $S1 $S1)█$(c $CL $S1)▄$(c $BG $BG) $(c $BG $BG) $(c $S1 $BG)▀$(c $CL $S1)▄$(c $S1 $S1)█$(c $CL $BG)▄" -echo -en " " -echo -en "$(c $CL $BG)▄$(c $S1 $S1)█$(c $CL $S1)▄$(c $S1 $BG)▀$(c $BG $BG) $(c $BG $BG) $(c $CL $S1)▄$(c $S1 $S1)█$(c $CL $BG)▄" -echo -e "${X}" - -# Row 21-22: Claws -echo -en " " -echo -en "$(c $BG $CL)▀$(c $CL $CL)█$(c $BG $CL)▀$(c $BG $BG) $(c $BG $BG) $(c $BG $CL)▀$(c $CL $CL)█$(c $BG $CL)▀" -echo -en " " -echo -en "$(c $BG $CL)▀$(c $CL $CL)█$(c $BG $CL)▀$(c $BG $BG) $(c $BG $BG) $(c $BG $BG) $(c $BG $CL)▀$(c $CL $CL)█$(c $BG $CL)▀" -echo -en " " -echo -en "$(c $BG $CL)▀$(c $CL $CL)█$(c $BG $CL)▀$(c $BG $BG) $(c $BG $BG) $(c $BG $BG) $(c $BG $CL)▀$(c $CL $CL)█$(c $BG $CL)▀" -echo -e "${X}" - -echo "" -echo " Resolution: 10×24 pixels per sprite (10 cells × 12 rows, 2 vertical pixels/cell)" -echo " Characters: ▀ (upper half), ▄ (lower half), █ (full block), space (empty)" -echo " Colors: Foreground = top pixel, Background = bottom pixel" -echo "" diff --git a/reptile2_quadrant.sh b/reptile2_quadrant.sh deleted file mode 100755 index 3d58af9..0000000 --- a/reptile2_quadrant.sh +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/bash -# Reptile Lord - Method 2: Quadrant Block Characters -# Each cell = 2×2 subpixels (4 pixels per cell) -# -# Quadrant characters (2-color only: fg + bg): -# ▖ = bottom-left ▗ = bottom-right -# ▘ = top-left ▝ = top-right -# ▌ = left half ▐ = right half -# ▀ = top half ▄ = bottom half -# ▙ = all except top-right ▟ = all except top-left -# ▛ = all except bottom-right ▜ = all except bottom-left -# █ = full block (space) = empty -# -# Limitation: Only 2 colors per cell (foreground + background) - -clear -echo "" -echo " ╔═══════════════════════════════════════════════════════════════════════════╗" -echo " ║ REPTILE LORD - QUADRANT BLOCKS (2×2 subpixels/cell) ║" -echo " ╚═══════════════════════════════════════════════════════════════════════════╝" -echo "" - -# Color helper -c() { - echo -en "\033[38;2;$1;$2;$3m\033[48;2;$4;$5;$6m" -} -X="\033[0m" - -# Palette -BG="30 25 40" # Background -S1="0 100 70" # Dark scales -S2="0 140 90" # Mid scales -S3="0 180 110" # Light scales -U1="170 150 90" # Underbelly dark -U2="190 170 110" # Underbelly light -EY="255 200 0" # Eye -CL="50 40 35" # Claw -HR="70 60 50" # Horn - -echo " ┌───────────────────────────────────────────────────────────────────────────┐" -echo " │ FACING FORWARD (Idle) ATTACK FRAME WALKING FRAME │" -echo " └───────────────────────────────────────────────────────────────────────────┘" -echo "" - -# Sprite: 8 cells wide × 10 cells tall = 16×20 subpixels -# Building row by row (each cell is 2×2) - -# --- ROW 1: Horns and top of head --- -echo -en " " -# IDLE -echo -en "$(c $BG $BG) $(c $HR $BG)▖$(c $S1 $BG)▄▄$(c $HR $BG)▗$(c $BG $BG) " -echo -en " " -# ATTACK - horns more prominent -echo -en "$(c $HR $BG)▗$(c $HR $BG)▖$(c $S1 $BG)▄▄$(c $HR $BG)▗$(c $HR $BG)▖$(c $BG $BG) " -echo -en " " -# WALK -echo -en "$(c $BG $BG) $(c $HR $BG)▖$(c $S1 $BG)▄▄$(c $HR $BG)▗$(c $BG $BG) " -echo -e "${X}" - -# --- ROW 2: Upper head with eyes --- -echo -en " " -# IDLE -echo -en "$(c $S2 $S1)▙$(c $S1 $S1)█$(c $EY $S1)▐$(c $S1 $S1)█$(c $EY $S1)▌$(c $S1 $S1)█$(c $S2 $S1)▟$(c $BG $BG) " -echo -en " " -# ATTACK - angry eyes -echo -en "$(c $S2 $S1)▙$(c $S1 $S1)█$(c $EY $S1)▄$(c $S1 $S1)█$(c $EY $S1)▄$(c $S1 $S1)█$(c $S2 $S1)▟$(c $BG $BG) " -echo -en " " -# WALK -echo -en "$(c $S2 $S1)▙$(c $S1 $S1)█$(c $EY $S1)▐$(c $S1 $S1)█$(c $EY $S1)▌$(c $S1 $S1)█$(c $S2 $S1)▟$(c $BG $BG) " -echo -e "${X}" - -# --- ROW 3: Snout/muzzle --- -echo -en " " -# IDLE -echo -en "$(c $S1 $S2)▜$(c $S2 $S2)█$(c $U1 $S2)▄▄$(c $S2 $S2)█$(c $S1 $S2)▛$(c $BG $BG) " -echo -en " " -# ATTACK - open mouth -echo -en "$(c $S1 $S2)▜$(c $S2 $S2)█$(c $U1 $S2)▀▀$(c $S2 $S2)█$(c $S1 $S2)▛$(c $BG $BG) " -echo -en " " -# WALK -echo -en "$(c $S1 $S2)▜$(c $S2 $S2)█$(c $U1 $S2)▄▄$(c $S2 $S2)█$(c $S1 $S2)▛$(c $BG $BG) " -echo -e "${X}" - -# --- ROW 4: Neck --- -echo -en " " -# IDLE -echo -en "$(c $BG $BG) $(c $S1 $S2)▜$(c $U1 $U1)██$(c $S1 $S2)▛$(c $BG $BG) " -echo -en " " -# ATTACK -echo -en "$(c $BG $BG) $(c $S1 $S2)▜$(c $U1 $U1)██$(c $S1 $S2)▛$(c $BG $BG) " -echo -en " " -# WALK -echo -en "$(c $BG $BG) $(c $S1 $S2)▜$(c $U1 $U1)██$(c $S1 $S2)▛$(c $BG $BG) " -echo -e "${X}" - -# --- ROW 5: Shoulders/arms --- -echo -en " " -# IDLE - arms down -echo -en "$(c $CL $BG)▗$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)█$(c $S2 $S2)█$(c $S1 $S1)█$(c $CL $BG)▖$(c $BG $BG) " -echo -en " " -# ATTACK - arms raised -echo -en "$(c $CL $S1)▗$(c $S1 $BG)▘$(c $S2 $S2)█$(c $U1 $U1)█$(c $S2 $S2)█$(c $S1 $BG)▝$(c $CL $S1)▖$(c $BG $BG) " -echo -en " " -# WALK - one arm forward -echo -en "$(c $S1 $BG)▗$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)█$(c $S2 $S2)█$(c $S1 $S1)█$(c $CL $BG)▖$(c $BG $BG) " -echo -e "${X}" - -# --- ROW 6: Torso --- -echo -en " " -# IDLE -echo -en "$(c $CL $CL)█$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)█$(c $S2 $S2)█$(c $S1 $S1)█$(c $CL $CL)█$(c $BG $BG) " -echo -en " " -# ATTACK -echo -en "$(c $CL $CL)█$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)█$(c $S2 $S2)█$(c $S1 $S1)█$(c $CL $CL)█$(c $BG $BG) " -echo -en " " -# WALK -echo -en "$(c $CL $BG)▝$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)█$(c $S2 $S2)█$(c $S1 $S1)█$(c $CL $CL)█$(c $BG $BG) " -echo -e "${X}" - -# --- ROW 7: Lower torso/hips --- -echo -en " " -# IDLE -echo -en "$(c $BG $CL)▀$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)█$(c $S2 $S2)█$(c $S1 $S1)█$(c $BG $CL)▀$(c $BG $BG) " -echo -en " " -# ATTACK -echo -en "$(c $BG $CL)▀$(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)█$(c $S2 $S2)█$(c $S1 $S1)█$(c $BG $CL)▀$(c $BG $BG) " -echo -en " " -# WALK -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S2 $S2)█$(c $U1 $U1)█$(c $S2 $S2)█$(c $S1 $S1)█$(c $BG $CL)▀$(c $BG $BG) " -echo -e "${X}" - -# --- ROW 8: Upper legs --- -echo -en " " -# IDLE -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $BG)▘$(c $BG $BG) $(c $S1 $BG)▝$(c $S1 $S1)█$(c $BG $BG) " -echo -en " " -# ATTACK - wide stance -echo -en "$(c $S1 $BG)▗$(c $S1 $S1)█$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $BG)▖$(c $BG $BG) " -echo -en " " -# WALK - mid stride -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $BG)▝$(c $BG $BG) $(c $S1 $BG)▘$(c $S1 $S1)█$(c $BG $BG) " -echo -e "${X}" - -# --- ROW 9: Lower legs --- -echo -en " " -# IDLE -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) " -echo -en " " -# ATTACK -echo -en "$(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $S1)█$(c $BG $BG) " -echo -en " " -# WALK -echo -en "$(c $BG $BG) $(c $S1 $S1)█$(c $S1 $BG)▘$(c $BG $BG) $(c $BG $BG) $(c $S1 $BG)▝$(c $S1 $S1)█$(c $BG $BG) " -echo -e "${X}" - -# --- ROW 10: Feet with claws --- -echo -en " " -# IDLE -echo -en "$(c $CL $BG)▖$(c $S1 $S1)█$(c $CL $BG)▗$(c $BG $BG) $(c $CL $BG)▖$(c $S1 $S1)█$(c $CL $BG)▗$(c $BG $BG) " -echo -en " " -# ATTACK -echo -en "$(c $CL $S1)▙$(c $S1 $S1)█$(c $CL $BG)▗$(c $BG $BG) $(c $CL $BG)▖$(c $S1 $S1)█$(c $CL $S1)▟$(c $BG $BG) " -echo -en " " -# WALK -echo -en "$(c $CL $BG)▖$(c $S1 $S1)█$(c $CL $BG)▗$(c $BG $BG) $(c $BG $BG) $(c $CL $BG)▖$(c $S1 $S1)█$(c $CL $BG)▗" -echo -e "${X}" - -echo "" -echo " ┌───────────────────────────────────────────────────────────────────────────┐" -echo " │ QUADRANT BLOCK REFERENCE │" -echo " ├───────────────────────────────────────────────────────────────────────────┤" -echo " │ ▘ top-left ▝ top-right ▖ bottom-left ▗ bottom-right │" -echo " │ ▌ left-half ▐ right-half ▀ top-half ▄ bottom-half │" -echo " │ ▛ no-BR ▜ no-BL ▙ no-TR ▟ no-TL │" -echo " │ █ full (space) empty │" -echo " └───────────────────────────────────────────────────────────────────────────┘" -echo "" -echo " Resolution: 16×20 subpixels per sprite (8 cells × 10 rows, 2×2 per cell)" -echo " Limitation: Only 2 colors per cell (foreground + background)" -echo "" diff --git a/reptile3_braille.sh b/reptile3_braille.sh deleted file mode 100755 index 4dda1ab..0000000 --- a/reptile3_braille.sh +++ /dev/null @@ -1,280 +0,0 @@ -#!/bin/bash -# Reptile Lord - Method 3: Braille Characters (Highest Resolution) -# Each cell = 2×4 dots (8 subpixels per cell!) -# -# Braille dot numbering: -# 1 4 -# 2 5 -# 3 6 -# 7 8 -# -# Character = U+2800 + sum of dot values -# dot1=1, dot2=2, dot3=4, dot4=8, dot5=16, dot6=32, dot7=64, dot8=128 -# -# Limitation: Single color per character (foreground only, no per-dot colors) -# Best for: Silhouettes, outlines, high-detail monochrome sprites - -clear -echo "" -echo " ╔═══════════════════════════════════════════════════════════════════════════╗" -echo " ║ REPTILE LORD - BRAILLE METHOD (2×4 dots/cell = 8 subpixels) ║" -echo " ╚═══════════════════════════════════════════════════════════════════════════╝" -echo "" - -# Color function (foreground only for braille) -fg() { - echo -en "\033[38;2;$1;$2;$3m" -} -X="\033[0m" - -# Common braille characters reference: -# ⣿ = full (255) ⠀ = empty (0) -# ⡇ = left col (71) ⢸ = right col (184) -# ⠉ = top row (9) ⣀ = bottom row (192) -# ⠛ = top 2 rows (27) ⣤ = bottom 2 rows (228) -# ⡿ = all but top-right (127) ⣾ = all but top-left (254) -# ⣷ = all but bottom-right (247) ⣯ = all but bottom-left (239) - -echo " ┌─────────────────────────────────────────────────────────────────────────┐" -echo " │ MONOCHROME SILHOUETTES - Maximum Detail │" -echo " └─────────────────────────────────────────────────────────────────────────┘" -echo "" - -# Green reptile lord -G="0 200 100" - -echo -en " " -echo -en "$(fg $G)" -# IDLE POSE - 10 cells wide x 8 cells tall = 20×32 "dots" -echo " IDLE ATTACK WALK LEFT WALK RIGHT" -echo "" - -# Row 1: Horns -echo -en " $(fg $G)" -echo -en " ⢀⣴⣾⣷⣦⡀ " -echo -en " " -echo -en "⢀⣴⣾⣿⣷⣦⡀ " -echo -en " " -echo -en " ⢀⣴⣾⣷⣦⡀ " -echo -en " " -echo -en " ⢀⣴⣾⣷⣦⡀ " -echo -e "${X}" - -# Row 2: Upper head -echo -en " $(fg $G)" -echo -en " ⣼⣿⡟⠛⢻⣿⣧ " -echo -en " " -echo -en "⣼⣿⡟⠿⠿⢻⣿⣧ " -echo -en " " -echo -en " ⣼⣿⡟⠛⢻⣿⣧ " -echo -en " " -echo -en " ⣼⣿⡟⠛⢻⣿⣧ " -echo -e "${X}" - -# Row 3: Eyes and snout -echo -en " $(fg $G)" -echo -en " ⣿⣿⣿⣶⣶⣿⣿⣿ " -echo -en " " -echo -en "⣿⣿⣿⣭⣭⣿⣿⣿ " -echo -en " " -echo -en " ⣿⣿⣿⣶⣶⣿⣿⣿ " -echo -en " " -echo -en " ⣿⣿⣿⣶⣶⣿⣿⣿ " -echo -e "${X}" - -# Row 4: Lower head/jaw -echo -en " $(fg $G)" -echo -en " ⠹⣿⣿⣿⣿⠏ " -echo -en " " -echo -en " ⠹⣿⣿⣿⣿⣿⠏ " -echo -en " " -echo -en " ⠹⣿⣿⣿⣿⠏ " -echo -en " " -echo -en " ⠹⣿⣿⣿⣿⠏ " -echo -e "${X}" - -# Row 5: Neck/shoulders -echo -en " $(fg $G)" -echo -en " ⣿⣿⣿⣿⣿ " -echo -en " " -echo -en " ⢸⣿⣿⣿⣿⡇ " -echo -en " " -echo -en " ⣿⣿⣿⣿⣿ " -echo -en " " -echo -en " ⣿⣿⣿⣿⣿ " -echo -e "${X}" - -# Row 6: Arms/torso -echo -en " $(fg $G)" -echo -en " ⣼⣿⣿⣿⣿⣿⣿⣧ " -echo -en " " -echo -en "⣿⡿⣿⣿⣿⣿⣿⢿⣿" -echo -en " " -echo -en "⣀⣿⣿⣿⣿⣿⣿⣿ " -echo -en " " -echo -en " ⣿⣿⣿⣿⣿⣿⣿⣀" -echo -e "${X}" - -# Row 7: Lower torso -echo -en " $(fg $G)" -echo -en " ⠸⣿⣿⣿⣿⣿⣿⠇ " -echo -en " " -echo -en "⠈⠃⣿⣿⣿⣿⣿⠘⠁" -echo -en " " -echo -en " ⣿⣿⣿⣿⣿⣿⣿ " -echo -en " " -echo -en " ⣿⣿⣿⣿⣿⣿⣿ " -echo -e "${X}" - -# Row 8: Hips -echo -en " $(fg $G)" -echo -en " ⢸⣿⣿⣿⣿⡇ " -echo -en " " -echo -en " ⣿⣿⣿⣿⣿⣿ " -echo -en " " -echo -en " ⠸⣿⣿⣿⣿⠇ " -echo -en " " -echo -en " ⠸⣿⣿⣿⣿⠇ " -echo -e "${X}" - -# Row 9: Upper legs -echo -en " $(fg $G)" -echo -en " ⢸⣿⠁⠈⣿⡇ " -echo -en " " -echo -en " ⣾⣿ ⣿⣷ " -echo -en " " -echo -en " ⣿⣿ ⣿⣷ " -echo -en " " -echo -en " ⣾⣿ ⣿⣿ " -echo -e "${X}" - -# Row 10: Lower legs -echo -en " $(fg $G)" -echo -en " ⢸⣿ ⣿⡇ " -echo -en " " -echo -en "⣸⣿⠇ ⠸⣿⣇" -echo -en " " -echo -en " ⣿⡇ ⣿⡇ " -echo -en " " -echo -en " ⢸⣿ ⢸⣿ " -echo -e "${X}" - -# Row 11: Feet -echo -en " $(fg $G)" -echo -en " ⣿⣿⡄⢠⣿⣿ " -echo -en " " -echo -en "⣿⣿⠃ ⠘⣿⣿" -echo -en " " -echo -en " ⣼⣿⡄ ⢠⣿⣧ " -echo -en " " -echo -en " ⣼⣿⡄ ⢠⣿⣧ " -echo -e "${X}" - -# Row 12: Claws -echo -en " $(fg $G)" -echo -en " ⠛⠛ ⠛⠛ " -echo -en " " -echo -en "⠛⠛ ⠛⠛" -echo -en " " -echo -en " ⠛⠃ ⠘⠛ " -echo -en " " -echo -en " ⠛⠃ ⠘⠛ " -echo -e "${X}" - -echo "" -echo "" - -# Multi-colored version using background + foreground trick -echo " ┌─────────────────────────────────────────────────────────────────────────┐" -echo " │ COLORED VERSION - Using colored backgrounds behind braille │" -echo " └─────────────────────────────────────────────────────────────────────────┘" -echo "" - -# For colored braille, we use: -# - Background color for the "off" dots -# - Foreground color for the "on" dots -# This gives us 2-color braille - -cf() { - echo -en "\033[38;2;$1;$2;$3m\033[48;2;$4;$5;$6m" -} - -# Colors -SCALE="0 180 100" # Green scales (foreground/dots) -BG="20 15 30" # Dark purple background -EYE="255 220 0" # Yellow eyes -BELLY="200 180 120" # Tan underbelly - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⢀⣴⣾⣷⣦⡀ " -echo -e "${X}" - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⣼⣿" -echo -en "$(cf $EYE $BG)⠿⠿" -echo -en "$(cf $SCALE $BG)⣿⣧ " -echo -e "${X}" - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⣿⣿" -echo -en "$(cf $BELLY $BG)⣶⣶" -echo -en "$(cf $SCALE $BG)⣿⣿ " -echo -e "${X}" - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⠹⣿⣿⣿⣿⠏ " -echo -e "${X}" - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⣿" -echo -en "$(cf $BELLY $BG)⣿⣿" -echo -en "$(cf $SCALE $BG)⣿ " -echo -e "${X}" - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⣼⣿" -echo -en "$(cf $BELLY $BG)⣿⣿" -echo -en "$(cf $SCALE $BG)⣿⣧ " -echo -e "${X}" - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⠸⣿" -echo -en "$(cf $BELLY $BG)⣿⣿" -echo -en "$(cf $SCALE $BG)⣿⠇ " -echo -e "${X}" - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⢸⣿ ⣿⡇ " -echo -e "${X}" - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⣿⣿ ⣿⣿ " -echo -e "${X}" - -echo -en " " -echo -en "$(cf $SCALE $BG)" -echo -en " ⠛⠛ ⠛⠛ " -echo -e "${X}" - -echo "" -echo " ┌─────────────────────────────────────────────────────────────────────────┐" -echo " │ BRAILLE DOT PATTERN │" -echo " ├─────────────────────────────────────────────────────────────────────────┤" -echo " │ 1 4 Values: 1=1, 2=2, 3=4, 4=8, 5=16, 6=32, 7=64, 8=128 │" -echo " │ 2 5 Character = U+2800 + sum(dot values) │" -echo " │ 3 6 Example: ⣿ = all dots = 1+2+4+8+16+32+64+128 = 255 = U+28FF │" -echo " │ 7 8 │" -echo " └─────────────────────────────────────────────────────────────────────────┘" -echo "" -echo " Resolution: 20×32 dots per sprite (10 cells × 8 rows, 2×4 dots per cell)" -echo " Best for: High-detail silhouettes, outlines, retro terminal aesthetics" -echo "" diff --git a/robot.sh b/robot.sh deleted file mode 100755 index 922c23a..0000000 --- a/robot.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash - -printf "\n\033[1m WALKING DOWN\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;70;70;80m▄███▄\033[0m \033[38;2;70;70;80m▄███▄\033[0m \033[38;2;70;70;80m▄███▄\033[0m \033[38;2;70;70;80m▄███▄\033[0m\n" -printf " \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m\n" -printf " \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m\n" -printf " \033[38;2;50;50;60m█████\033[0m \033[38;2;50;50;60m█████\033[0m \033[38;2;50;50;60m█████\033[0m \033[38;2;50;50;60m█████\033[0m\n" -printf " \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m\n" -printf " \033[38;2;70;70;80m▄██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██▄\033[0m \033[38;2;70;70;80m▄██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██▄\033[0m \033[38;2;70;70;80m▄██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██▄\033[0m \033[38;2;70;70;80m▄██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██▄\033[0m\n" -printf " \033[38;2;70;70;80m███\033[38;2;255;50;50m███\033[38;2;70;70;80m███\033[0m \033[38;2;70;70;80m███\033[38;2;255;50;50m███\033[38;2;70;70;80m███\033[0m \033[38;2;70;70;80m███\033[38;2;255;50;50m███\033[38;2;70;70;80m███\033[0m \033[38;2;70;70;80m███\033[38;2;255;50;50m███\033[38;2;70;70;80m███\033[0m\n" -printf " \033[38;2;70;70;80m██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██\033[0m\n" -printf " \033[38;2;50;50;60m█\033[38;2;255;50;50m███\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m███\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m███\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m███\033[38;2;50;50;60m█\033[0m\n" -printf " \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;70;70;80m██\033[0m\n" -printf " \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m██\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m██\033[0m\n" - -printf "\n\033[1m WALKING UP\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;70;70;80m▄███▄\033[0m \033[38;2;70;70;80m▄███▄\033[0m \033[38;2;70;70;80m▄███▄\033[0m \033[38;2;70;70;80m▄███▄\033[0m\n" -printf " \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m\n" -printf " \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m\n" -printf " \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m \033[38;2;70;70;80m███████\033[0m\n" -printf " \033[38;2;50;50;60m█████\033[0m \033[38;2;50;50;60m█████\033[0m \033[38;2;50;50;60m█████\033[0m \033[38;2;50;50;60m█████\033[0m\n" -printf " \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m\n" -printf " \033[38;2;70;70;80m▄██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██▄\033[0m \033[38;2;70;70;80m▄██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██▄\033[0m \033[38;2;70;70;80m▄██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██▄\033[0m \033[38;2;70;70;80m▄██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██▄\033[0m\n" -printf " \033[38;2;70;70;80m█████████\033[0m \033[38;2;70;70;80m█████████\033[0m \033[38;2;70;70;80m█████████\033[0m \033[38;2;70;70;80m█████████\033[0m\n" -printf " \033[38;2;70;70;80m██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m██\033[0m\n" -printf " \033[38;2;50;50;60m█\033[38;2;255;50;50m███\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m███\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m███\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m███\033[38;2;50;50;60m█\033[0m\n" -printf " \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[38;2;70;70;80m██\033[0m\n" -printf " \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m██\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m██\033[0m\n" - -printf "\n\033[1m WALKING LEFT\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;70;70;80m▄██▄\033[0m \033[38;2;70;70;80m▄██▄\033[0m \033[38;2;70;70;80m▄██▄\033[0m \033[38;2;70;70;80m▄██▄\033[0m\n" -printf " \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m\n" -printf " \033[38;2;255;50;50m██\033[38;2;70;70;80m███\033[0m \033[38;2;255;50;50m██\033[38;2;70;70;80m███\033[0m \033[38;2;255;50;50m██\033[38;2;70;70;80m███\033[0m \033[38;2;255;50;50m██\033[38;2;70;70;80m███\033[0m\n" -printf " \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m\n" -printf " \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m\n" -printf " \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;70;70;80m▄██\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m▄██\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m▄██\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m▄██\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;70;70;80m███\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m███\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m███\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m███\033[38;2;255;50;50m██\033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;50;50;60m█\033[38;2;255;50;50m██\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m██\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m██\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m██\033[38;2;50;50;60m█\033[0m\n" -printf " \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m██\033[0m\n" -printf " \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m██\033[0m \033[38;2;50;50;60m██\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m██\033[0m \033[38;2;50;50;60m██\033[0m \033[38;2;50;50;60m███\033[0m\n" - -printf "\n\033[1m WALKING RIGHT\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;70;70;80m▄██▄\033[0m \033[38;2;70;70;80m▄██▄\033[0m \033[38;2;70;70;80m▄██▄\033[0m \033[38;2;70;70;80m▄██▄\033[0m\n" -printf " \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m\n" -printf " \033[38;2;70;70;80m███\033[38;2;255;50;50m██\033[0m \033[38;2;70;70;80m███\033[38;2;255;50;50m██\033[0m \033[38;2;70;70;80m███\033[38;2;255;50;50m██\033[0m \033[38;2;70;70;80m███\033[38;2;255;50;50m██\033[0m\n" -printf " \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m \033[38;2;70;70;80m█████\033[0m\n" -printf " \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m\n" -printf " \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m\n" -printf " \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m██▄\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m██▄\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m██▄\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m██▄\033[0m\n" -printf " \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m███\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m███\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m███\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m██\033[38;2;70;70;80m███\033[0m\n" -printf " \033[38;2;50;50;60m█\033[38;2;255;50;50m██\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m██\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m██\033[38;2;50;50;60m█\033[0m \033[38;2;50;50;60m█\033[38;2;255;50;50m██\033[38;2;50;50;60m█\033[0m\n" -printf " \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m█\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m██\033[0m \033[38;2;70;70;80m█\033[0m\n" -printf " \033[38;2;50;50;60m██\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m██\033[0m \033[38;2;50;50;60m██\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m███\033[0m \033[38;2;50;50;60m██\033[0m\n" - -printf "\n" diff --git a/robot2.sh b/robot2.sh deleted file mode 100755 index 46fd926..0000000 --- a/robot2.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/bash - -# Dark Android Sprite Sheet - Full tile pixels with shading -# Colors: Body=70,70,80 Shadow=45,45,55 Highlight=95,95,105 Red=255,50,50 DarkRed=180,30,30 - -echo "" -echo -e "\033[1m WALKING DOWN\033[0m" -echo "" -echo " Frame 1 Frame 2 Frame 3 Frame 4" -echo "" - -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m\n" - -echo "" -echo -e "\033[1m WALKING UP\033[0m" -echo "" -echo " Frame 1 Frame 2 Frame 3 Frame 4" -echo "" - -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m\n" - -echo "" -echo -e "\033[1m WALKING LEFT\033[0m" -echo "" -echo " Frame 1 Frame 2 Frame 3 Frame 4" -echo "" - -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;180;30;30m \033[48;2;70;70;80m \033[0m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[0m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[0m \033[48;2;180;30;30m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m\n" - -echo "" -echo -e "\033[1m WALKING RIGHT\033[0m" -echo "" -echo " Frame 1 Frame 2 Frame 3 Frame 4" -echo "" - -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;95;95;105m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;180;30;30m \033[0m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[0m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[0m \033[48;2;70;70;80m \033[48;2;180;30;30m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[48;2;255;50;50m \033[48;2;45;45;55m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;45;45;55m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[48;2;255;50;50m \033[0m \033[48;2;255;50;50m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m \033[48;2;70;70;80m \033[0m\n" -printf " \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m \033[48;2;45;45;55m \033[0m\n" - -echo "" diff --git a/robot3.sh b/robot3.sh deleted file mode 100755 index 725a78f..0000000 --- a/robot3.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/bash - -# Dark Android Sprite - Polished version with better proportions -# Colors (background mode for solid pixels) -B="\033[48;2;70;70;80m" # Body -D="\033[48;2;45;45;55m" # Dark/Shadow -H="\033[48;2;95;95;105m" # Highlight -R="\033[48;2;255;50;50m" # Red glow -r="\033[48;2;180;30;30m" # Dark red -X="\033[0m" # Reset -P=" " # Pixel (two spaces) - -clear -echo "" -echo -e "\033[1m WALKING DOWN\033[0m" -echo "" -echo " Frame 1 Frame 2 Frame 3 Frame 4" -echo "" - -# HEAD - all frames same -printf " ${D}${P}${B}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${D}${P}${X}\n" -printf " ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X}\n" -printf " ${B}${P}${H}${P}${B}${P}${P}${P}${H}${P}${B}${P}${X} ${B}${P}${H}${P}${B}${P}${P}${P}${H}${P}${B}${P}${X} ${B}${P}${H}${P}${B}${P}${P}${P}${H}${P}${B}${P}${X} ${B}${P}${H}${P}${B}${P}${P}${P}${H}${P}${B}${P}${X}\n" -printf " ${B}${P}${R}${P}${P}${B}${P}${P}${P}${R}${P}${P}${B}${P}${X} ${B}${P}${R}${P}${P}${B}${P}${P}${P}${R}${P}${P}${B}${P}${X} ${B}${P}${R}${P}${P}${B}${P}${P}${P}${R}${P}${P}${B}${P}${X} ${B}${P}${R}${P}${P}${B}${P}${P}${P}${R}${P}${P}${B}${P}${X}\n" -printf " ${B}${P}${r}${P}${P}${B}${P}${P}${P}${r}${P}${P}${B}${P}${X} ${B}${P}${r}${P}${P}${B}${P}${P}${P}${r}${P}${P}${B}${P}${X} ${B}${P}${r}${P}${P}${B}${P}${P}${P}${r}${P}${P}${B}${P}${X} ${B}${P}${r}${P}${P}${B}${P}${P}${P}${r}${P}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X}\n" -printf " ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X}\n" -# NECK with red accent -printf " ${R}${P}${D}${P}${P}${P}${R}${P}${X} ${R}${P}${D}${P}${P}${P}${R}${P}${X} ${R}${P}${D}${P}${P}${P}${R}${P}${X} ${R}${P}${D}${P}${P}${P}${R}${P}${X}\n" -# TORSO -printf " ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X} ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X} ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X} ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X}\n" -printf " ${B}${P}${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${B}${P}${X} ${B}${P}${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${B}${P}${X} ${B}${P}${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${B}${P}${X} ${B}${P}${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${B}${P}${X}\n" -printf " ${B}${P}${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${B}${P}${X} ${B}${P}${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${B}${P}${X} ${B}${P}${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${B}${P}${X} ${B}${P}${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${B}${P}${X}\n" -printf " ${B}${P}${R}${P}${B}${P}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${B}${P}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${B}${P}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${B}${P}${P}${R}${P}${B}${P}${X}\n" -printf " ${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${X} ${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${X} ${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${X} ${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${X}\n" -printf " ${B}${P}${D}${P}${P}${P}${B}${P}${X} ${B}${P}${D}${P}${P}${P}${B}${P}${X} ${B}${P}${D}${P}${P}${P}${B}${P}${X} ${B}${P}${D}${P}${P}${P}${B}${P}${X}\n" -# LEGS - Frame 1: standing, Frame 2: step left, Frame 3: standing, Frame 4: step right -printf " ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X}${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${B}${P}${P}${X}\n" -printf " ${B}${P}${R}${P}${X} ${R}${P}${B}${P}${X} ${B}${P}${R}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${X} ${R}${P}${B}${P}${X} ${B}${P}${R}${P}${R}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${X} ${B}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${X} ${B}${P}${X}\n" -printf " ${D}${P}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${X}\n" - -echo "" -echo -e "\033[1m WALKING UP\033[0m" -echo "" -echo " Frame 1 Frame 2 Frame 3 Frame 4" -echo "" - -# Back view - no face details visible -printf " ${D}${P}${B}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${D}${P}${X}\n" -printf " ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X}\n" -printf " ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${P}${D}${P}${X}\n" -printf " ${R}${P}${D}${P}${P}${P}${R}${P}${X} ${R}${P}${D}${P}${P}${P}${R}${P}${X} ${R}${P}${D}${P}${P}${P}${R}${P}${X} ${R}${P}${D}${P}${P}${P}${R}${P}${X}\n" -printf " ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X} ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X} ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X} ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${P}${B}${P}${X}\n" -printf " ${B}${P}${R}${P}${B}${P}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${B}${P}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${B}${P}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${B}${P}${P}${R}${P}${B}${P}${X}\n" -printf " ${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${X} ${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${X} ${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${X} ${D}${P}${R}${P}${B}${P}${P}${R}${P}${D}${P}${X}\n" -printf " ${B}${P}${D}${P}${P}${P}${B}${P}${X} ${B}${P}${D}${P}${P}${P}${B}${P}${X} ${B}${P}${D}${P}${P}${P}${B}${P}${X} ${B}${P}${D}${P}${P}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X}${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${B}${P}${P}${X}\n" -printf " ${B}${P}${R}${P}${X} ${R}${P}${B}${P}${X} ${B}${P}${R}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${X} ${R}${P}${B}${P}${X} ${B}${P}${R}${P}${R}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${X} ${B}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${X} ${B}${P}${X}\n" -printf " ${D}${P}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${X}\n" - -echo "" -echo -e "\033[1m WALKING LEFT\033[0m" -echo "" -echo " Frame 1 Frame 2 Frame 3 Frame 4" -echo "" - -# Side profile facing left - eye on left side -printf " ${D}${P}${B}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${D}${P}${X}\n" -printf " ${D}${P}${B}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${P}${D}${P}${X}\n" -printf " ${B}${P}${H}${P}${B}${P}${P}${P}${P}${X} ${B}${P}${H}${P}${B}${P}${P}${P}${P}${X} ${B}${P}${H}${P}${B}${P}${P}${P}${P}${X} ${B}${P}${H}${P}${B}${P}${P}${P}${P}${X}\n" -printf " ${R}${P}${P}${B}${P}${P}${P}${P}${X} ${R}${P}${P}${B}${P}${P}${P}${P}${X} ${R}${P}${P}${B}${P}${P}${P}${P}${X} ${R}${P}${P}${B}${P}${P}${P}${P}${X}\n" -printf " ${r}${P}${P}${B}${P}${P}${P}${P}${X} ${r}${P}${P}${B}${P}${P}${P}${P}${X} ${r}${P}${P}${B}${P}${P}${P}${P}${X} ${r}${P}${P}${B}${P}${P}${P}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${P}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${X}\n" -printf " ${D}${P}${B}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${D}${P}${X} ${D}${P}${B}${P}${P}${P}${D}${P}${X}\n" -printf " ${R}${P}${D}${P}${P}${R}${P}${X} ${R}${P}${D}${P}${P}${R}${P}${X} ${R}${P}${D}${P}${P}${R}${P}${X} ${R}${P}${D}${P}${P}${R}${P}${X}\n" -printf " ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${X} ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${X} ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${X} ${B}${P}${P}${R}${P}${B}${P}${P}${P}${P}${X}\n" -printf " ${B}${P}${D}${P}${R}${P}${B}${P}${P}${P}${X} ${B}${P}${D}${P}${R}${P}${B}${P}${P}${P}${X} ${B}${P}${D}${P}${R}${P}${B}${P}${P}${P}${X} ${B}${P}${D}${P}${R}${P}${B}${P}${P}${P}${X}\n" -printf " ${B}${P}${R}${P}${B}${P}${P}${P}${X} ${B}${P}${R}${P}${B}${P}${P}${P}${X} ${B}${P}${R}${P}${B}${P}${P}${P}${X} ${B}${P}${R}${P}${B}${P}${P}${P}${X}\n" -printf " ${D}${P}${R}${P}${D}${P}${P}${P}${X} ${D}${P}${R}${P}${D}${P}${P}${P}${X} ${D}${P}${R}${P}${D}${P}${P}${P}${X} ${D}${P}${R}${P}${D}${P}${P}${P}${X}\n" -printf " ${B}${P}${D}${P}${P}${X} ${B}${P}${D}${P}${P}${X} ${B}${P}${D}${P}${P}${X} ${B}${P}${D}${P}${P}${X}\n" -# Legs animated - walking left -printf " ${B}${P}${P}${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X}\n" -printf " ${B}${P}${R}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${X} ${R}${P}${B}${P}${X} ${B}${P}${R}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${X} ${R}${P}${B}${P}${X}\n" -printf " ${B}${P}${X} ${B}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${X} ${B}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X}\n" -printf " ${D}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${P}${X}\n" - -echo "" -echo -e "\033[1m WALKING RIGHT\033[0m" -echo "" -echo " Frame 1 Frame 2 Frame 3 Frame 4" -echo "" - -# Side profile facing right - eye on right side -printf " ${D}${P}${P}${B}${P}${D}${P}${X} ${D}${P}${P}${B}${P}${D}${P}${X} ${D}${P}${P}${B}${P}${D}${P}${X} ${D}${P}${P}${B}${P}${D}${P}${X}\n" -printf " ${D}${P}${P}${P}${P}${B}${P}${D}${P}${X} ${D}${P}${P}${P}${P}${B}${P}${D}${P}${X} ${D}${P}${P}${P}${P}${B}${P}${D}${P}${X} ${D}${P}${P}${P}${P}${B}${P}${D}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${H}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${H}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${H}${P}${B}${P}${X} ${B}${P}${P}${P}${P}${H}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${R}${P}${X} ${B}${P}${P}${P}${P}${P}${R}${P}${X} ${B}${P}${P}${P}${P}${P}${R}${P}${X} ${B}${P}${P}${P}${P}${P}${R}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${r}${P}${X} ${B}${P}${P}${P}${P}${P}${r}${P}${X} ${B}${P}${P}${P}${P}${P}${r}${P}${X} ${B}${P}${P}${P}${P}${P}${r}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${P}${P}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${X} ${B}${P}${P}${P}${P}${P}${P}${P}${X}\n" -printf " ${D}${P}${P}${P}${B}${P}${D}${P}${X} ${D}${P}${P}${P}${B}${P}${D}${P}${X} ${D}${P}${P}${P}${B}${P}${D}${P}${X} ${D}${P}${P}${P}${B}${P}${D}${P}${X}\n" -printf " ${R}${P}${P}${D}${P}${R}${P}${X} ${R}${P}${P}${D}${P}${R}${P}${X} ${R}${P}${P}${D}${P}${R}${P}${X} ${R}${P}${P}${D}${P}${R}${P}${X}\n" -printf " ${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X} ${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X} ${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X} ${B}${P}${P}${P}${P}${R}${P}${B}${P}${P}${X}\n" -printf " ${B}${P}${P}${P}${R}${P}${D}${P}${B}${P}${X} ${B}${P}${P}${P}${R}${P}${D}${P}${B}${P}${X} ${B}${P}${P}${P}${R}${P}${D}${P}${B}${P}${X} ${B}${P}${P}${P}${R}${P}${D}${P}${B}${P}${X}\n" -printf " ${B}${P}${P}${P}${R}${P}${B}${P}${X} ${B}${P}${P}${P}${R}${P}${B}${P}${X} ${B}${P}${P}${P}${R}${P}${B}${P}${X} ${B}${P}${P}${P}${R}${P}${B}${P}${X}\n" -printf " ${D}${P}${P}${P}${R}${P}${D}${P}${X} ${D}${P}${P}${P}${R}${P}${D}${P}${X} ${D}${P}${P}${P}${R}${P}${D}${P}${X} ${D}${P}${P}${P}${R}${P}${D}${P}${X}\n" -printf " ${B}${P}${D}${P}${B}${P}${X} ${B}${P}${D}${P}${B}${P}${X} ${B}${P}${D}${P}${B}${P}${X} ${B}${P}${D}${P}${B}${P}${X}\n" -# Legs animated - walking right -printf " ${B}${P}${P}${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X}\n" -printf " ${B}${P}${R}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${X} ${R}${P}${B}${P}${X} ${B}${P}${R}${P}${R}${P}${B}${P}${X} ${B}${P}${R}${P}${X} ${R}${P}${B}${P}${X}\n" -printf " ${B}${P}${X} ${B}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X} ${B}${P}${X} ${B}${P}${X} ${B}${P}${P}${X} ${B}${P}${P}${X}\n" -printf " ${D}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${X} ${D}${P}${P}${P}${X} ${D}${P}${P}${P}${X}\n" - -echo "" diff --git a/sprite.sh b/sprite.sh deleted file mode 100755 index 6080622..0000000 --- a/sprite.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash - -printf "\n\033[1m WALKING DOWN\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;255;105;180m▄███▄\033[0m \033[38;2;255;105;180m▄███▄\033[0m \033[38;2;255;105;180m▄███▄\033[0m \033[38;2;255;105;180m▄███▄\033[0m\n" -printf " \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m\n" -printf " \033[38;2;255;105;180m█\033[38;2;255;206;180m█████\033[38;2;255;105;180m█\033[0m \033[38;2;255;105;180m█\033[38;2;255;206;180m█████\033[38;2;255;105;180m█\033[0m \033[38;2;255;105;180m█\033[38;2;255;206;180m█████\033[38;2;255;105;180m█\033[0m \033[38;2;255;105;180m█\033[38;2;255;206;180m█████\033[38;2;255;105;180m█\033[0m\n" -printf " \033[38;2;255;105;180m█\033[38;2;255;206;180m█\033[38;2;60;60;60m▀\033[38;2;255;206;180m█\033[38;2;60;60;60m▀\033[38;2;255;206;180m█\033[38;2;255;105;180m█\033[0m \033[38;2;255;105;180m█\033[38;2;255;206;180m█\033[38;2;60;60;60m▀\033[38;2;255;206;180m█\033[38;2;60;60;60m▀\033[38;2;255;206;180m█\033[38;2;255;105;180m█\033[0m \033[38;2;255;105;180m█\033[38;2;255;206;180m█\033[38;2;60;60;60m▀\033[38;2;255;206;180m█\033[38;2;60;60;60m▀\033[38;2;255;206;180m█\033[38;2;255;105;180m█\033[0m \033[38;2;255;105;180m█\033[38;2;255;206;180m█\033[38;2;60;60;60m▀\033[38;2;255;206;180m█\033[38;2;60;60;60m▀\033[38;2;255;206;180m█\033[38;2;255;105;180m█\033[0m\n" -printf " \033[38;2;255;206;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m█\033[0m\n" -printf " \033[38;2;255;206;180m▀\033[38;2;0;206;209m███\033[38;2;255;206;180m▀\033[0m \033[38;2;255;206;180m▀\033[38;2;0;206;209m███\033[38;2;255;206;180m▀\033[0m \033[38;2;255;206;180m▀\033[38;2;0;206;209m███\033[38;2;255;206;180m▀\033[0m \033[38;2;255;206;180m▀\033[38;2;0;206;209m███\033[38;2;255;206;180m▀\033[0m\n" -printf " \033[38;2;0;206;209m███████\033[0m \033[38;2;0;206;209m███████\033[0m \033[38;2;0;206;209m███████\033[0m \033[38;2;0;206;209m███████\033[0m\n" -printf " \033[38;2;255;215;0m▀▀▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀▀▀\033[0m\n" -printf " \033[38;2;199;21;133m▄█████▄\033[0m \033[38;2;199;21;133m▄█████▄\033[0m \033[38;2;199;21;133m▄█████▄\033[0m \033[38;2;199;21;133m▄█████▄\033[0m\n" -printf " \033[38;2;199;21;133m▀███▀\033[0m \033[38;2;199;21;133m▀███▀\033[0m \033[38;2;199;21;133m▀███▀\033[0m \033[38;2;199;21;133m▀███▀\033[0m\n" -printf " \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m\n" -printf " \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m██\033[0m\n" - -printf "\n\033[1m WALKING UP\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;255;105;180m▄███▄\033[0m \033[38;2;255;105;180m▄███▄\033[0m \033[38;2;255;105;180m▄███▄\033[0m \033[38;2;255;105;180m▄███▄\033[0m\n" -printf " \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m\n" -printf " \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m\n" -printf " \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m \033[38;2;255;105;180m███████\033[0m\n" -printf " \033[38;2;255;105;180m█████\033[0m \033[38;2;255;105;180m█████\033[0m \033[38;2;255;105;180m█████\033[0m \033[38;2;255;105;180m█████\033[0m\n" -printf " \033[38;2;255;206;180m▀\033[38;2;0;206;209m███\033[38;2;255;206;180m▀\033[0m \033[38;2;255;206;180m▀\033[38;2;0;206;209m███\033[38;2;255;206;180m▀\033[0m \033[38;2;255;206;180m▀\033[38;2;0;206;209m███\033[38;2;255;206;180m▀\033[0m \033[38;2;255;206;180m▀\033[38;2;0;206;209m███\033[38;2;255;206;180m▀\033[0m\n" -printf " \033[38;2;0;206;209m███████\033[0m \033[38;2;0;206;209m███████\033[0m \033[38;2;0;206;209m███████\033[0m \033[38;2;0;206;209m███████\033[0m\n" -printf " \033[38;2;255;215;0m▀▀▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀▀▀\033[0m\n" -printf " \033[38;2;199;21;133m▄█████▄\033[0m \033[38;2;199;21;133m▄█████▄\033[0m \033[38;2;199;21;133m▄█████▄\033[0m \033[38;2;199;21;133m▄█████▄\033[0m\n" -printf " \033[38;2;199;21;133m▀███▀\033[0m \033[38;2;199;21;133m▀███▀\033[0m \033[38;2;199;21;133m▀███▀\033[0m \033[38;2;199;21;133m▀███▀\033[0m\n" -printf " \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m\n" -printf " \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m██\033[0m\n" - -printf "\n\033[1m WALKING LEFT\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;255;105;180m████▄\033[0m \033[38;2;255;105;180m████▄\033[0m \033[38;2;255;105;180m████▄\033[0m \033[38;2;255;105;180m████▄\033[0m\n" -printf " \033[38;2;255;105;180m██████▄\033[0m \033[38;2;255;105;180m██████▄\033[0m \033[38;2;255;105;180m██████▄\033[0m \033[38;2;255;105;180m██████▄\033[0m\n" -printf " \033[38;2;255;206;180m████\033[38;2;255;105;180m██▀\033[0m \033[38;2;255;206;180m████\033[38;2;255;105;180m██▀\033[0m \033[38;2;255;206;180m████\033[38;2;255;105;180m██▀\033[0m \033[38;2;255;206;180m████\033[38;2;255;105;180m██▀\033[0m\n" -printf " \033[38;2;60;60;60m▀\033[38;2;255;206;180m██\033[38;2;200;80;80m▄\033[38;2;255;105;180m█\033[0m \033[38;2;60;60;60m▀\033[38;2;255;206;180m██\033[38;2;200;80;80m▄\033[38;2;255;105;180m█\033[0m \033[38;2;60;60;60m▀\033[38;2;255;206;180m██\033[38;2;200;80;80m▄\033[38;2;255;105;180m█\033[0m \033[38;2;60;60;60m▀\033[38;2;255;206;180m██\033[38;2;200;80;80m▄\033[38;2;255;105;180m█\033[0m\n" -printf " \033[38;2;0;206;209m████\033[0m \033[38;2;0;206;209m████\033[0m \033[38;2;0;206;209m████\033[0m \033[38;2;0;206;209m████\033[0m\n" -printf " \033[38;2;0;206;209m█████\033[0m \033[38;2;0;206;209m█████\033[0m \033[38;2;0;206;209m█████\033[0m \033[38;2;0;206;209m█████\033[0m\n" -printf " \033[38;2;255;215;0m▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀\033[0m\n" -printf " \033[38;2;199;21;133m▄████\033[0m \033[38;2;199;21;133m▄████\033[0m \033[38;2;199;21;133m▄████\033[0m \033[38;2;199;21;133m▄████\033[0m\n" -printf " \033[38;2;199;21;133m▀██▀\033[0m \033[38;2;199;21;133m▀██▀\033[0m \033[38;2;199;21;133m▀██▀\033[0m \033[38;2;199;21;133m▀██▀\033[0m\n" -printf " \033[38;2;255;206;180m██\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m██\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m\n" -printf " \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m██\033[0m\n" - -printf "\n\033[1m WALKING RIGHT\033[0m\n\n" -printf " Frame 1 Frame 2 Frame 3 Frame 4\n\n" -printf " \033[38;2;255;105;180m▄████\033[0m \033[38;2;255;105;180m▄████\033[0m \033[38;2;255;105;180m▄████\033[0m \033[38;2;255;105;180m▄████\033[0m\n" -printf " \033[38;2;255;105;180m▄██████\033[0m \033[38;2;255;105;180m▄██████\033[0m \033[38;2;255;105;180m▄██████\033[0m \033[38;2;255;105;180m▄██████\033[0m\n" -printf " \033[38;2;255;105;180m▀██\033[38;2;255;206;180m████\033[0m \033[38;2;255;105;180m▀██\033[38;2;255;206;180m████\033[0m \033[38;2;255;105;180m▀██\033[38;2;255;206;180m████\033[0m \033[38;2;255;105;180m▀██\033[38;2;255;206;180m████\033[0m\n" -printf " \033[38;2;255;105;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m██\033[38;2;60;60;60m▀\033[0m \033[38;2;255;105;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m██\033[38;2;60;60;60m▀\033[0m \033[38;2;255;105;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m██\033[38;2;60;60;60m▀\033[0m \033[38;2;255;105;180m█\033[38;2;200;80;80m▄\033[38;2;255;206;180m██\033[38;2;60;60;60m▀\033[0m\n" -printf " \033[38;2;0;206;209m████\033[0m \033[38;2;0;206;209m████\033[0m \033[38;2;0;206;209m████\033[0m \033[38;2;0;206;209m████\033[0m\n" -printf " \033[38;2;0;206;209m█████\033[0m \033[38;2;0;206;209m█████\033[0m \033[38;2;0;206;209m█████\033[0m \033[38;2;0;206;209m█████\033[0m\n" -printf " \033[38;2;255;215;0m▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀\033[0m \033[38;2;255;215;0m▀▀▀▀▀\033[0m\n" -printf " \033[38;2;199;21;133m████▄\033[0m \033[38;2;199;21;133m████▄\033[0m \033[38;2;199;21;133m████▄\033[0m \033[38;2;199;21;133m████▄\033[0m\n" -printf " \033[38;2;199;21;133m▀██▀\033[0m \033[38;2;199;21;133m▀██▀\033[0m \033[38;2;199;21;133m▀██▀\033[0m \033[38;2;199;21;133m▀██▀\033[0m\n" -printf " \033[38;2;255;206;180m██\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m██\033[0m \033[38;2;255;206;180m█\033[0m \033[38;2;255;206;180m█\033[0m\n" -printf " \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m█\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m██\033[0m \033[38;2;255;50;50m█\033[0m\n" - -printf "\n"