コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
Soybeanman ◆SDLkyXUP6WqK
2022/12/15 17:11
情報交換
プチコンから移行するのにおすすめの言語
お久しぶりです。Soybeanmanです。
プチコンシリーズは任天堂のゲーム機上でゲームを比較的簡単に作成することができる類まれなソフトです。この肥沃な環境には知る人ぞ知る名作ゲームが数多くあります。
中には、そういった素晴らしいゲームをプチコンからPCなど他のプラットフォーム(PCやスマートフォン)に移植しようと考えている人もいると思います。また、プチコンから本格的なプログラミングを始めて、ゲームを作成できそうな別の言語をやってみようと考えている人も多いと思います。
そのうえで、移植しやすい言語・環境選びは学習コスト的にも作業効率的にも重要なものです。
そこで、プチコンから移行しやすそうな言語を学習コストや、対象となるプラットフォーム、実行性能などを踏まえて情報交換していきたいなと思い、このトピックで募集するに至りました。
体験談も大歓迎です!興味ある方はぜひぜひコメントしていってください!

コメント

アバター
Soybeanman 2022/12/15 17:25 ◆SDLkyXUP6WqK
まず、ゲーム開発の2大巨頭としてUnityとUnreal Engineがありますが、簡潔にまとめられている記事があるので張っておきます。
https://zenn.dev/daichi_gamedev/articles/unity-vs-unrealengine
どちらも多くの場面でグラフィカルに操作ができ、オブジェクトを配置したりできますが、プチコン的にはあまり慣れない感じがします。
その上、UnityはC#、Unreal EngineはC++で学習コストは高そうです。
Unityは日本語の解説サイトが多いらしいのでその点では安心できそう。
実行速度は実行する機械のスペックにもよりますがどちらも申し分ないでしょう。
対象プラットフォームは双方ともPC・スマホなどです。
アバター
Soybeanman 2022/12/15 17:34 ◆SDLkyXUP6WqK
個人的に体験してお勧めしておきたい言語・環境を2つ挙げておきます。
1. JavaScript(以降JS) と Pixi.js
JSはWebのフロントエンド側で使われる言語です。
型の明示的な指定がいらないのでプチコンに近い感覚で、HTMLの操作(DOM操作)を駆使したりCanvas要素内でいじったりすることでかなり自由に色々できます。
ドット絵のゲームを作りたいのであればおそらくCanvasの方が楽だと思います。
生のJSでCanvasをいじるのは割と骨が折れるので、Pixi.jsと呼ばれるライブラリで使いやすくします。
このPixi.jsの何が魅力的かというと、なんとプチコンでもおなじみのSprite機能が使えます。
実行速度もWeb上という制限はあるものの比較的早いのでおすすめです。
対象プラットフォームはブラウザが使える機器全般です。
アバター
Soybeanman 2022/12/15 17:40 ◆SDLkyXUP6WqK
2. C++ と Siv3D
C++と聞くと難しい印象がありますが、Siv3Dを使うことによって動的な配列をメモリを考えずに使えるようになったり、画像(Texture型)の表示をほんの数行でできるようになったりしてかなり楽になります。
Sprite機能は直接は提供されていませんが、自らクラス・構造体を作ることによって簡単に実現できます。
また、動作は少々遅くなるものの、物理演算が元から入っており、簡単に物理演算を用いたゲーム(動物タワーバトルとか壺おじさんみたいな感じ)ができるようになっています。
実行速度はC++にしては遅いとは思いますが十分早いと思います。
対象プラットフォームはexeファイルを実行できる環境全般です。
アバター
Soybeanman 2022/12/15 17:46 ◆SDLkyXUP6WqK
ここまで挙げてきた言語は全て、クラスなどのオブジェクト指向的な要素が必要となっています。そのため、一概には学習しやすいとは言いにくいですが、慣れればむしろ楽になってくるものでもあります。
また、これらの言語はドット絵の表示には自動アンチエイリアス機能のせいで一工夫が必要ですが、基本的には調べれば解説などがあるので心配はいらないでしょう(Pixi.jsは私の方で雑な解説Qiitaを出しています。Siv3Dは情報が少ないため色々探す必要がありますが……若干はつかんでいるので興味ある方はコメントください)
アバター
Soybeanman 2022/12/15 17:55 ◆SDLkyXUP6WqK
移植するとなるとデフォルトのGRPとかは書き換えが必要そうなのでそういう面でもかなり大変そうですね……自作GRPを移すにしてもプチコン3号あたりはちょっとした機械いりますし……
アバター
Soybeanman 2022/12/15 18:02 ◆SDLkyXUP6WqK
トピックを見ていたらあまさとしおんさんがプチコンからJavaScriptへの移植について話されていたので置いておきます。
大規模なプログラムになってくるとこういう方法で機械的に移植できた方がよさそうですね。
プチコンは独自の命令が多いので網羅しきれるかどうか、また、挙動を再現できるかがかなりキモになりそうです。
http://petitverse.hosiken.jp/community/petitcom/topic/?read=1759&ukey=1
アバター
こういち 2022/12/16 1:02 ◆ou0jbJnEJ0Kb
C++とHLSL(DirectX9)
実際にサンプルゲームを移植している人が居るってのは大きいですね。
魅力的なのは何と言っても圧倒的実行速度。
特にSPANIMの速度を再現するにはこれ以外の選択だと厳しいかもですね。(しかも場合によってはSPFUNCをSPANIM級の速度で実行できる)

