C++をよく理解してCTRPFを作ろう

C++をあまり理解せずにCTRPFを作ってる人がやりがちなことをまとめてみました。

あるある

謎の変数

u32 a;やfloat l;などはやめましょう。わかりにくかったり、重複する可能性があります。

バラバラな命名

1つのCTRPFのソースコード内にスネークケース(set_moneyなど),キャメルケース(skipStoryなど),パスカルケース(LoadUserInfoなど)などが混合しているものをたまに見かけます。関数名や変数名などで分けられているのであれば構いませんが、関数名だけでバラバラにするのはよくありません。libctrpfは基本パスカルケースで書かれているのでそれに準じて命名しましょう。

Process::Write地獄

アドレスや値がバラバラな場合は構いませんが、
Process::Write32(0xC3D0BEC, 0xFFFFFFFF);
Process::Write32(0xC3D0BF0, 0xFFFFFFFF);
Process::Write32(0xC3D0BF4, 0xFFFFFFFF);
Process::Write32(0xC3D0BF8, 0xFFFFFFFF);
Process::Write32(0xC3D0BFC, 0xFFFFFFFF);
などのコードはループで書けるのでなるべくループで書きましょう。
見た目も悪くソースコードの量も多くなってしまいます。

謎のoffset

Process::Write系で、offsetを使ってるコードをよく見ます。本当に必要か考えた上、使用しましょう。また、offsetをグローバル変数にするのはやめましょう。

謎の0x

for文やProcess::Write系でたまに見るのですが、0x0とかはやめましょう。

Keyboardのif地獄

int choice = Keyboard("", {"", "", …}).Open();

if(choice == 0)
{

}
if(choice == 1)
{

}
などは汚いのでswitch文を使うことをおすすめします。breakを忘れないよう注意してください。また、配列を使うことによって処理を省略出来る場合もあるので省略できる場合はそうしましょう。

キモイ命名

Game_coinなど、大文字と小文字と_が混ざった命名はやめまょう。

goto乱用

gotoは便利ですが、可読性が著しく低下するので乱用はやめた方がよいです。多重ループから抜ける場合のみに使用するようにしましょう。

ローマ字だらけ

変数名や関数名がローマ字だらけなのも可読性が低下する原因です。英語が苦手でもなるべく英語を使うようにしましょう。

ガッタガタのインデント

どこかからコピペした際にインデントがズレることがよくありますが、放置するのは絶対やめましょう。これは可読性が低下するどころか読む気すら失せてしまいます。

番外編

黒魔術

ZN18CTRPluginFramework16PluginMenuSearch13_RenderBottomEv(search);
if(_ZN18CTRPluginFramework6ButtonclEv(cancelBtn))
_ZN18CTRPluginFramework16PluginMenuSearch18_cancelBtn_OnClickEv(search);
このようなコードのことです。
これ面白いし大好きなんですが、ほんとソースコードが汚くなるのでやめまょう。


以上のことを避けることでよいコードが書けるのではないでしょうか。他にもあれば是非教えてください。