Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
aaeed669df | |||
7084f40404 | |||
f7e9d7d7db |
@ -1,3 +1,11 @@
|
|||||||
|
## 0.11.1
|
||||||
|
|
||||||
|
- Improved help pages
|
||||||
|
|
||||||
|
## 0.11.0
|
||||||
|
|
||||||
|
- Added help pages
|
||||||
|
|
||||||
## 0.10.1
|
## 0.10.1
|
||||||
|
|
||||||
- Fixed the order of cells in the CHUNITHM keyboard
|
- Fixed the order of cells in the CHUNITHM keyboard
|
||||||
|
20
README.md
20
README.md
@ -1,17 +1,19 @@
|
|||||||
# STARTLINER
|
# STARTLINER
|
||||||
|
|
||||||
A simple and easy to use launcher, configuration tool and mod manager
|
This is a program that seeks to streamline game data configuration, currently supporting O.N.G.E.K.I. and CHUNITHM.
|
||||||
for O.N.G.E.K.I. and CHUNITHM, using [Rainycolor Watercolor](https://rainy.patafour.zip).
|
|
||||||
|
STARTLINER is four things:
|
||||||
|
|
||||||
|
- a mod installer and updater, powered by [Rainycolor Watercolor](https://rainy.patafour.zip),
|
||||||
|
- a configuration GUI for segatools,
|
||||||
|
- a glorified `start.bat` clicker, with automatic monitor setup and rollback,
|
||||||
|
- [an abstraction allowing data configuration without touching the game directory](https://gitea.tendokyu.moe/akanyan/STARTLINER/wiki/Architecture-details).
|
||||||
|
|
||||||
|
STARTLINER's core design principle is to modify, configure and launch games without tampering with them.
|
||||||
|
This makes it possible to keep data cleaner than ever, and to have several configurations pointing at the same data.
|
||||||
|
|
||||||
Made with Rust (Tauri) and Vue. Technically multiplatform. Contributions welcome.
|
Made with Rust (Tauri) and Vue. Technically multiplatform. Contributions welcome.
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- [Clean](https://gitea.tendokyu.moe/akanyan/STARTLINER/wiki/Architecture-details) data modding
|
|
||||||
- Segatools configuration
|
|
||||||
- Monitor configuration with automatic rollback
|
|
||||||
- Support for multiple configurations pointing at the same data
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Download a prebuilt binary from [Releases](https://gitea.tendokyu.moe/akanyan/STARTLINER/releases) or build it yourself:
|
Download a prebuilt binary from [Releases](https://gitea.tendokyu.moe/akanyan/STARTLINER/releases) or build it yourself:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://schema.tauri.app/config/2",
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
"productName": "STARTLINER",
|
"productName": "STARTLINER",
|
||||||
"version": "0.11.0",
|
"version": "0.11.1",
|
||||||
"identifier": "zip.patafour.startliner",
|
"identifier": "zip.patafour.startliner",
|
||||||
"build": {
|
"build": {
|
||||||
"beforeDevCommand": "bun run dev",
|
"beforeDevCommand": "bun run dev",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ComputedRef, computed, onMounted } from 'vue';
|
import { ComputedRef, computed, onMounted, ref } from 'vue';
|
||||||
import Button from 'primevue/button';
|
import Button from 'primevue/button';
|
||||||
import Carousel from 'primevue/carousel';
|
import Carousel from 'primevue/carousel';
|
||||||
import Dialog from 'primevue/dialog';
|
import Dialog from 'primevue/dialog';
|
||||||
@ -11,7 +11,7 @@ import { VueMarkdownIt } from '@f3ve/vue-markdown-it';
|
|||||||
const prf = usePrfStore();
|
const prf = usePrfStore();
|
||||||
const client = useClientStore();
|
const client = useClientStore();
|
||||||
|
|
||||||
defineProps({
|
const props = defineProps({
|
||||||
visible: Boolean,
|
visible: Boolean,
|
||||||
firstTime: Boolean,
|
firstTime: Boolean,
|
||||||
onFinish: Function,
|
onFinish: Function,
|
||||||
@ -101,6 +101,14 @@ onMounted(async () => {
|
|||||||
image: '/help-finale-chunithm.png',
|
image: '/help-finale-chunithm.png',
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const counter = ref(0);
|
||||||
|
|
||||||
|
const exitLabel = computed(() => {
|
||||||
|
return props.firstTime === true && counter.value < data.value.length - 1
|
||||||
|
? 'Skip'
|
||||||
|
: 'Close';
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -115,7 +123,13 @@ onMounted(async () => {
|
|||||||
"
|
"
|
||||||
:style="{ width: '760px', scale: client.scaleValue }"
|
:style="{ width: '760px', scale: client.scaleValue }"
|
||||||
>
|
>
|
||||||
<Carousel :value="data" :num-visible="1" :num-scroll="1">
|
<Carousel
|
||||||
|
:value="data"
|
||||||
|
:num-visible="1"
|
||||||
|
:num-scroll="1"
|
||||||
|
:page="counter"
|
||||||
|
v-on:update:page="(p) => (counter = p)"
|
||||||
|
>
|
||||||
<template #item="slotProps">
|
<template #item="slotProps">
|
||||||
<div class="md-container markdown">
|
<div class="md-container markdown">
|
||||||
<vue-markdown-it
|
<vue-markdown-it
|
||||||
@ -135,9 +149,15 @@ onMounted(async () => {
|
|||||||
</template>
|
</template>
|
||||||
</Carousel>
|
</Carousel>
|
||||||
<div style="width: 100%; text-align: center">
|
<div style="width: 100%; text-align: center">
|
||||||
|
<Button
|
||||||
|
v-if="counter < data.length - 1"
|
||||||
|
class="m-auto mr-4"
|
||||||
|
label="Next"
|
||||||
|
@click="() => (counter += 1)"
|
||||||
|
/>
|
||||||
<Button
|
<Button
|
||||||
class="m-auto"
|
class="m-auto"
|
||||||
label="OK"
|
:label="exitLabel"
|
||||||
@click="() => onFinish && onFinish()"
|
@click="() => onFinish && onFinish()"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user