移植した本人は相性悪いみたいに言っていましたが、個人的にはそうでないと信じたい。(命令とか原理を揃えろうとしたってのもあるとは思いますが)
https://twitter.com:443/Serbonis/status/1292294410198106113

反面、学習コストは高めだとは思います。(言語選びやサイト/書籍選びに手間どったってのはある)
特にこの古文書的本が無いと結構厳しめですね。(恐らくこれなしでやってた中学生も観測しましたが)
https://www.kohgakusha.co.jp:443/books/detail/978-4-7775-1687-2

対象プラットフォームはWindowsXP以降のWindows NT。
Wineが使えれば恐らく他のOSでも行ける。(ただし、CPUはIntelまたはAmdに限る)
アバター
Na 2022/12/17 16:52 ◆QoELVrBXBQCI
pythonとpygame
プチコンからの移行ならpythonが学習コスト低くて良いと思います。
文法的に注意すべきなのはforの書き方、あとgotoは無いってことくらいですかね。

pygameは2Dゲーム制作に特化したライブラリで、プチコンに近いところで言うとスプライトの描画機能、BGM、SEの再生、マウスやキーボードの入力の取得ができます。spfunc相当のことも可能です。
BGは無いです
MMLは当然無いです(wav, ogg, mp3の再生機能がある)
文字を表示したかったらフリーフォントをダウンロードするなどして用意する必要があり
spscale, sprot(spangle), spanimあたりは自前で実装する必要があります(スプライト自体に拡大や回転機能はなく、元画像を拡大回転する必要がある)
あとは画面のサイズを変更したときに自動で画面全体が拡大されるとかそういう機能はないので、それも自前でやるか画面サイズは固定にするか(逆に言うと勝手にアンチエイリアスがかかることはないです)

実行速度はあまり速くないですがよっぽど低スペックなpcじゃない限りプチコン3号よりは高速だと思います。
自分はプチコンで作った音ゲーをpygameに移植したんですが、問題なく60fpsで動きました。
pythonが使える環境ならWindows, Mac, Linuxどれでも動きます。
WebAssemblyに変換してブラウザで動かすpygbagというライブラリがあったので試してみたんですがそれはさらに速度が遅くて微妙。
アバター
あきと 2022/12/18 13:01 ◆Bz8zeG7wRHNQ
Processingとp5.js
Processingはプログラマーではない人に向けてデジタルアートなどの製作環境構築のために作られたプログラミング言語です。
Javaで動作するためWin,Mac両方で動作します。
命令もかなり単純化されていてクラスを作らなくてもメインループは動作します。
近年はJavaの動作環境がない人もいるためProcessingの命令をJavaScript環境、つまりブラウザ上で実行できるようにしたp5.jsというのも誕生しました。これはテキストエディタでHTMLファイルの中にソースを書くだけで動きます。
アバター
Soybeanman 2022/12/19 10:51 ◆SDLkyXUP6WqK
皆さんコメントありがとうございます!
まだ調べきれてないのですが、少し調べてみて関連がありそうな箇所があったので参考資料として載せておきます。

