विकास गाइड
यह दस्तावेज़ बताता है कि jrpm पर आगे कैसे विकास करें। सभी पैटर्न इस परियोजना में वास्तव में कार्यान्वित कोड से आते हैं (git log में कमिट के साथ तुलना करें)।
कोड संगठन त्वरित अवलोकन
| निर्देशिका | जिम्मेदारी |
|---|---|
src/ | सभी C++ स्रोत कोड (शीर्ष स्तर सिस्टम के अनुसार नामित: rail_cmd.cpp, group_gui.cpp…) |
src/network/ | नेटवर्किंग (सर्वर/क्लाइंट/UDP/HTTP/सामग्री डाउनलोड) |
src/script/ | स्क्रिप्ट फ्रेमवर्क (Squirrel); api/ AI/GS API क्लासेज़ |
src/table/settings/*.ini | सेटिंग परिभाषा स्रोत (settingsgen कोड उत्पन्न करता है) |
src/lang/english.txt | स्ट्रिंग परिभाषाएँ (strgen उत्पन्न करता है) |
src/sl/saveload_common.h | सेव संस्करण (SLV) एनम |
bin/ai/ | AI स्क्रिप्ट (GlobalAI उदाहरण) |
सामान्य विकास पैटर्न
- नया गेम कमांड जोड़ना: कमांड एनम +
DEF_CMD_TUPLE_NT+ हैंडलर + GUI/कंसोल प्रवेश बिंदु - नई स्क्रिप्ट API जोड़ना:
script_*.hpp/.cpp(स्वचालित Squirrel बाइंडिंग पंजीकरण) - नई सेटिंग आइटम जोड़ना:
.ini+settings_type.hफ़ील्ड + स्ट्रिंग
निर्माण
bash
cmake -B build ..
cmake --build build -jविकास नोट्स
- एन्कोडिंग: चीनी स्रोत कोड/दस्तावेज़ बदलने के बाद UTF-8 पर ध्यान दें (स्थानीय Write/Edit उपकरण ने GBK एन्कोडिंग उत्पन्न की थी,
jgrpp-features/_fix_utf8.pyसे ठीक किया जा सकता है); - कमिट संदेश: अंग्रेज़ी सुझाव (टर्मिनल एन्कोडिंग समस्याओं से बचने के लिए);
- कमांड एनम में मध्य सम्मिलन बाद के कमांड ID को स्थानांतरित करेगा — पुराने संस्करण बाइनरी और नए संस्करण मल्टीप्लेयर में असंगत होंगे, यह fork के अंदर सामान्य है, अपग्रेड करते समय समकालिक रूप से करें;
- सेव संस्करण: सेव संरचना बदलते समय
src/sl/saveload_common.hमें नयाSLV_*आइटम जोड़ें औरSAVEGAME_VERSIONअपडेट करें; - नई फ़ाइलें:
.cppको संबंधितCMakeLists.txtस्रोत सूची में शामिल करना होगा (src/CMakeLists.txtया उपनिर्देशिका/script/api/CMakeLists.txt);script_*.hppfile(GLOB)द्वारा स्वचालित रूप से खोजा जाता है, पंजीकरण की आवश्यकता नहीं; - नई स्ट्रिंग:
src/lang/english.txtमें जोड़ें (अन्य भाषाएँ डिफ़ॉल्ट रूप से अंग्रेज़ी पर वापस आती हैं); - NewGRF/सेव संगतता:
_openttd_content_version/ NewGRF संस्करण संख्या बदलते समय सावधानी बरतें (मल्टीप्लेयर और सामग्री संगतता को प्रभावित करता है)।
प्रतिगमन सुझाव (महत्वपूर्ण)
वर्तमान शाखा वास्तविक मशीन पर संकलित नहीं की गई है, पहले निर्माण के बाद इस क्रम में प्रतिगमन करने की सिफारिश की जाती है:
- आधार:
openttd-jrpm -vjrpm-0.1.0दिखाता है; - सेव: एकल खिलाड़ी में 1-2 साल खेलें;
- मल्टीप्लेयर: jrpm क्लाइंट आपस में जुड़ें; jgrpp/pxp क्लाइंट जुड़ें;
- नई सुविधाएँ: लोकोमोटिव डीकपलिंग (डीकपल/अटैच/उल्टा), मॉड्यूलर एयरपोर्ट (लेआउट संशोधन), समानांतर डाउनलोड, स्वचालित समूहीकरण, निर्माण टूलटिप, GlobalAI;
- पुरानी सुविधाओं का प्रतिगमन: सिग्नल, tracerestrict, शेड्यूल्ड डिस्पैच, टेम्पलेट प्रतिस्थापन।