{"id":15062954,"url":"https://github.com/grymmjack/godot-console","last_synced_at":"2026-02-12T18:31:35.739Z","repository":{"id":257185585,"uuid":"857508979","full_name":"grymmjack/godot-console","owner":"grymmjack","description":"Godot text mode console compatible with ANSI colors, iCE colors, and 8x16px DOS font for rendering ANSI art in Godot using tilemaps!","archived":false,"fork":false,"pushed_at":"2024-09-28T14:16:57.000Z","size":4927,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-05T02:48:16.249Z","etag":null,"topics":["ansi","ansi-art","ansiart","ascii-art","bbs","console","cp437","dos","godot","godot-engine","godot4","textmode"],"latest_commit_sha":null,"homepage":"","language":"GDScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/grymmjack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-14T20:42:24.000Z","updated_at":"2025-06-15T15:36:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"0f1048f5-e2e6-4aa3-b930-61190d4c4a69","html_url":"https://github.com/grymmjack/godot-console","commit_stats":{"total_commits":59,"total_committers":1,"mean_commits":59.0,"dds":0.0,"last_synced_commit":"2a7e9dcb505dea4781bd69fa23181598725648d2"},"previous_names":["grymmjack/godot-console"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/grymmjack/godot-console","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grymmjack%2Fgodot-console","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grymmjack%2Fgodot-console/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grymmjack%2Fgodot-console/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grymmjack%2Fgodot-console/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grymmjack","download_url":"https://codeload.github.com/grymmjack/godot-console/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grymmjack%2Fgodot-console/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29376857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T18:17:34.915Z","status":"ssl_error","status_checked_at":"2026-02-12T18:17:34.495Z","response_time":55,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansi","ansi-art","ansiart","ascii-art","bbs","console","cp437","dos","godot","godot-engine","godot4","textmode"],"created_at":"2024-09-24T23:49:02.286Z","updated_at":"2026-02-12T18:31:35.722Z","avatar_url":"https://github.com/grymmjack.png","language":"GDScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![GODOT-CONSOLE](https://raw.githubusercontent.com/grymmjack/godot-console/refs/heads/main/splash-trans.png)\n\n# Working CGA Godot Text Mode 16 color DOS console\n\n## Supports multiple screen modes:\n- 8x8 (50 row mode in DOS)\n- 8x16 (80x25 standard VGA font)\n- 9x16 DOS 9px font width - see: https://16colo.rs/ansiflags.php#letterspacing\n\n## More goodies\n- Greatly expanded the exported parameters\n- Added scale factor\n- Added support for ANSIFlags - see: https://www.acid.org/info/sauce/sauce.htm#ANSiFlags\n- Changing screen mode and scale in Editor updates in real time\n- Can now load ANSIs!\n- Supports iCE colors (16 background colors no blinking)\n- Supports blinking :)\n\n## TO DO\n- Cursors\n- Input\n- Baud Rate Emulation\n- Scrolling / Scrollback\n- PIPEPRINT! port [from my QB64 library](https://github.com/grymmjack/QB64_GJ_LIB/tree/main/PIPEPRINT)\n- Lightbar Menus :D\n- ANSI Music?\n- Legacy DOS Aspect Ratio / Square Aspect Ratio support (maybe!)\n- Possibly making this an @tool so it can load an ANSI into the editor in 2D mode GUI\n\n## Example ANSIs\n![image](https://github.com/user-attachments/assets/8fc95678-4b48-4381-95fc-62601e3c90ba)\n\n## Example output\n![image](https://github.com/user-attachments/assets/0206398b-f128-4126-b79e-6282e94e4634)\n[Web export](https://beta.grymmjack.com/godot-console/) version here (I will update this as needed)\n\n## 9px width mode\n![image](https://github.com/user-attachments/assets/100aaba8-c9f1-4dea-862f-747b5003662d)\n\n## 8px width mode\n![image](https://github.com/user-attachments/assets/eb57faea-8cc0-42a3-843d-7a73ed1f1282)\n\n## 8x8 font mode\n![image](https://github.com/user-attachments/assets/0f8742bc-33a9-4c2a-9025-89df66e9a985)\n\n## Blinking examples\n\u003e Regular old blinking\n![godot-console-blinking-example](https://github.com/user-attachments/assets/67b316b3-fb98-418f-8d75-d5b4afa8095c)\n\u003e Cat blinking :D\n![godot-console-blinking-example-cat](https://github.com/user-attachments/assets/3d2dcfb4-bac4-4767-8004-80a530292a38)\n\u003e Supports blinking and non-blinking at the same time because tiles\n![godot-blinking-and-non-blinking-at-once](https://github.com/user-attachments/assets/b785ba4d-0689-46ca-b59b-78fbcf1f9019)\n\nThe node tree is uncluttered:\n![image](https://github.com/user-attachments/assets/302db284-6091-4423-a505-7bd8e2df0511)\n- `SCREEN` = TextConsole node\n- `BG` = TileMapLayer named BG, which uses the [solid color tile map](assets/CGAColors.tres)\n- `FG` = TileMapLayer named FG, which uses the [font tile map](assets/DOSFont-CGA.tres) and alternative tiles for each color in the palette.\n\n## How to use\n1. Load `main.tscn`\n2. Adjust properties of the SCREEN node to suit in the property inspector\n3. In `scripts/main.gd` make sure it is TextScreen and extends `AnsiParser` that's it.\n\n### How the hell does this work?\n\u003e The trick here is that there are 2 tilemap layers. A background one (BG) for background colors under the foreground one (FG).\n- Since CGA has 16 background colors we have 16 background tiles in the BG tilemap.\n- Since CGA has 16 foreground colors, we have 1 DOS Font 8x16 that has alternative tiles for every tile to match every color in the CGA palette. (Thanks to [SelinaDev](https://github.com/SelinaDev/) for the help and idea to use alternative tiles instead of duplicate tilemap atlasses!)\n\n\u003e Then we just use `set_cell` and some little translation funcs to do stuff. This gets us a x, y grid just like `SCREEN 0` in basic, etc. It's not REAL console mode, it's a graphical version. Godot doesn't have the ability to do CLI stuff AFAIK.\n\n### BASIC-like API (WIP)\n\n- `echo` = `print`\n- `cecho` = `print` in colors (specify fg/bg)\n- `locate` = `locate` :D\n- `cls` = `cls`\n- `load_ansi_file(pathname)` = load and display an ANSI file\n- etc.\n\nSee: [scripts/text_console.gd](scripts/text_console.gd) for basics, `consts`, `enums`, etc.\n\n### Example use in `scripts/main.gd`:\n```gdscript\nextends TextConsole\n\nfunc _ready() -\u003e void:\n\tcolor(CGA.BRIGHT_WHITE, CGA.BLUE)\n\tcls()\n\tprint_ruler()\n\tlocate(10, 2)\n\tcecho(\"    Hello, World!    \", 14, 4)\n\t# will load ansi file from disk at current cursor position\n\tload_ansi_file(\"res://your_ansi.ans\")\n\n# print a little ruler\nfunc print_ruler() -\u003e void:\n\tfor y in range(height):\n\t\tfor x in range(width):\n\t\t\tif y == 0:\n\t\t\t\tif x % 10 == 0:\n\t\t\t\t\tlocate(x, y)\n\t\t\t\t\techo(str(x))\n\t\tlocate(0, y)\n\t\techo(str(y))\n```\n\n## PLAN?\n\u003cimg alt=\"godot-console\" src=\"https://github.com/user-attachments/assets/49a0f80d-fc55-444d-a77d-48cc917b216b\"\u003e\n\n\n\nThanks again to Axel for the mentoring/peer reviews, Hueson for the idea to use TileMaps in general, and Selina for the guidance on best way to do it! ❤️\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrymmjack%2Fgodot-console","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrymmjack%2Fgodot-console","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrymmjack%2Fgodot-console/lists"}