\n \u003Cbr/>\n Serial Loops\n\u003C/h1>\n\u003Cp align=\"center\">\n \u003Ca href=\"https://dev.azure.com/jonko0493/haroohie-private/_apis/build/status%2FSerialLoops-Official?branchName=main\">\n \u003Cimg alt=\"Azure Pipelines build status badge\" src=\"https://dev.azure.com/jonko0493/haroohie-private/_apis/build/status%2FSerialLoops-Official?branchName=main\" />\n \u003C/a>\n \u003Ca href=\"https://discord.gg/nesRSbpeFM\">\n \u003Cimg alt=\"Haroohie Translation Club Discord Server badge \" src=\"https://img.shields.io/discord/904791358609424436.svg?label=&logo=discord&logoColor=fff&color=7389D8&labelColor=6A7EC2\" />\n \u003C/a>\n \u003Ca href=\"https://haroohie.club/chokuretsu/serial-loops/docs\">\n \u003Cimg alt=\"Serial Loops documentation link badge\" src=\"https://img.shields.io/badge/docs-haroohie.club-00C4F5?logo=github\" />\n \u003C/a>\n\u003C/p>\n\n**Serial Loops** is a fully-fledged editor for the Nintendo DS game _Suzumiya Haruhi no Chokuretsu_ (The Series of Haruhi Suzumiya).\n\n## Screenshots\n\u003Cp align=\"center\">\n \u003Cimg width=\"325px\" src=\"https://haroohie.club/images/chokuretsu/serial-loops/script-editor.png\" alt=\"Screenshot of the Serial Loops script editor, featuring the 'EV2_029' script being edited. A list of commands is displayed in a list view panel, with buttons to add, remove and clear commands, with information about the currently selected command displayed on the right. Haruhi and Tsuruya are displayed on a preview of the Nintendo DS screen.\" />\n \u003Cimg width=\"325px\" src=\"https://haroohie.club/images/chokuretsu/serial-loops/map-editing.png\" alt=\"Screenshot of the Serial Loops map editor, featuring the 'SLD1' map open with checkboxes to show/hide the camera position and collision grid\" />\n \u003Cimg width=\"325px\" src=\"https://haroohie.club/images/chokuretsu/serial-loops/sound-editing.png\" alt=\"Screenshot of the Serial Loops sound editor, featuring a modal widget with a sound wave graph. Buttons to start and stop playback are present, as are sliders and a checkbox to enable looping and adjust the track loop start and end points.\" />\n \u003Cimg width=\"325px\" src=\"https://haroohie.club/images/chokuretsu/serial-loops/home-screen.png\" alt=\"Screenshot of the Serial Loops home screen. The Serial Loops logo and title sits at the top of the menu. Below that, under 'Start' on the left hand side, options to create a project, open an existing project, and modify preferences are present. An empty list of 'Recents' is visible on the right hand side, where recent projects would appear.\" />\n\u003C/p>\n\n## Authors\n### Developers\nSerial Loops is developed by:\n* [Jonko](https://github.com/jonko0493) – Systems architect & reverse engineering work\n* [William278](https://william278.net) – UX architect & design work\n\n### Translators\nSerial Loops is translated into a variety of langauges thanks to the following contributors:\n* Chinese (Simplified/Traditional): [Xzonn](https://xzonn.top) (traditional is auto-generated via [OpenCC](https://github.com/BYVoid/OpenCC))\n* Italian: Oropuro_49 and Fuyuko Ayumu\n* Japanese: Amelia Chaplin\n\n## Documentation\nDocumentation for how to use Serial Loops can be found on [our website](https://haroohie.club/chokuretsu/serial-loops/).\n\n## Installation\n### Prerequisites\n#### A Nintendo DS Emulator\nTo test the game easily, you will want to have a Nintendo DS emulator installed. We recommend using [melonDS](https://melonds.kuribo64.net/) for its accuracy.\n\n#### Installing devkitARM\n[devkitARM](https://devkitpro.org/wiki/Getting_Started) is required to use Serial Loops on all platforms.\n\n* Using the Windows graphical installer, you can simply select the devkitARM (Nintendo DS) workloads\n* On macOS and Linux, run `sudo dkp-pacman -S nds-dev` from the terminal after installing the devkitPro pacman distribution.\n\n#### Installing Make or Docker\nTo assemble ASM hacks you want to apply, you will need to decide whether to use Make or Docker. Make is automatically installed when using the Debian and RPM\npackages we distribute, so you don't need to worry about this step if you're using either of those.\n\nCurrently, the Docker path is **only supported on Windows** due to operating system and framework limitations. It is possible to get Docker running\njust fine on Linux distros by running SerialLoops as root (e.g. `sudo SerialLoops`), but it's easier to just use Make. On macOS, there is no known\nway of getting the Docker path to work, so you will have to use Make.\n\n* [Make](https://www.gnu.org/software/make/) is the software used to assemble assembly hacks. Installing Make allows you to build the hacks\n directly on your system.\n - To install on Windows, you will have to use a terminal and a package manager. Your options are Winget (installed by default on Win10+) or\n [Chocolatey](https://chocolatey.org/). Open an admin PowerShell or Terminal window (Winkey + X + A) and enter `winget install GnuWin32.make`\n for Winget or `choco install make` for Chocolatey. If using Winget, you will then have to go into system preferences and add Make to the path.\n - Installation on macOS can be done through Xcode or Homebrew. If using Xcode, open a terminal and type `xcode-select --install`. If you would\n rather use Homebrew, open a terminal after installing Homebrew and type `brew install make`.\n - Make comes preinstalled on many Linux distributions, and if you're using the Debian or RPM package, it was definitely installed when you installed\n Serial Loops. If you're using the tar.gz it is not installed on yours, you will likely be able to install it as simply as\n `[packagemanger] install make` from a terminal.\n \n To test if make is installed properly, type `make --verison` into a terminal and see if it produces the version of make.\n* If you would rather not install Make, or if it is not working properly, you can instead run it through a Docker container. To do this, you should\n install [Docker Desktop](https://www.docker.com/products/docker-desktop/) or the Docker Engine. Ensure the Docker engine is running and make sure\n to check the \"Use Docker for ASM Hacks\" option in Preferences. You may want to occasionally clean up containers created by Serial Loops, as it will\n create many of them.\n - On Windows, you will additionally need to install [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install).\n From an admin PowerShell or Terminal window (Winkey + X + A), simply type `wsl --install` to install it.\n\n#### Installing OpenAL (Linux)\nIf you're running on Linux and _not using one of the package releases_ (the `.deb` or `.rpm`), you will also need to install OpenAL which is used for audio processing.\n\n### Download & Install\nOnce you have installed any necessary prerequisites, to install Serial Loops, download the latest release for your platform from the [Releases tab](https://github.com/haroohie-club/SerialLoops/releases).\n\nBe sure to [read the Serial Loops documentation](https://haroohie.club/chokuretsu/serial-loops/docs) for instructions on how to use it!\n\n## Bugs\nPlease file bugs in the Issues tab in this repository. Please include the following information:\n* The platform you are running Serial Loops on\n* The version of the _Chokuretsu_ ROM you are using (Japanese, patched English ROM, etc.)\n* A description of the steps required to reproduce the issue\n* The relevant logs for the issue (can be found in ~/SerialLoops/Logs)\n\n## Development\n### License\nSerial Loops is licensed under the GPLv3. See [LICENSE](LICENSE) for more information.\n\n### Building\nSerial Loops requires the .NET 8.0 SDK to build. You can download it [here](https://dotnet.microsoft.com/download/dotnet/8.0). To build Serial Loops for your platform, run:\n\n```bash\ndotnet build src/PLATFORM\n```\n\nRemember to replace `PLATFORM` with the platform you're on:\n* `SerialLoops.Gtk` for Linux\n* `SerialLoops.Mac` for macOS\n* `SerialLoops.Wpf` for Windows\n\nWe recommend [Visual Studio 2022](https://visualstudio.microsoft.com/) on Windows or [Rider](https://www.jetbrains.com/rider/) on Linux/Mac for development. If you'd like to contribute new features or fixes, we recommend [getting in touch on Discord first](https://discord.gg/nesRSbpeFM) before submitting a pull request!\n\n### Testing\nThe `SerialLoops.Tests` project can be run from inside Visual Studio, Rider, or with `dotnet test` as normal. However, our UI tests (currently only runnable on Windows) are a bit more involved.\n\nOur UI tests rely on [Appium](https://appium.io/).\n#### macOS\n1. You will need to install nodejs and then use it to [install Appium](https://appium.io/docs/en/2.4/quickstart/install/).\n - The easiest way to install nodejs is to first install [nvm](https://github.com/nvm-sh/nvm) and then run `nvm install \u003Cversion>` followed by `nvm use \u003Cversion>` (you can use `16` as the version)\n2. You will then need to install the Mac2 driver with `appium driver install mac2`\n3. Follow [these instructions](https://github.com/appium/appium-mac2-driver?tab=readme-ov-file#requirements) for installing and setting up the necessary prerequisites for the Mac2 driver to work\n\nOnce you've installed the prerequisites, build the `SerialLoops.Mac` and `SerialLoops.Mac.Tests` projects with `dotnet build src/SerialLoops.Mac/SerialLoops.Mac.csproj` and `dotnet build test/ui/SerialLoops.Mac.Tests/SerialLoops.Mac.Tests.csproj`,\nrespectively. Then, inside `test\\ui\\SerialLoops.Mac.Tests\\bin\\Debug\\net8.0`, create a new text file called `ui_vals.json`. Inside this file, place the following text, replacing necessary values:\n```json\n{\n \"AppLoc\": \"PATH/TO/Serial Loops.app\",\n \"ProjectName\": \"MacUITest\",\n \"RomLoc\": \"PATH/TO/HaruhiChokuretsu.nds\",\n \"ArtifactsDir\": \"PATH/TO/artifacts\"\n}\n```\nThe artifacts directory can be any arbitrary directory, but ensure it exists before running the tests. The project name by default is WinUITest, but it can be anything you'd like. Have fun.\n\nFinally, you can then run the tests with `dotnet test test\\ui\\SerialLoops.Mac.Tests\\SerialLoops.Mac.Tests.csproj`. However, it may be better to run `appium` from a different terminal first so you\ncan see the server output as well.\n\n#### Windows\n1. You will need to install nodejs and then use it to [install Appium](https://appium.io/docs/en/2.4/quickstart/install/).\n - The easiest way to install nodejs is to first install [NVM for Windows](https://github.com/coreybutler/nvm-windows) and then run `nvm install latest` followed by `nvm use latest` (you can sub latest for any version)\n2. You will then need to install the [Appium Windows Driver](https://github.com/appium/appium-windows-driver) with `appium driver install --source=npm appium-windows-driver`.\n3. Next, download and install [WinAppDriver](https://github.com/microsoft/WinAppDriver).\n\nOnce you've installed all the prerequisites, build the `SerialLoops.Wpf` and `SerialLoops.Wpf.Tests` projects from Visual Studio or with `dotnet build src\\ui\\SerialLoops.Wpf\\SerialLoops.Wpf.csproj` and\n`dotnet build test\\ui\\SerialLoops.Wpf.Tests\\SerialLoops.Wpf.Tests.csproj`, respectively. Then, inside `test\\ui\\SerialLoops.Wpf.Tests\\bin\\Debug\\net8.0`, create a new text file called `ui_vals.json`.\nInside this file place the following text, replacing necessary values:\n```json\n{\n \"AppLoc\": \"PATH\\\\TO\\\\SerialLoops.exe\",\n \"ProjectName\": \"WinUITest\",\n \"WinAppDriverLoc\": \"PATH\\\\TO\\\\WinAppDriver.exe\",\n \"RomLoc\": \"PATH\\\\TO\\\\HaruhiChokuretsu.nds\",\n \"ArtifactsDir\": \"PATH\\\\TO\\\\artifacts\"\n}\n```\nEnsure you escape your backslashes (`\\\\` rather than `\\`). WinAppDriver is usually installed to `C:\\Program Files (x86)\\Windows Application Driver\\WinAppDriver.exe`. The artifacts directory can\nbe any arbitrary directory, but ensure it exists before running the tests. The project name by default is WinUITest, but it can be anything you'd like. Have fun.\n\nFinally, you can then open the solution inside Visual Studio and run the tests from the Test Explorer. Alternatively, running `dotnet test test\\ui\\SerialLoops.Wpf.Tests\\SerialLoops.Wpf.Tests.csproj`\nmay also work.",[],[21],"William278",[23,24,25],"windows","macos","linux",0,"",[],7,{"SVG":31,"PNG":32},"serial-loops.svg","serial-loops.png",[],[35,38,41],{"url":36,"description":37},"serial-loops/map-editing.png","Map editing",{"url":39,"description":40},"serial-loops/script-editing.png","Script editing",{"url":42,"description":43},"serial-loops/sound-editing.png","Sound editing",{"downloadCount":45,"averageRating":26,"numberOfRatings":26,"interactions":46,"onlinePlayers":26,"onlineServers":26},2259,20,{"contents":48},{"sections":49},[50,61,75,79,88,95,102,105],{"sections":51,"order":52,"type":53,"title":9,"body":54,"properties":55},[],1,"hero","**Serial Loops** is a comprehensive editing suite for the Nintendo DS game *Suzumiya Haruhi no Chokuretsu* (The Series of Haruhi Suzumiya), available for Windows, Mac and Linux. Developed by Jonko, myself, and the Haroohie Translation Club.",{"color1":56,"color2":57,"button1_label":58,"button1_icon":59,"button1_url":60,"button2_label":27,"button2_icon":27,"button2_url":27},"#006a85","#3a5714","Find out More","fa6-solid:up-right-from-square","https://haroohie.club/chokuretsu/serial-loops/",{"sections":62,"order":26,"type":63,"title":64,"body":64,"properties":65},[],"features",null,{"icon_background_color1":56,"icon_background_color2":57,"feature1_title":66,"feature1_body":67,"feature1_icon":68,"feature2_title":69,"feature2_body":70,"feature2_icon":71,"feature3_title":72,"feature3_body":73,"feature3_icon":74},"Modify Graphics","Edit everything from graphics to the game's UI & music!","fa6-solid:book-open","Create Custom Stories","Create your own visual novels with Serial Loops powerful script editor!","fa6-solid:star","Edit Save Files","WE LOVE ESOTERIC DS GAMES 🥰😍!!! Of course, you can also edit save files!","fa6-solid:heart",{"sections":76,"order":77,"type":78,"title":64,"body":64,"properties":64},[],-1,"horizontal_rule",{"sections":80,"order":81,"type":82,"title":83,"body":84,"properties":85},[],-3,"image_with_text","Script Editing","Create your own visual novels for the DS in Serial Loops!",{"image_url":86,"image_position":87,"button1_label":27,"button1_icon":27,"button1_url":27,"button2_label":27,"button2_icon":27,"button2_url":27},"serial-loop-script-editing.mp4","left",{"sections":89,"order":81,"type":82,"title":90,"body":91,"properties":92},[],"Graphics & Layouts","Edit everything from the game's user interface to the graphics, scripts & fonts!",{"image_url":93,"image_position":94,"button1_label":27,"button1_icon":27,"button1_url":27,"button2_label":27,"button2_icon":27,"button2_url":27},"serial-loops-layout-editing.mp4","right",{"sections":96,"order":97,"type":82,"title":98,"body":99,"properties":100},[],-4,"Puzzles & More!","Edit chess puzzles, music & more!",{"image_url":101,"image_position":87,"button1_label":27,"button1_icon":27,"button1_url":27,"button2_label":27,"button2_icon":27,"button2_url":27},"serial-loops-chess-editing.mp4",{"sections":103,"order":104,"type":78,"title":64,"body":64,"properties":64},[],-5,{"sections":106,"order":107,"type":108,"title":109,"body":64,"properties":110},[],-6,"latest_posts","What's new?",{"number_of_posts":111},"3",{"data":113,"body":114},{},{"type":115,"children":116},"root",[117],{"type":118,"tag":119,"props":120,"children":121},"element","p",{},[122],{"type":123,"value":9},"text",{"data":125,"body":126},{},{"type":115,"children":127},[128],{"type":118,"tag":119,"props":129,"children":130},{},[131,136,138,144],{"type":118,"tag":132,"props":133,"children":134},"strong",{},[135],{"type":123,"value":9},{"type":123,"value":137}," is a comprehensive editing suite for the Nintendo DS game ",{"type":118,"tag":139,"props":140,"children":141},"em",{},[142],{"type":123,"value":143},"Suzumiya Haruhi no Chokuretsu",{"type":123,"value":145}," (The Series of Haruhi Suzumiya), available for Windows, Mac and Linux. Developed by Jonko, myself, and the Haroohie Translation Club.",{"data":147,"body":148},{},{"type":115,"children":149},[150],{"type":118,"tag":119,"props":151,"children":152},{},[153],{"type":123,"value":66},{"data":155,"body":156},{},{"type":115,"children":157},[158],{"type":118,"tag":119,"props":159,"children":160},{},[161],{"type":123,"value":67},{"data":163,"body":164},{},{"type":115,"children":165},[166],{"type":118,"tag":119,"props":167,"children":168},{},[169],{"type":123,"value":69},{"data":171,"body":172},{},{"type":115,"children":173},[174],{"type":118,"tag":119,"props":175,"children":176},{},[177],{"type":123,"value":70},{"data":179,"body":180},{},{"type":115,"children":181},[182],{"type":118,"tag":119,"props":183,"children":184},{},[185],{"type":123,"value":72},{"data":187,"body":188},{},{"type":115,"children":189},[190],{"type":118,"tag":119,"props":191,"children":192},{},[193],{"type":123,"value":73},{"data":195,"body":196},{},{"type":115,"children":197},[198],{"type":118,"tag":119,"props":199,"children":200},{},[201],{"type":123,"value":83},{"data":203,"body":204},{},{"type":115,"children":205},[206],{"type":118,"tag":119,"props":207,"children":208},{},[209],{"type":123,"value":84},{"data":211,"body":212},{},{"type":115,"children":213},[214],{"type":118,"tag":119,"props":215,"children":216},{},[217],{"type":123,"value":90},{"data":219,"body":220},{},{"type":115,"children":221},[222],{"type":118,"tag":119,"props":223,"children":224},{},[225],{"type":123,"value":91},{"data":227,"body":228},{},{"type":115,"children":229},[230],{"type":118,"tag":119,"props":231,"children":232},{},[233],{"type":123,"value":98},{"data":235,"body":236},{},{"type":115,"children":237},[238],{"type":118,"tag":119,"props":239,"children":240},{},[241],{"type":123,"value":99},{"data":243,"body":244},{},{"type":115,"children":245},[246],{"type":118,"tag":119,"props":247,"children":248},{},[249],{"type":123,"value":109},{"content":251,"page":252},[],{"size":253,"number":26,"totalElements":26,"totalPages":26},3,["Reactive",255],{"$snuxt-i18n-meta":256,"$sauth":-1,"$sxsrf":-1},{},["Set"],["ShallowReactive",259],{"$f3zjGG2jS3UMTEhKk84KTINBjOt_xy6I7Bf_tOXaYLAY":-1,"user":260,"$ffUYtFyS6YHvuiQaCdnt2vZtcg1B_6bE5ZSuPYejZpM0":-1,"mdc-p19zpf-key":-1,"mdc--11kcn1-key":-1,"mdc--2vw6vj-key":-1,"mdc--1t5mhu-key":-1,"mdc-tfbwfc-key":-1,"mdc--56iu08-key":-1,"mdc-mxji3u-key":-1,"mdc-6g2hbi-key":-1,"mdc--2yn4pp-key":-1,"mdc--s5rkse-key":-1,"mdc-498s7u-key":-1,"mdc-3bx3y2-key":-1,"mdc--aznsp-key":-1,"mdc-n4wwck-key":-1,"mdc-6hrhtb-key":-1,"$fbX1NL59VUCIcVluOHl8YYO8OLgXajxgoZs3CmJVJmZk":-1},["NuxtError",261],{"message":262,"statusCode":263,"statusMessage":264,"data":265},"[GET] \"https://api.william278.net/v1/users/@me\": 401 Unauthorized",401,"Unauthorized",{"error":266},"You must be logged in to perform this action.","/project/serial-loops"]