ウマ娘の特殊タグ練習帳 (uso800)
しおりを挟む

スキル一覧のページ(モバイルまだ)

モバイル向けの対応がまだ一部できてない。
特定のオプションを削るだけで、それなりに上手く直せるが、イマイチ。


スキル単品

 

ノンストップガール
ノンストップガール

 

スピード

♥ スタミナ

パワー

根性

賢さ

F 106 /2500

F 106 /2500

F 106 /2500

F 106 /2500

F 106 /2500

 

バ場適性

________A

___ダート__F

距離適性

__短距離__G

__マイル__E

__中距離__B

__長距離__A

脚質適性

___逃げ___F

___先行___E

___差し___A

___追込___B

成長率

+ 0 %
_
_+ 20 %
_
+ 0 %
_
+ 10 %
_
+ 0 %

 

_

先行けん制
先行けん制


レース序盤に作戦・先行のウマ娘を
レース序盤に作戦・先行のウマ娘を

けん制してわずかに疲れやすくする
けん制してわずかに疲れやすくする

スキルPt_
130

 

❤︎
根幹距離◯
根幹距離◯


根幹距離(400mの倍数)が
根幹距離(400mの倍数)が

少し得意になる
少し得意になる

スキルPt_
130

 

_

ふり絞り
ふり絞り


レース終盤にスキルを多く発動すると
レース終盤にスキルを多く発動すると

持久力がわずかに回復する
持久力がわずかに回復する

スキルPt_
130

 

差し切り体勢
差し切り体勢


レース終盤で加速力が
レース終盤で加速力が

わずかに上がる<作戦・差し>
わずかに上がる<作戦・差し>

スキルPt_
180

 

フルスロットル
フルスロットル


レース中盤に持久力をすごく
レース中盤に持久力をすごく

使って速度を少し上げる<作戦・差し>
使って速度を少し上げる<作戦・差し>

スキルPt_
180

 

_

勝利への渇望
勝利への渇望


レース終盤にスキルを多く発動すると
レース終盤にスキルを多く発動すると

持久力が回復し速度がわずかに上がる
持久力が回復し速度がわずかに上がる

スキルPt_
130

 

❤︎
つわものの条件
つわものの条件


根幹距離(400mの倍数)が
根幹距離(400mの倍数)が

得意になりスピードとパワーが上がる
得意になりスピードとパワーが上がる

スキルPt_
130

 

フルスロットル
フルスロットル


レース中盤に持久力をすごく
レース中盤に持久力をすごく

使って速度を少し上げる<作戦・差し>
使って速度を少し上げる<作戦・差し>

Lv 5_
Lv 5_

 

 

1.ハートマークの位置が少しおかしい

3.だが、正直、ビットマップフォント使った方が多分早い。

7. 固有スキルの背景色が間違っている。

 



目次 感想へのリンク しおりを挟む


しおりを挟む

iphone上でのレース前の画面再現

G1
東京優駿(日本ダービー)

i _

18 番人気_△ × △
18 番人気_△ × △

ステータス
スキル

_基礎能力

スピード
スピード

A

893

スタミナ
スタミナ

B+

796

パワー
パワー

A

870

根性
根性

C+

536

賢さ
賢さ

B

603

_適正

A

中距離
中距離

A

先行
先行

A

_やる気

⇧絶好調

_作戦

逃げ

5人

_
先行

10人

_
差し

8人

_
追込

5人

_

 

<
>
ホープ

出走ウマ娘


実況:すべてのウマ娘が目指す頂点、日本ダービー!

実況:歴史に蹄鉄を残すのは誰だ!


実況:1番ホープ、18番人気です。


解説:ライバルたちは強力ですが、好走を期待したいですね


解説:この娘の鋭い差し脚が炸裂するか、期待しましょう


結果を見る
__
レースヘ

 



目次 感想へのリンク しおりを挟む


しおりを挟む

レースのファンファーレ(作成途中)

G1

 

 

people

floor

green

 

 

G1

G1

 

 

テキスト

テキス©

 

G1

 

 

《box,bor2,w4,h4,inline,bg#fff,bor3.5,p1》G1

G1

 

 

以下、作者メモでの文字埋め

 

1. マルの中にG と 1の文字がぶつかって入る演出を作りたいが、同じ位置にアニメーションを重ねるのが難しそう(?)

2. 高速で近づけて疑似的にぶつかったように見せる?

3. 演出を次々と更新していくのがとても難しそう。

4. 参考になりそうな他人のアニメ作りを知りたい

 

 

1. マルの中にG と 1の文字がぶつかって入る演出を作りたいが、同じ位置にアニメーションを重ねるのが難しそう(?)

2. 高速で近づけて疑似的にぶつかったように見せる?

3. 演出を次々と更新していくのがとても難しそう。

4. 参考になりそうな他人のアニメ作りを知りたい1. マルの中にG と 1の文字がぶつかって入る演出を作りたいが、同じ位置にアニメーションを重ねるのが難しそう(?)

2. 高速で近づけて疑似的にぶつかったように見せる?

3. 演出を次々と更新していくのがとても難しそう。

4. 参考になりそうな他人のアニメ作りを知りたい

 



目次 感想へのリンク しおりを挟む


しおりを挟む

ウマ娘の選択肢の画面

 

 

結果を見る
__
レースヘ

 

スキップ確認

レースをスキップしますか

! スキップしたレースは見返すことができません

 

レースを見る
____
結果を見る

 

育成データ削除

育成中のデータを削除します

よろしいですか?

! 消費したTPは返却されません

 

キャンセル
____
O_K

 

 

 

育成データ削除

TPを40消費して育成を開始します。

よろしいですか?

 

TP
__100____70

 

キャンセル
____
育成開始 !

 

育成データ削除

特定のイベントを短縮しますか

何度も育成しているトレーナーさんにオススメです。

 

TP
__100____70

 

SKIP ON
____
短縮しない !

 

 

育成データ削除

目覚まし時計を使用してコンティニューしますか?

 

所持
__19____18

コンティニューはあと 1 回可能です

育成修了
____
コンティニュー

 

 

 

SKIP ON
____
文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数文字数 !

《/box》

《/center》

 

 



目次 感想へのリンク しおりを挟む


しおりを挟む

時間に関係する特殊タグを自動生成するPythonのコード

貼った後で気づいたけど、ハーメルン、タブが消えるから、コピーした後、タブ(インデント)を手動で補完する必要がありますね……
タブをtransparentタグに変換してもいいですが……それでもまだ見にくいと思う……
いいアイデアがあったらコメントください。
タブの補完はそれほど難しいことではないと思いますが……


import math

import sys

from datetime import datetime, timedelta

from decimal import ROUND_HALF_EVEN, ROUND_HALF_UP, Decimal

from random import randrange

from string import Template

from typing import Optional

 

 

class Blink:

"""

オプションを選択して実行すると点滅のタグが自動生成される。

オプションの詳細は公公式ドキュメントを参照して下さい。

点滅させる文字はcontentという名称で指定してください。

すべてのオプションに対応しているわけではありません。

 

動作例

>>> Blink(content="ゴリラ")

ゴリラ

 

>>> Blink(content="ゴリラ", inview=True)

ゴリラ

 

>>> Blink(content="ゴリラ", start_ratio=10, end_ratio=50, loop_count=1,total_time=1, inview=True, forwards=True)

ゴリラ

 

>>> Blink(content="必要なオプションだけ指定して下さい。", loop_count=1,total_time=1, inview=True, forwards=True)

必要なオプションだけ指定して下さい。

 

<TODO> speed が 1より大きいときの動作のテスト。

<TODO> オプションを一個も指定しないとき<<blink>>が理想だが、実際には<<blink:>>で始まってるので':'を取り除く。

<TODO> inview, forwards 以外のオプションへの対応

"""

 

# ハーメルンに貼ると内容が評価されてバグるので、bl_inkにした。

template = Template("《bl ink:${options}》${content}《/blink》")

"""

def __init__(

self,

content: str | int = "hello",

start_ratio: Optional[int] = None,

end_ratio: Optional[int] = None,

delay_time: Optional[float | int] = None,

loop_count: Optional[float | int] = None,

total_time: Optional[float | int] = None,

inview: Optional[bool] = False,

forwards: Optional[bool] = False,

ext: Optional[str] = None,

):

self.content = content

self.range_option = (

f"v{int(start_ratio)}-{int(end_ratio)}"

if (start_ratio or start_ratio == 0)

and start_ratio >= 0

and 100 >= end_ratio >= start_ratio

else None

)

self.delay_time = f"d{round(delay_time)}" if delay_time else None

self.loop_count = f"l{round(loop_count)}" if loop_count else None

self.time_option = f"t{round(total_time)}" if total_time else None

self.inview_option = "inview" if inview else None

self.forwards_option = "forwards" if forwards else None

self.ext = ext

 

def _merge_options(self):

base_options = [

self.range_option,

self.delay_time,

self.loop_count,

self.time_option,

self.inview_option,

self.forwards_option,

self.ext,

]

 

return ",".join(list(filter(lambda item: item is not None, base_options)))

 

def _substitude_template(self):

return self.template.substitute(

options=self._merge_options(), content=self.content

)

 

def __str__(self):

return self._substitude_template()

 

@classmethod

def supply(cls, args):

return cls(**args)._substitude_template()

 

 

class FadeInSpeech:

"""FadeInSpeech.

 

長い文章をフェードインさせるとき、上記のBlink機能を使って一文字づつ表示開始時間を計算させるのは人間技ではないのでまとめて計算する。

content (文字列+一時停止), speed (文字ごとの間隔), delay_time, is_inview, is_forwards(公式ドキュメント参照)を指定できる。

 

使用例

>>> FadeInSpeech(contents="ゴリラ")

 

>>> FadeInSpeech(contents="hello/1.1/world",speed=0.1)

helloworld

 

一時停止について

一時停止は/{秒数}/を文字列に入れると動作する。

例えば"前/10/後"を文字列の中に入れると前を表示した後、10秒停止してから後が表示される。

/10/をコンテンツの中に入れると、10秒、そこで停止する。

なおspeed分の停止時間と一時停止の時間は加算されて処理される。

例えば『content='前/1/後', speed=1』の場合、「前」が表示されてから二秒後に「後」は表示される。

/1.11/などの少数も入力可能。

 

delay_timeについて

『content='前/1/後', speed=1, delay=2』と『content='/2/前/1/後', speed=1』は同義。

 

小数について

最終出力時にはすべてミリ秒まで四捨五入されるが、計算ロジックの中ではそれより先も保持しているので他の端数と合算しての繰り上がりなどが有効。

例えば『content='前/0.001/中/0.001/後',speed=0.001, delay=0.001』のような指定の場合、

「前」と「中」(内部的には0.003秒後)は0.00秒後に同時に表示されるが、「後」(内部的には0.005秒後)は0.01秒後に表示される。

 

contentsについて

list型を入れることもできる。

>>> FadeInSpeech(contents=["ゴリラ", "ラッパ"])

ゴリララッパ

ただし、listを入れた場合は、一時停止は正常に動作しない。

>>>FadeInSpeech(contents=["ゴリラ", "/10/", "ラッパ"])

ゴリラ/10/ラッパ

"""

 

def __init__(

self,

contents: str | int | list[str] = "hello worlds",

speed: int | float = 0.10,

delay_time: int | float = 0,

is_inview: bool = True,

is_forwards: bool = True,

ext: Optional[str] = None,

):

self.showing_time = len(contents) * speed

self.speed = speed

self.delay_time = delay_time

self.is_inview = is_inview

self.is_forwards = is_forwards

self.contents = contents

self.sleep_flag = False

self.ext = ext

 

def make_simple_blinks(self):

"""

簡単なロジックでブリンク郡を作る。

文字列が短いと正常に動作しないし、文字列が長すぎても正常に動作しない。

雑に実装するとこうなる。

 

抱えてる問題(解決方法はsimple_blinksを参照)

t(整数(>=1)、文字の表示にかかる時間の合計) を与えられると、tの時間を100等分にした上で一文字辺りの表示時間を計算し、各文字に開始時間を割り振る。

これでは、最小のtが1であるため細かな制御が効かない。例えば2文字だと、一文字の表示にかかる時間が0.5秒になりかなり遅い。体感、10文字以下でこの問題が顕著。

100等分なので文字が(t * 100)文字以上だと同時に表示させる必要のある文字が出てくる。(t * 100)文字以下であったとしても、文字が多めだと表現の幅が狭くなる。

"""

blinks = []

 

for index, content in enumerate(self.contents):

start_ratio = index * 100 // len(self.contents)

end_ratio = 100

total_time = self.showing_time

args = {

"content": content,

"start_ratio": start_ratio,

"end_ratio": end_ratio,

"delay_time": self.delay_time,

"loop_count": 1,

"total_time": total_time,

"inview": self.is_inview,

"forwards": self.is_forwards,

}

 

blinks.append(Blink.supply(args))

# print(blinks)

 

return blinks

 

def make_blinks(self):

"""

simple_blinksの問題を解消させたもの。

simple_blinksとの違い。

 

文字数が100文字を越えても表現の幅が狭まらないように、個別の文字に対して、全体の中の特定の文字、ではなく、別個に表示タイミングを計算している。

「100秒で完結する100個ロジックの10個目のブリンク」を「10個目のブリンクは10.00秒後に動作を開始するブリンク」に変換している。

そのため最短指定の秒数が一秒を切っている。(やろうと思ったら素数を活用したさらに細かな分割とかできるが、やりたくはない)

つまり「1秒で完結する2個のロジック(表示時間0.5秒)」しかできなかったのを「0.2秒毎に2文字をブリンクさせる」ができるようになっている。

あと、文の途中のスリープを有効にした。

"""

blinks = []

blink_work_time = math.ceil(self.speed)

sleep_count = []

sleep_delay: float = 0.00

is_sleeping = False

 

# contentsがlist[str]のときは、スリープ関係の動作が正常に動作しない。

 

for index, content in enumerate(self.contents):

# スリープ関係の処理に入るか

 

if content == "/" or is_sleeping:

# 開始、終了系か

 

if content == "/":

if not is_sleeping:

is_sleeping = True

 

else:

is_sleeping = False

sleep_delay += float("".join(sleep_count))

sleep_count = []

 

# スリープ時間の読み取り

elif is_sleeping:

try:

if content != ".":

float(content)

except ValueError:

print("多分、スリープのタグを閉じるのを忘れています")

sys.exit()

sleep_count.append(content)

 

continue

 

start_time = index * self.speed + sleep_delay

start_f, start_i = math.modf(start_time)

 

# <TODO> ここら辺りの処理、スピードが一秒より長いとバグりそう。

 

if start_f != 1:

start_ratio = round(start_f * 100)

blink_start_time = start_i

else:

start_ratio = 50

 

blink_work_time = start_i + 1

 

args = {

"content": content,

"start_ratio": start_ratio,

"end_ratio": 100,

"delay_time": self.delay_time + blink_start_time,

"loop_count": 1,

"total_time": blink_work_time,

"inview": self.is_inview,

"forwards": self.is_forwards,

"ext": self.ext,

}

 

blinks.append(Blink.supply(args))

 

return blinks

 

def __str__(self):

return "".join(self.make_blinks())



目次 感想へのリンク しおりを挟む


しおりを挟む

自動生成で作ったもののサンプル

 

ミノル

...

 

 

aa = "ー/0.2/ー/0.2/ー/0.2/ここは/0.3/『トレセン学園』。/0.8/皆の憧れ、/0.1/輝ける栄光の舞台、/0.1/『八大競争』を目指して走る/0.2/前途有望なウマ娘が数多く集い/0.1/競い合い/0.1/./0.2/./0.3/./0.4/そして/0.1/最後は/0.1/涙と共に去ることになる場所。"

 

i = FadeInSpeech(contents=aa)

print(i)

 

!

実況:4

解説:

 

h = FadeInSpeech(

contents="/1/実況:/0.2/すべてのウマ娘が目指す頂点、/0.2/日本ダービー!/0.8/レースもいよいよ終盤戦、/0.5/間もなく第4コーナーカーブ/0.4/解説:/0.2/ウマ娘たちがスパートに向けてどう動くか/0.1/目が話せません。"

)

print(h)

 

Blinkがかなり万能の道具になっています。アニメーションを作ったり、ストップウォッチを作ったりするときに、これを使い込なせれば作業がかなり楽になります。というより、これか、これと類似のプログラムを作らないと複雑な物を作るのは無理です。

「無理」というのは「面倒」というよりも「計算がやっかい」、暗算のレベルを超えるという問題に直面します。

 

Blinkの機能の一部を使ってダイアログを吐かせるのがFadeInSpeechの機能になります。

細かな仕様と動作の説明はソースコードの中にコメントで記載してあります。

Pythonの実行環境と基礎知識が必要なので、それがないと難しいかもしれませんが、わかる方なら一瞬で再現できると思います。

(よくわからなくても、ソースコードをコピーして、それをPythonで実行するだけで動くのでそれほど難しくありません。

ただその手順をすべて文字で書くと大変なのでここに書きません。ネットや知人、SNSとかでPythonの動かし方を聞いたり調べたりしてください。不明な点については、コメント頂ければ回答します。)

 

これがBlinkの最も簡単な実行例です。

以下の内容をソースコードに書きます。

b = Blink(content="hello world")

print(b)

 

ソースコードを実行すると、

hello world ←が生成されます。

 

動かし方がわからない方はコメントを頂けたら対応します。

 

FadeInSpeechについて、

BlinkとFadeInSpeechのソースコードをコピーして、ファイルとして保存して、その保存したファイルの下の方に、作成したい文字列と点滅スピードの指定などを書いてPythonで実行すればダイアログが、Pythonを動かしたパソコン上に生成されます。

例えば、下のように記載すると

 

melos = "メロスは激怒した。必ず、かの邪智暴虐の王を除かなければならぬと決意した。メロスには政治がわからぬ。メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。けれども邪悪に対しては、人一倍に敏感であった。"

# ゆっくりめ(0.33秒間隔)のセリフ生成

print(FadeInSpeech(contents=melos, speed=0.35))

# 普通のセリフ送り

print(FadeInSpeech(contents=melos, speed=0.05))

# 高速セリフ送り(0.01以下も指定できる)

print(FadeInSpeech(contents=melos, speed=0.01, delay_time=1))

# 文単位でのセリフ送り(「。」単位で二秒ごとに表示する)

print(FadeInSpeech(contents=melos.split("。"), speed=2))

 

 

メロスは激怒した必ず、かの邪智暴虐の王を除かなければならぬと決意したメロスには政治がわからぬメロスは、村の牧人である笛を吹き、羊と遊んで暮して来たけれども邪悪に対しては、人一倍に敏感であった

 

FadeInSpeechとBlinkに渡す値を調整すれば、結構なんでも作れます。

特に、文字の代わりに特殊タグを流し込んだり、ソースコードの中のextのオプションを活用すると色々作れます。(extオプションを使えば大概のことは実現できます)

高度な使い方の実例として作ったストップウォッチなどもあるのですが、使い方によってはバグるのでまだ公開していません。

必要ならコメント頂ければ急ぎで出すかも知れません。

このツールを使わずに、ハーメルンで表示時間の調整をミリセック単位で調整するのは人間にできることではないので、このツールを使うことを強くおすすめします。



目次 感想へのリンク しおりを挟む




評価する
※目安 0:10の真逆 5:普通 10:(このサイトで)これ以上素晴らしい作品とは出会えない。
※評価値0,10についてはそれぞれ11個以上は投票できません。
評価する前に
評価する際のガイドライン
に違反していないか確認して下さい。