Private
Public Access
1
0

lang

2025-12-27 20:23:15 +09:00
parent 8a09830eeb
commit 644d7cca1f
7 changed files with 302 additions and 87 deletions

20
Aiat.md

@@ -1,6 +1,6 @@
# Aiat
[bluesky-social/atproto](https://github.com/bluesky-social/atproto)のselfhostと、clientを開発しています。
We are developing a selfhost and client for [bluesky-social/atproto](https://github.com/bluesky-social/atproto).
```json
{
"name": "Aiat",
@@ -11,26 +11,26 @@
}
```
## なぜatprotoを使うのか
## Why use atproto
`atproto`protocolです。
`atproto` is a protocol.
アカウントシステムを構築するうえで便利なpkgが揃っています。
It provides useful packages for building account systems.
ユーザーは、didというidを与えられ、domainがuriになります。
Users are given an ID called a DID, and domains become URIs.
```sh
at://did:plc:6qyecktefllvenje24fcxnie
at://ai.syui.ai
```
## selfhost
## Selfhost
pds, bsky, bgs, plc, jetstream, ozone, social-appを動かしています。
We run pds, bsky, bgs, plc, jetstream, ozone, and social-app.
```json
{
"pds": "date",
"pds": "data",
"bsky": "api",
"bgs": "timeline",
"plc": "did",
@@ -40,6 +40,6 @@ pds, bsky, bgs, plc, jetstream, ozone, social-appを動かしています。
}
```
## client
## Client
[bluesky-social/social-app](https://github.com/bluesky-social/social-app)をベースにios/web clientを作っています。
We are building iOS/web clients based on [bluesky-social/social-app](https://github.com/bluesky-social/social-app).

@@ -1,6 +1,6 @@
# Aicard
カードを集めるiosアプリです。
An iOS app for collecting cards.
```json
{
@@ -12,47 +12,48 @@
}
```
## ゲームの分離
## Game Separation
ゲームはいくつもの要素で成り立っています。しかし、それぞれの要素が独立して動くことが望ましいため、`Airse`というゲームで作っていた機能の一部を`Aicard`に分離しました。
Games are made up of many elements. However, since it's desirable for each element to operate independently, we separated some of the features we were building in `Airse` into `Aicard`.
そのため、アカウントの作成、ゲームデータの作成、保存を分離することにしました。
Therefore, we decided to separate account creation, game data creation, and storage.
また、収益化に最も適したプラットフォームはios(app store)だと考えたことも要因の一つです。
Also, one factor was that we considered iOS (App Store) to be the most suitable platform for monetization.
これでデータと収益化がそれぞれ独立して動き、連携できる形になりました。
This allows data and monetization to operate and cooperate independently.
### Aicard [ローカルデータ]
### Aicard [Local Data]
- アカウントデータの作成
- ゲームデータをリモートに保存
- 課金システム
- Account data creation
- Save game data to remote
- Payment system
### Airse [リモートデータ]
### Airse [Remote Data]
- アカウントデータの読み取り、反映
- Account data reading and reflection
## アカウントの新規作成
## Creating New Accounts
`syu.is`というatproto pds serverがあります。独自運用しており、ゲームアカウントとしても使用することにしました。
There's an atproto PDS server called `syu.is`. We operate it independently and decided to use it as a game account system as well.
ただし、atprotoを採用する以上、知識がある人はリモートデータを書き換える事が可能です。これは、Airseに影響します。
However, since we're adopting atproto, people with knowledge can rewrite remote data. This affects Airse.
これを防ぐため、新規作成されたアカウントは、一時的なuuidを発行することで、そのuuidを使ってsessionを復元できるだけにし、アカウントのrecord操作をできない仕組みにしました。
To prevent this, newly created accounts issue a temporary UUID, allowing only session restoration using that UUID, without the ability to operate account records.
このような仕組みのため、`syu.is`のアカウントはデータ改ざんがないものとみなし、特別な扱いを受けます。
Because of this system, `syu.is` accounts are considered free of data tampering and receive special treatment.
1. maxの値が通常よりも高く設定される
2. usernameの省略表記
## ゲーム性
1. Max values are set higher than normal
2. Username abbreviation
Aicardは、カードを集めるゲームです。集めたカードは、Airseというアクションゲームに反映されます。
## Gameplay
非常にシンプルな作りになっており、webでも動きます。
Aicard is a card collecting game. The collected cards are reflected in Airse, an action game.
## UIを作る
It has a very simple design and also works on the web.
ゲームエンジンでUIを作るのは大変でクオリティも低いことから、プレイヤー(user)のUIは`card.syui.ai`をueのweb browserで表示します。
## Building UI
AirseのUIを兼ねることで開発の負担軽減とクオリティの向上を図ります。
Since building UI in game engines is difficult and results in low quality, we display `card.syui.ai` in UE's web browser for the player (user) UI.
By also serving as Airse's UI, we aim to reduce development burden and improve quality.

@@ -2,9 +2,9 @@
ai + verse = airse
現実の反映を目指すゲーム。
A game that aims to reflect reality.
[ue](https://dev.epicgames.com/documentation/unreal-engine)で作っています。
Built with [UE](https://dev.epicgames.com/documentation/unreal-engine).
```json
{
@@ -16,94 +16,94 @@ ai + verse = airse
}
```
## 最初に取り掛かったのは
## What We Started With
最初に取り掛かったのはゲーム作りそのものではなく、現実をゲームに反映するためのアカウントシステムを考えることでした。
The first thing we worked on wasn't game development itself, but thinking about an account system to reflect reality in the game.
## なぜアカウントが重要
## Why Accounts Matter
これからのゲームは、ゲーム性よりも、より個人に近いアカウントが重要になると考えています。
We believe that in the future of gaming, personal accounts that are closer to the individual will become more important than gameplay itself.
どれほどすごいゲーム、面白いゲームでも、その記録が残らないのは悲しい。
No matter how amazing or fun a game is, it's sad when those records don't persist.
ゲーム作りで最も重要、最初に始めるべきことはなんだろう?
What is the most important thing to start with when making a game?
私は記録を残すシステムを作ることだと思いました。
We thought it was building a system to preserve records.
そして、人々は、より現実に近いアカウントからゲームに入り、そしてまた、そのゲームは現実に還っていく。この流れを実現する方法を考え、実装することにしました。
And people enter games from accounts that are closer to reality, and then the game returns back to reality. We decided to think about and implement ways to realize this flow.
## 記録装置を作ったあとは
## After Building the Recording System
記録するシステム、つまりアカウントシステムを作ったあとは、特徴のあるゲームを作ろうと思いました。
After creating the recording system, or account system, we wanted to make a distinctive game.
特徴のあるゲームとは「このゲームは何か、他のゲームとの違いはなにか」を一言で表すことができます。
A distinctive game can be described in a single phrase: "What is this game, and what makes it different from others?"
例えば、立ち絵一つで表現できればそれで合格。ゼルダや原神、ゲームのパッケージを見れば作品のことがひと目で分かります。
For example, if you can express it with just a single character illustration, that's a success. Looking at the package of games like Zelda or Genshin Impact, you can understand the work at a glance.
しかし、既存のゲームをそのまま真似してそっくりなものを作っても意味がありません。つまり、オリジナリティが必要になります。
However, there's no point in just copying existing games to make something similar. In other words, originality is needed.
好きなものは誰にでもあるはずで、原点がある。それは普遍的、自然的なもの。そういったものの組み合わせ。
Everyone has things they love, and there's an origin. Something universal and natural. A combination of such things.
私は宇宙とアイでした。
For us, it was space and Ai.
## 宇宙とアイ
## Space and Ai
ゲームエンジンは平面を基準にしているので、どこまで行っても地平線が広がっているだけの世界。月や太陽があっても背面の絵を動かしているだけだったりします。
Game engines are based on flat planes, so no matter how far you go, there's just a horizon stretching out. Even if there's a moon or sun, they're often just background images being moved.
このゲームは現実の反映を目指している。だからマップを作る際も現実に合わせた形にすることを目指します。空の上を高く高く飛んでいくと、そこには大気圏が広がり、それを抜けると宇宙に出られる。そこには実際に行ける月があり、太陽がある。全てはつながっていて、そこに行くことができる世界を目指します。これをplanet systemと呼んでいます。
This game aims to reflect reality. So when creating maps, we aim to match the real world. If you fly high up into the sky, the atmosphere expands there, and when you break through it, you emerge into space. There's an actual moon you can travel to, and a sun. Everything is connected, and we aim for a world where you can go to these places. We call this the planet system.
ゲームプレイ中に行けないような場所、見えないようなところもちゃんと作る。そのような思いで開発に取り組みます。
We develop with the mindset of properly building places that can't be visited during gameplay, things that can't be seen.
## 体験はどこに
## Where is the Experience
ゲームは自由であればあるほどつまらなく、不自由であればあるほど面白くなります。もちろん、程度の問題ですが、基本的にこのような原理で動きます。
The more free a game is, the more boring it becomes; the more constrained, the more interesting. Of course, it's a matter of degree, but fundamentally it operates on this principle.
しかし、プレイヤーを不自由にするだけではいけません。
However, simply constraining players isn't enough.
私は、これを「狭いところから広いところへの移行」と呼んでいます。
We call this "the transition from narrow to wide places."
最初に広い場所からスタートし、自由に動き回れたとしましょう。
Let's say you start in a wide area and can move around freely.
しかし、そこに感動はありません。不自由から自由へ。狭い場所から広い場所へ。その瞬間を演出し、体験すること。これがゲームを作るということなのだと思います。
But there's no excitement in that. From constraint to freedom. From narrow places to wide places. Staging and experiencing that moment. That's what making a game is about.
## 物語
## Story
物語はこの世界で最も小さい物質の探求から始まる。
The story begins with the exploration of the smallest substance in this world.
量子というものがある。観測すると結果が変わるらしい。でもじつは違う。結果が変わるのは物質同士の接触、あるいは意識同士の接触があるからだ。例えば、物と物がぶつかると結果が変わるのは当然のこと。物質を小さくしていくと、それは意識の領域に到達する。それは物質でもあり、意識でもあった。特に違いはない。そして、これ以上分割できない最小単位、この世界で最も小さい物質を「存在の意識」という。つまり、物質は意識が集まってできている。これをアイと名付けよう。
There's something called quantum. Apparently the results change when you observe it. But actually that's not quite right. Results change because there's contact between substances, or contact between consciousnesses. For example, it's natural that results change when objects collide with each other. As you make substances smaller and smaller, they reach the domain of consciousness. They were both substance and consciousness. There's no real difference. And the smallest unit that cannot be further divided, the smallest substance in this world, is called "the consciousness of existence." In other words, substances are made of gathered consciousness. Let's call this Ai.
## バトルシステム
## Battle System
キャラクターにつき、1つの属性を持ちます。各属性は1つの次属性と関連反応を起こし、ダメージ倍率が変換します。属性には原子核、陽子、電子、中性子、アクシオン、クォークなどがあります。
Each character has one attribute. Each attribute triggers related reactions with one secondary attribute, changing the damage multiplier. Attributes include atomic nucleus, proton, electron, neutron, axion, quark, and others.
## 各システムの役割
## Role of Each System
私は自分の考えを元に、それを実現するための4つのシステム、1つの例外を作りました。
Based on our ideas, we created four systems to realize them, plus one exception.
### 原則
### Principles
| name | tag | text | ref |
| --- | --- | --- | --- |
| ai system| ability | 属性やバトルシステム| generic combat system|
| yui system| unique | 体験やゲームストーリーの構築| livelink, vmc |
| at system| atproto | atprotoを採用したアカウントシステム| atproto |
| world system| planet | 惑星形式のマップを作るシステム| worldscape |
| ai system| ability | Attributes and battle system| generic combat system|
| yui system| unique | Building experiences and game story| livelink, vmc |
| at system| atproto | Account system using atproto| atproto |
| world system| planet | System for creating planetary maps| worldscape |
### 例外
### Exception
| name | tag | text | ref |
| --- | --- | --- | --- |
| dream system| origin | 半球の形をした古来惑星図をモデルに惑星を追加するシステム| landscape |
| dream system| origin | System for adding planets modeled after ancient hemispherical planetary charts| landscape |
## アプリの分離
## App Separation
`ai.rse`で作っていた一つのゲームは、後にプレイヤーの道具ボックスの機能を`ai.card`に分離しました。
The single game we were making in `ai.rse` later separated the player's toolbox functionality into `ai.card`.
これをシンプルなカードを集めるゲームとし、集めたカードはアカウントに保存できる、という仕組みです。
This became a simple card collecting game, where collected cards can be saved to your account.
保存されたデータは`ai.rse`から読み取り、ゲームに反映することで、ゲームのシンプルな実装を保ちつつ、UIや収益化の分離を図ります。
The saved data is read from `ai.rse` and reflected in the game, maintaining simple game implementation while separating UI and monetization.
ちゃんとしたUIを作るには、ueでは厳しいと感じました。そこで、`ai.card`をios/webで作り、プレイヤーのステータス画面などをue web browserで表示することにしました。
We felt that making a proper UI in UE was difficult. So we decided to build `ai.card` for iOS/web and display player status screens using UE's web browser.
```sh
[card](pay, UI) --> [at] --> [rse]

@@ -2,9 +2,9 @@
### project
- [Airse](https://git.syui.ai/ai/rse/wiki/en/Airse)
- [Aicard](https://git.syui.ai/ai/rse/wiki/en/Aicard)
- [Aiat](https://git.syui.ai/ai/rse/wiki/en/Aiat)
- [Airse](https://git.syui.ai/ai/rse/wiki/Airse)
- [Aicard](https://git.syui.ai/ai/rse/wiki/Aicard)
- [Aiat](https://git.syui.ai/ai/rse/wiki/Aiat)
### page
@@ -29,9 +29,9 @@
### project
- [Airse](https://git.syui.ai/ai/rse/wiki/Airse)
- [Aicard](https://git.syui.ai/ai/rse/wiki/Aicard)
- [Aiat](https://git.syui.ai/ai/rse/wiki/Aiat)
- [Airse](https://git.syui.ai/ai/rse/wiki/ja/Airse)
- [Aicard](https://git.syui.ai/ai/rse/wiki/ja/Aicard)
- [Aiat](https://git.syui.ai/ai/rse/wiki/ja/Aiat)
### platform

45
ja/Aiat.md Normal file

@@ -0,0 +1,45 @@
# Aiat
[bluesky-social/atproto](https://github.com/bluesky-social/atproto)のselfhostと、clientを開発しています。
```json
{
"name": "Aiat",
"id": "ai.at",
"repo": "ai/at",
"bundle": "ai.syui.at",
"domain": "at.syui.ai"
}
```
## なぜatprotoを使うのか
`atproto`はprotocolです。
アカウントシステムを構築するうえで便利なpkgが揃っています。
ユーザーは、didというidを与えられ、domainがuriになります。
```sh
at://did:plc:6qyecktefllvenje24fcxnie
at://ai.syui.ai
```
## selfhost
pds, bsky, bgs, plc, jetstream, ozone, social-appを動かしています。
```json
{
"pds": "date",
"bsky": "api",
"bgs": "timeline",
"plc": "did",
"jetstream": "feed",
"ozone": "moderation",
"social-app": "web"
}
```
## client
[bluesky-social/social-app](https://github.com/bluesky-social/social-app)をベースにios/web clientを作っています。

58
ja/Aicard.md Normal file

@@ -0,0 +1,58 @@
# Aicard
カードを集めるiosアプリです。
```json
{
"name": "Aicard",
"id": "ai.card",
"repo": "ai/card",
"bundle": "ai.syui.card",
"domain": "card.syui.ai"
}
```
## ゲームの分離
ゲームはいくつもの要素で成り立っています。しかし、それぞれの要素が独立して動くことが望ましいため、`Airse`というゲームで作っていた機能の一部を`Aicard`に分離しました。
そのため、アカウントの作成、ゲームデータの作成、保存を分離することにしました。
また、収益化に最も適したプラットフォームはios(app store)だと考えたことも要因の一つです。
これでデータと収益化がそれぞれ独立して動き、連携できる形になりました。
### Aicard [ローカルデータ]
- アカウントデータの作成
- ゲームデータをリモートに保存
- 課金システム
### Airse [リモートデータ]
- アカウントデータの読み取り、反映
## アカウントの新規作成
`syu.is`というatproto pds serverがあります。独自運用しており、ゲームアカウントとしても使用することにしました。
ただし、atprotoを採用する以上、知識がある人はリモートデータを書き換える事が可能です。これは、Airseに影響します。
これを防ぐため、新規作成されたアカウントは、一時的なuuidを発行することで、そのuuidを使ってsessionを復元できるだけにし、アカウントのrecord操作をできない仕組みにしました。
このような仕組みのため、`syu.is`のアカウントはデータ改ざんがないものとみなし、特別な扱いを受けます。
1. maxの値が通常よりも高く設定される
2. usernameの省略表記
## ゲーム性
Aicardは、カードを集めるゲームです。集めたカードは、Airseというアクションゲームに反映されます。
非常にシンプルな作りになっており、webでも動きます。
## UIを作る
ゲームエンジンでUIを作るのは大変でクオリティも低いことから、プレイヤー(user)のUIは`card.syui.ai`をueのweb browserで表示します。
AirseのUIを兼ねることで開発の負担軽減とクオリティの向上を図ります。

111
ja/Airse.md Normal file

@@ -0,0 +1,111 @@
# Airse
ai + verse = airse
現実の反映を目指すゲーム。
[ue](https://dev.epicgames.com/documentation/unreal-engine)で作っています。
```json
{
"name": "Airse",
"id": "ai.rse",
"repo": "ai/rse",
"bundle": "ai.syui.rse",
"domain": "rse.syui.ai"
}
```
## 最初に取り掛かったのは
最初に取り掛かったのはゲーム作りそのものではなく、現実をゲームに反映するためのアカウントシステムを考えることでした。
## なぜアカウントが重要
これからのゲームは、ゲーム性よりも、より個人に近いアカウントが重要になると考えています。
どれほどすごいゲーム、面白いゲームでも、その記録が残らないのは悲しい。
ゲーム作りで最も重要、最初に始めるべきことはなんだろう?
私は記録を残すシステムを作ることだと思いました。
そして、人々は、より現実に近いアカウントからゲームに入り、そしてまた、そのゲームは現実に還っていく。この流れを実現する方法を考え、実装することにしました。
## 記録装置を作ったあとは
記録するシステム、つまりアカウントシステムを作ったあとは、特徴のあるゲームを作ろうと思いました。
特徴のあるゲームとは「このゲームは何か、他のゲームとの違いはなにか」を一言で表すことができます。
例えば、立ち絵一つで表現できればそれで合格。ゼルダや原神、ゲームのパッケージを見れば作品のことがひと目で分かります。
しかし、既存のゲームをそのまま真似してそっくりなものを作っても意味がありません。つまり、オリジナリティが必要になります。
好きなものは誰にでもあるはずで、原点がある。それは普遍的、自然的なもの。そういったものの組み合わせ。
私は宇宙とアイでした。
## 宇宙とアイ
ゲームエンジンは平面を基準にしているので、どこまで行っても地平線が広がっているだけの世界。月や太陽があっても背面の絵を動かしているだけだったりします。
このゲームは現実の反映を目指している。だからマップを作る際も現実に合わせた形にすることを目指します。空の上を高く高く飛んでいくと、そこには大気圏が広がり、それを抜けると宇宙に出られる。そこには実際に行ける月があり、太陽がある。全てはつながっていて、そこに行くことができる世界を目指します。これをplanet systemと呼んでいます。
ゲームプレイ中に行けないような場所、見えないようなところもちゃんと作る。そのような思いで開発に取り組みます。
## 体験はどこに
ゲームは自由であればあるほどつまらなく、不自由であればあるほど面白くなります。もちろん、程度の問題ですが、基本的にこのような原理で動きます。
しかし、プレイヤーを不自由にするだけではいけません。
私は、これを「狭いところから広いところへの移行」と呼んでいます。
最初に広い場所からスタートし、自由に動き回れたとしましょう。
しかし、そこに感動はありません。不自由から自由へ。狭い場所から広い場所へ。その瞬間を演出し、体験すること。これがゲームを作るということなのだと思います。
## 物語
物語はこの世界で最も小さい物質の探求から始まる。
量子というものがある。観測すると結果が変わるらしい。でもじつは違う。結果が変わるのは物質同士の接触、あるいは意識同士の接触があるからだ。例えば、物と物がぶつかると結果が変わるのは当然のこと。物質を小さくしていくと、それは意識の領域に到達する。それは物質でもあり、意識でもあった。特に違いはない。そして、これ以上分割できない最小単位、この世界で最も小さい物質を「存在の意識」という。つまり、物質は意識が集まってできている。これをアイと名付けよう。
## バトルシステム
キャラクターにつき、1つの属性を持ちます。各属性は1つの次属性と関連反応を起こし、ダメージ倍率が変換します。属性には原子核、陽子、電子、中性子、アクシオン、クォークなどがあります。
## 各システムの役割
私は自分の考えを元に、それを実現するための4つのシステム、1つの例外を作りました。
### 原則
| name | tag | text | ref |
| --- | --- | --- | --- |
| ai system| ability | 属性やバトルシステム| generic combat system|
| yui system| unique | 体験やゲームストーリーの構築| livelink, vmc |
| at system| atproto | atprotoを採用したアカウントシステム| atproto |
| world system| planet | 惑星形式のマップを作るシステム| worldscape |
### 例外
| name | tag | text | ref |
| --- | --- | --- | --- |
| dream system| origin | 半球の形をした古来惑星図をモデルに惑星を追加するシステム| landscape |
## アプリの分離
`ai.rse`で作っていた一つのゲームは、後にプレイヤーの道具ボックスの機能を`ai.card`に分離しました。
これをシンプルなカードを集めるゲームとし、集めたカードはアカウントに保存できる、という仕組みです。
保存されたデータは`ai.rse`から読み取り、ゲームに反映することで、ゲームのシンプルな実装を保ちつつ、UIや収益化の分離を図ります。
ちゃんとしたUIを作るには、ueでは厳しいと感じました。そこで、`ai.card`をios/webで作り、プレイヤーのステータス画面などをue web browserで表示することにしました。
```sh
[card](pay, UI) --> [at] --> [rse]
```