20241217 -GMLと戦おう

vs ぼやけるフォント
ぼやけるというか、汚くなるフォントとの戦い。

New Tegominという、本来はとても美しい明朝体フォントのはずなんですが、GMSにインポートすると何故か文字の周りに謎のカスが出てしまいます。本来は綺麗なはずの部分が途切れたり、掠れたりしてしまうし…。

「お」の右下の小さいカス、「は」の右の看過できないカス、潰れすぎて単体だともはや読めないレベルの「よ」、「。」の横にも小さいカス…。うーん、ひどい。

GMS2のビットマップ変換機能がクソすぎるせいでこうなってしまうのです。ちなみにこのフォントに限った話ではなく、アンチエイリアス前提のフォントは大体こうなります。

文字サイズを小さくすればカスは出ないが、文字までノミサイズになってたら世話ないですね。あと「る」や「間」を見る限りこのサイズでもなお潰れてるな。最悪だ~

等幅フォントじゃないのがいけないのでは?とか、ビットマップ変換を他のソフトでやればいいのでは?とか、カーニングの値をいじれば少しはましに…とか七転八倒四苦八苦して試行するものの、寝ても覚めても取れないカス。
誰か助けて~このフォントに惚れたんだよこれがいいんだよ~;;


ググっても何もいい情報が出ないしもうだめか…と諦めムードでいたが、ふと「GMSがダイナミックフォントに対応してるみたいなみたいな話は出てないかなあ」と「gamemaker dynamic font」でググってみる。

https://stackoverflow.com/questions/73575082/dynamic-font-size-in-gamemaker-without-loss-of-resolution
題:『GameMakerで解像度を落とさずにダイナミックにフォントサイズを変更できる』

思っていたのとは違う内容だったが、このページの中に、「draw_text_transformed」関数を使うと文字のサイズが(ぼやけるけど)大きくできるよね的なお話がありけり。
何それ…知らん…怖…

文字表示に使っているdraw_text関数をdraw_text_transformed関数に置き換え、フォントを12px(ノミサイズ)に設定し、タテヨコのサイズをそれぞれ2倍にしてみる。24pxだお~(^ω^ )

できるじゃん。綺麗に拡大できるじゃん!!!!
上のページを書いた人感謝するよ カスを取り除き完全復活だ

アンチエイリアスOFFにしても綺麗に出せる。
あ~嬉し~~~


vs ふりがな
ムフフ見て見て
ワシの実装したふりがな機能

GIFが再生されないときはクリックするとうごきます

普通のテキストと同様のスクリプトで実装。文字数限界を確かめるためにちょっとサンプルテキストを工夫。現状では、全角29文字が1行の最大文字数であることを確認。
テキストは一個のオブジェクトとして生成しているので、できればルビも同じオブジェクト内のコードで実装したかった…。

例えば
[もも]から生[う]まれた桃[もも][た][ろう]
てな感じに記述すると[]内の文字列がルビとしてひとつ前の文字の上に出る、みたいな仕様。

やろうと思えばできたんだろうが、元にしたコードがあまりにも堅牢すぎて改造するには私の腕が足りませんでした。よって、普通のテキストを生成するとそれに伴ってルビも別個のオブジェクトとして生成される仕様にし。ルビは小さめの文字&テキストより上の位置&テキストより早く送られる、というコピー仕様でご安全に実装。

いやあ何とか実装できてよかった…。

テキスト

対応ルビ

いや、こんなのいちいち書くとかやってらんないから!!!
だから上の[]使った仕様にしたかったんだよなあ。まあ…実際にゲームで使うとしたら、ごく一部の単語に留めるかな。ちょっと難しい単語使いてえ!でも初見じゃ読めない人が大半だろうな!ってところにだけ使う。

フリガナなんてものが必要な辺り、やっぱ日本語ってめんどくさ…しかしそこがいい!!
表意文字と表音文字とがそれぞれに特化した性能で存在してるのがすごいと思うのよ


こういうのを作れたのはいいんだけど、どうやってNPCや看板にこれらを効率よく割り振ればいいのかが全然わからない…。当然みんな違うテキストを割り振ることになるが、オブジェクト依存は避けたい。番号を振ってcase分けするのが一番楽だろうか?

つーか…GMS2はこの程度のテキスト機能はデフォルトで出来るようにしといてくれよ!腐ってもゲームエンジンでしょうが!今のところ車輪の再発明でしかねーんだよ!まっそれが楽しいからバランスは取れてるんだけどね