1.C++におけるHLSLとSiv3D
実は、DirectXシリーズ上で使用できるシェダーであるHLSLはSiv3Dでも使用可能です。
https://zenn.dev/reputeless/books/siv3d-documentation/viewer/tutorial-shader2d
日本語でのDirectXの学習コストは確かに高いと言えるので、シェダーだけHLSLにしてDirectXには及ばないにしろある程度の実行性能をSiv3D上で実現する、という策もありそうです。

2.pythonにおけるpygameとprocessingの違い
processingもpythonで記述できるのですが、大きな違いとして、
・pygameは描画ループの入退出などを自分でこねくり回せるのに対して、processingはdraw()ですでに指定されているので入退出は少し面倒
・その代わり、processingはsetup()とdraw()の中身さえ書けば動く!
というのがありそうです。これはゲームの場面(タイトル、メインゲーム、オプションなど)が変わるかどうかを鑑みてケースバイケースで選ぶのがいいんじゃないかなと個人的には思います。

3.javascriptにおけるp5.jsとPixi.js
実行速度を測った記事があったので貼っておきます。
https://ics.media/entry/201/
ただ、Windowsのベンチマークに関してはWindows8のIE10などという呪物で測定しているので再検証が必要かもしれません。
アバター
背丈五郎 2022/12/19 19:02 ◆hlwYt/GJN8x1
haskellとfree-gameとか如何でしょうか?
関数型に早期に触れておくことは、他の型のプログラミング言語でも、副作用を気にしながら、綺麗に書く技術を身につけられると思います。

あまり実行速度も早くないし、学習コストも高いですが…
アバター
nennneko5787 2023/1/5 18:52 ◆.CjQnI/yW/tD
HSP3はどうでしょう?
プチコンに似た感じでできます
アバター
こういち 2023/3/6 12:39 ◆ou0jbJnEJ0Kb
HSP3は確かまじっくすと〜り〜2の開発に使われてたやつですね。HSP3とKuinはプチコン勢に人気な印象。

mmlの移行について
mmlに拘るなら移行先は僕の知る限り2択。
サクラmml(csakura)かmml2vgm
どちらもwavを直で吐けませんが、汎用性とかを考えるとmidiを吐けるcsakuraの方が便利そうです。あとは対応プラットフォームでもサクラに軍配が上がりますね。(なんならブラウザから書ける)
midi→wavの変換はtimidity++がセオリー。
あとは、作曲というより楽譜作成ソフトですが、lilyPondもmmlに似た文法でmidiを吐くことが出来ます。(と言っても結構違いますが)
アバター
Na 2023/3/7 22:09 ◆QoELVrBXBQCI
アバター
亜種の人 2023/3/9 10:02 ◆OoGIuUBTo25/
3DSから録音するならノイズ乗っちゃうけど普通に録音してもいいんじゃない
アバター
こういち 2023/3/10 12:32 ◆ou0jbJnEJ0Kb
mml2mid
初めて知りました。文法はこっちの方がSmileBASICのmmlに近いですね。
コンパイルが速そうなのは高ポイント。あとは文法の好みですかね。
サクラは好みではありますがエンベロープの調整が難しそうだと思ってた(関数があるのである程度なんとか出来ますが)ところなので、mml2midもちょっと見てきます。
アバター
こういち 2023/3/22 21:26 ◆ou0jbJnEJ0Kb
mml2mid少し調べました。
結構書きやすそう。デフォルトでフレーズごとに書けるのが好印象。
とは言え、和音に関してはサクラに軍配が上がりますね。まぁ曲全体を通して和音を使うとか、チップチューンで和音を使わないとかなら関係ないですが。
そしてエンベロープはmml2midの方がやりやすそう。あとフィルタのカットオフが気になります。
歌詞の埋め込みは見当たらないので、埋め込みたいならサクラですかね。サクラのそれはズレが酷いですが。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -