درس تعريب الألعاب من الألف للياء

درس تعريب الألعاب من الألف للياء


كتابة: منصور

نسخة: 0.2


لا بد أن لديك عدة ألعاب مفضلة لديك تود رؤيتها باللغة العربية.

لكن هيهات! عدا محاولات محتشمة من بعض القراصنة في وقت صخر و كمبيوتر العائلة، فحتى الشركات التي كان لديها تمثيل رسمي في العالم العربي (مثل شركة سيغا في التسعينات)

آثرت تجنيب نفسها عناء ترجمة برامج ألعاب الفيديو إلى اللغة العربية مفضلة بضع الصفحات المترجمة في كتيبات مرفقة، هذا إن اعترفت بالعالم العربي أصلا.


ربما نلتمس العذر لهذه الشركات نظرا أن تلك الشركات و لإعتبارات إقتصادية تتعلق بوضعية السوق أولا و بكلفة الترجمة ثانيا،

فغالبا بالكاد كانت الألعاب تترجم إلى لغات عدا الانكليزية، لو ترجمت إليها أصلا.

و بالطبع هناك العامل التقني الذي لا يخفى على أحد الذي يجعل اللغة العربية صعبة الترجمة.


لكن البكاء على الأطلال و طلب تعريب ألعاب قديمة من هذه الشركات لا تستغلها تجاريا (حتى لو كانت "قديمة" تعني عمر سنة أو اثنتين) لا جدوى منه.

فالرد الرسمي شيء من هذا القبيل (لا تعيروا التعاليق اهتماما):



(لن نسمع كلام شركة أوبيسوفت طبعا)


إذن، فالحل – شأنه شأن عدة أمور في هذه الحياة – هو أن تعول على نفسك و تصنع هذا التعريب بنفسك لو كنت تريد أن تراه حقيقة،

عوض أن تنتظر أن يأتي من يقوم به عوضك، أو من يقول لك أنه مستحيل أو مضيعة وقت

و أن جهودك من الأفضل كي لا تضيع هدرا أن توظفها على لعبة أونلاين رديئة من سقط المتاع يقوم هو باستغلالها تجاريا من وراء ظهرك،

و أنت تعمل شيئا لا تحبه و لا تربح منه شيئا كالمغفل.


إن كنت تريد شيئا قم به بنفسك، و لا تقم بشيء أنت تعرف أنك لا تحبه.


لكن ما الذي يعرقل التعريب إلى اللغة العربية؟ لنرى ما لدينا...


  • رسم الحروف العربية غير موجود في الألعاب

  • الحرف العربي يتغير شكله حسب مكانه في الجملة، أي أن كل حرف لديه 4 "محارف" مختلفة

  • نتيجة لما سبق، فعدد الرموز المطلوبة لتمثيل كل المحارف يفوق 100 رمز

  • العربية تكتب من اليمين الى اليسار، عكس اتجاه لغات جل الألعاب

  • التشكيل فوق الحروف

  • عندما أحاول تعويض الكلام الإنكليزي في ملفات اللعبة بواسطة Notepad و أضع كلاما بالعربي فالملف يخرب و لا يعمل،

لأن العربية المستعملة في الكمبيوتر تستخدم Unicode و أغلب الألعاب لا تعترف بذلك بل فقط بنصوص بالإنكليزية فقط.


طلب صغير: لا تستخدموا Notepad الموجود في الويندوز (لم أقل Notepad+، ذلك برنامج مختلف) لتغيير ملفات أي لعبة ليست بصيغة txt،

خصوصا اذا رأيتم رموزا غريبة في أول النص.

تلك الرموز الغريبة لا يقرأها النوتباد جيدا و ان سجلتم فانه يخربها،

لكن تلك الرموز الغريبة هي في الواقع موجودة هناك لأسباب وجيهة و اللعبة تحتاجها.


هذه العراقيل كثيرة. لكن كما سنثبت لكم من خلال هذا الدرس، فالتغلب عليها غير مستحيل.

سنتحدث عن كل واحدة من هذه العقبات بالتفصيل و كيف نتجاوزها و الباقي عليكم لإنتاج نسخ عربية من ألعابكم المفضلة لأي جهاز.

و ليس بالضرورة كمبيوتر العائلة (النيس) فقط، بل أي لعبة لأي جهاز، طالما تمكنتم من ايفاء هذه الشروط الثلاثة:


الشرط الأول: أن تتمكن من فتح ملف برنامج اللعبة بعد تغييره، لتتمكن من تجربته.

هناك ألعاب عليها برمجة مكافحة قرصنة تمنعها من العمل بعد تغيير ملفاتها.

هذا الشرط أيضا يمنع ترجمة أي لعبة لجهاز كونسول لا يمكن فتح ملفات ألعاب غير رسمية عليه.


الشرط الثاني: أن تتمكن من تغيير رسوم اللعبة. و تحديدا ملف الصورة الذي به أشكال الحروف.

اللعبة تحتوي فقط رسوم الحروف الانكليزية،

مثل دائرة لحرف O،

دائرة غير كاملة للحرف C،

خط عمودي عليه نقطة للحرف i، إلخ ..


لكنها لا تحتوي رسوم الحروف العربية،

و هو رسم لم يضعه المبرمجون (في 99% من الحالات، لكن اعترضتني استثناءات نادرة) و عليك أن تضيفه بنفسك.


الشرط الثالث: أن تتمكن من تغيير نصوص اللعبة.

نصوص اللعبة تشمل الحوارات و ما الى ذلك.

هذه النصوص ستستعمل رسوم الحروف التي في صورة الخط.

قد تكون هذه النصوص مخزنة بطرق... غريبة.

من النادر أن تجدها ملفات txt جاهزة كما تعودت في الكمبيوتر. كيف ستجدها؟ هذا أمر سنحاول الاجابة عنه.

طبعا هناك عدة ألعاب تستعمل صورا عليها النص جاهزا، و في تلك الحالات عليك تغيير الصورة، لكن ذلك أمر آخر.


هناك احتمال وارد جدا أنه قد تعترضنا طبعا حالات لا نجد فيها لا الرسوم و لا النصوص.

أو بالأحرى، لا نعثر عليها بشكل واضح في الملفات.

لكن المنطق يقول أن اللعبة لا تأتي بنصوصها و خطوطها من العدم و أن هذين العنصرين موجودان حتما في الروم بشكل أو بآخر.


السبب هو أن بعض الأجهزة تقوم:

  • بالتشفير encryption: يتمثل في تعتيم البيانات لغرض التعتيم لا غير.

الغاية هي حماية البيانات من السرقة أو التعديل.

  • بالضغط compression: يتمثل في تعويض أي بيانات تتكرر باختصارات أقصر.

الغاية هي تقليص حجم بيانات النص و الخط.

كما تعلمون فسعة كارتردج أو قرص اللعبة محدودة بالضرورة و استعمال أحجام أكبر قد يكون مكلفا و غير مربح تجاريا،

أو قد يكون غير ممكن أصلا بسبب امكانيات الجهاز.


هذه العوائق طبعا تمنع التعديل المباشر على الخط أو النص.

كي نتمكن من تحقيق شروط التعريب علينا ايجاد حلول لهذه النواحي،

مع ذلك لن نخوض في هذه الحلول فورا، و سنحاول التعامل مع أمثلة لا تستعمل التشفير أو الضغط لتخزين بياناتها في مرحلة أولى.


سبب تفضيل الكثيرين للعمل على ألعاب النيس، الجيم بوي أدفانس، و النينتندو دي اس،

هو كونها مثالية للمبتدئين و مبرمجو الألعاب لديهم فسحة من الحرية لعمل ما يريدون دون استعمال هذه الأساليب

(أو في حالة النيس، كون استعمال هذه الأساليب يستهلك موارد كبيرة من الجهاز على حساب أمور أخرى أهم في اللعبة).

لا يمنع هذا وجود ترجمات لأجهزة أخرى، بالعكس!


السوبر نيس كانت أغلب ألعابها تنشر على شكل كارتردج محدود السعة و باهظ الكلفة ...

لذلك كان المبرمجون يضغطون أي شيء في اللعبة لربح الحيز المكاني.

المشكل تفاقم أكثر مع النينتندو 64 نظرا لكون سعة الكارتردج لم ترتفع كثيرا لكن الحيز الذي تتطلبه ألعاب ثلاثية الأبعاد ازداد بشكل هائل.

البلاي ستايشن كانت تستعمل أقراصا ضخمة لكن سرعة قراءة القرص كانت مشكلة،

لذلك كان يتم حشر البيانات الضرورية في قطاعات من القرص كي يتجنب بطئ تحميلها. ما يعني أن مشكلة الضغط لم تختف تماما...


لكن التشفير و الضغط ليسا بالعقبات المستحيلة التي تحكم بالإعدام على أي أحلام لتعريب هذه الألعاب.

فأولا استعمالها من عدمه يختلف مع كل لعبة.

و ثانيا، فاللعبة عندما تعمل، و لكي تستخرج هذه البيانات، عليها بالضرورة أن تتجاوز هذه العقبات.

كل ما عليك اذن هو أن تراقب في المحاكي ماذا تفعل تلك اللعبة لفك البيانات، و نطبق تلك الطريقة بأنفسنا. لكن ذلك آخر شيء سنتحدث عنه ان شاء الله.


الباب الأول: كيف تخزن اللعبة بياناتها


الألعاب عدة أنواع. لدينا لها عدة تسميات:


  • الروم ROM: هي للألعاب التي أتت في كارترج أو شرائح.

مثلا نذكر كمبيوتر العائلة (النيس) و السوبر نيس... اضافة الى أجهزة نينتندو المحمولة مثل الجيم بوي، ال GBA (جيم بوي أدفانس) و النينتندو دي اس...

السيغا أيضا استعملت الكارتردج مع أجهزة الماستر سيستم، و الميغادرايف، و كذلك الحال لشركات أخرى.


  • الايزو ISO: للألعاب التي أتت على شكل أقراص CD أو DVD أو بلو راي و ما لذلك.

لعل أشهر الأجهزة التي استعملت الأقراص هي سلسلة أجهزة البلاي ستايشن لشركة سوني.


  • هناك الألعاب التي نشرت على الكمبيوتر سواء عن طريق خدمات التحميل أو الأقراص و غير ذلك،

لكن لن نتحدث عنها كثيرا باستخدام المصطلحين السابقين.


هذه الملفات تم استخراجها Rip بأجهزة خاصة، من أقراصها أو شرائحها الأصلية المعرضة للتلف،

كي تخزن بياناتها على الكمبيوتر بشكل كامل يطابق محتوياتها الأصلية.

يمكنك ان تستخرجها بطريقة شرعية من كارتردج او قرص عندك

(في الواقع لو كانت عندك لعبة نادرة، مثل نسخ عربية من ألعاب البلاي 2 فعليك عمل ذلك لحفظها من التلف)

أو أن تحملها من الانترنت بطريقة "غير شرعية" و ذلك بالذهاب لمحرك بحث و كتابة اسم اللعبة متبوعا ب rom أو iso.


يمكن تجربة هذه الملفات و تشغيل الألعاب فيها سواء بأجهزة خاصة (مستعملة عادة للقرصنة) مرتبطة بجهاز اللعبة الأصلي،

أو تشغيلها على الكمبيوتر ببرنامج خاص بكل جهاز اسمه المحاكي Emulator.

و هذا البرنامج يحاول (و أحيانا لا ينجح كليا) تقليد عمل الجهاز الأصلي بحذافيره

و بالتالي سيشغل لك اللعبة كأنها تعمل على الجهاز الأصلي.


جل أجهزة الألعاب لديها محاكيات تستعمل على الحاسوب،

لكن هناك أيضا نسخ محاكيات تعمل على أجهزة أخرى،

مثل خدمة Virtual Console لشركة نينتندو

و هي محاكيات لأجهزة قديمة لكنها تعمل داخل أجهزة مثل Wii.

و هناك محاكيات من برمجة الهواة homebrew برمجت بشكل رسمي لمستخدمي أجهزة أخرى.

بهذه الطريقة يمكنك تجربة عمل محاكي داخل محاكي داخل محاكي... لو أردت.

بالنسبة لمعرب الألعاب، و لأسباب تقدم ذكرها، فمحاكيات الكمبيوتر هي المحبذة أكثر.


مثال: محاكي FCEUX ، و هو محاكي لجهاز النيس موجه للاستعمال على أجهزة الكمبيوتر.

موقع emucr فيه أحدث نسخة منه متوفرة للتحميل.


و كي نجربه، ابحثوا في الغوغل عن روم لعبة Mega Man 4.

نفتح المحاكي و نختار File ثم Open و نختار الروم التي نريدها.


اللعبة تشتغل عندئذ.


مقود تحكم جهاز النيس الأصلي ليس لوحة مفاتيح، بل به فقط بعض الأزرار.

كي نضيف تلك الأزرار للوحة المفاتيح و نتمكن من تجربة اللعبة و التحكم بها على جهازنا الجديد...

نبحث عن اختيار "تغيير الأزرار"، في قائمة فيها كلمة Input أو Joypad أو Gamepad أو Controls.


في حالة FCEUX يمكن دخول ذلك عبر Config ثم Input.

و بذلك نفتح نافذة جديدة يمكننا اسناد زر لوحة مفاتيح لنعوض به كل زر من مقود التحكم.




و بعد أن انتهينا من كل هذا، يمكننا التحكم كليا في اللعبة و تجربتها كما نريد:




سنبحث عن بعض البيانات التي في اللعبة، و التي تستخرجها من الروم و تعدل عليها باستمرار لإستعمالها أثناء تشغيل اللعبة و ذلك بتخزينها في الذاكرة الحية أو الرام RAM.


سنجرب الآن اذن كيف نقوم بتغيير قيمة في الذاكرة الحية للعبة.

و لذلك الغرض، سنصنع كودا للغش.

سنختار مثلا البحث عن مستوى طاقة ميغامان، و صنع كود غش له كي لا ينقص أبدا.


نذهب إلى Tools ثم Cheats كي تفتح لنا هذه النافذة:



أولا، حالة طاقة ميغامان عندما بدأنا = مستوى طاقة كامل.

نضغط Reset في نافذة Cheat Search كي نعلن للمحاكي نيتنا البحث عن كود غش.



على اليمين ظهرت كمية هائلة من العناوين.

العناوين هي مربعات ذاكرة في الذاكرة الحية تخزن فيها قيم عددية، و احدى هذه القيم هي مستوى الطاقة!

نظرا أن لدينا 10240 احتمال، فالبحث فيها كإيجاد ابرة في كومة قش.


هل نعرف كم القيمة الحالية بالضبط للطاقة كي نتوصل مباشرة للعنوان المطلوب؟

نحن لا نستطيع بالعين المجردة (او لا نريد أن نتعب أنفسنا) أن نحسب كم من سطر في مقياس مستوى الطاقة في شاشة اللعبة.

و قد يكون ذلك المقياس غير دقيق. لذلك نحن لا نعرف القيمة بالضبط. لن نستعمل اذن Known Value.


إذن، لمعرفة هذه القيمة، يجب أن نجعلها تتغير، ثم نقوم بالبحث بالمقارنة (ما يسمى Relative Search في برامج أخرى).

نكرر ذلك الى أن نحصر الشبهة في عدد صغير جدا من العناوين تتغير قيمها بهذه الطريقة بالضبط، ما لا يمكن أن يكون مجرد صدفة.

و لنقوم بذلك نقوم بالمراحل التالية.


نعود الى نافذة اللعبة، و نجعل ميغامان يمشي قليلا و يصاب بضرر بسيط يجعل قيمة مقياس الطاقة تتغير و تنقص.



نعود لشاشة البحث، من Tools ثم Search.

نحن نعرف أن قيمة العنوان المطلوب نقصت عن قيمتها آخر مرة ضغطنا فيها زرا في هذه النافذة.

إذن نضغط Less than.



النتائج أقل بكثير!

نعود الى اللعبة، و نحاول هذه المرة أن نجعل ميغامان يمشي في المستوى بدون أن يصاب بأي أذى.

و كذلك، بدون أن يعالج نفسه.

نريد أن تظل القيمة كما هي لا تتغير.

ثم نعود لنافذة الغش مرة أخرى.

نحن نعرف أن قيمة العنوان المطلوب تساوي قيمتها آخر مرة ضغطنا فيها زرا في هذه النافذة.

إذن نضغط Equal.



النتائج تتناقص أكثر، و قد نتوصل أخيرا لموقع العنوان المطلوب!


نعود الآن للعبة.

ماذا لو تعمدت الخسارة الآن في اللعبة؟

عندما أخسر و أعيد من جديد، مقياس الطاقة قيمته عادت لحدها الأقصى.

ما يعني أنها أكبر من قيمتها آخر مرة بحثت فيها.


ثم نعود لنافذة الغش مرة أخرى.

نحن نعرف أن قيمة العنوان المطلوب أكبر من قيمتها آخر مرة ضغطنا فيها زرا في هذه النافذة.

إذن نضغط Greater Than.


أمر آخر، في حالات لا نعرف فيها كيف تغيرت القيمة، فقط نعرف انها تغيرت، نستخدم Not Equal.


في صورة ما أخطأنا (ما قد يؤدي بنا للغالب لصفر نتيجة)، كأن ضغطنا Equal رغم أن القيمة تغيرت - مثلا،

أو أردنا البحث عن أشياء أخرى، نضغط Reset لنعيد البحث من المرحلة الصفر.


يمكننا تكرار هذه العمليات بأي ترتيب عدة مرات.

الى أن نستبعد كل الاحتمالات الزائدة و نتحصل في النهاية على عنوان وحيد:



هذا العنوان هو 00B0 في الرام.

في الواقع هذا الاسم هو ترقيمه، لكن مكتوب بطريقة ست عشرية، عوض نظامنا العشري العادي.

ما معنى هذا؟ سنتحدث عن هذا فيما بعد.


نضغط على سطر عنوان الذاكرة $00B0 تحت Possibilities.

نكتب اسما أمام Name كي نميز بين هذا العنوان و عناوين اخرى...

ثم نضغط Add.



العنوان هو Addr (Address) و هو هنا 00B0

القيمة هي Val (Value) و هي هنا 82 مخزنة في هذا العنوان.


عندما ننقر نقرتين على كود الغش، و تظهر النجمة، فكود الغش يعمل. (يمكننا اقفاله بنفس الطريقة)

أي أننا نجبر اللعبة على استخدام القيمة المكتوبة هنا في عنوان الطاقة، مهما كان ميغامان يتعرض له من أذى.

لكن حسب ما نرى فان القيمة 82 قيمة منخفضة جدا:



سنحاول تجربة قيم مختلفة بدل 82. و نحسب كم سطرا في المقياس في اللعبة.

في حالة القيمة 82 لدينا 2 أسطر.


القيمة 80 هي تعادل 0 أسطر و هي شرط موت ميغامان.

لو خطر لكم وضعها في كود غش فأنتم تجبرون اللعبة على قتل ميغامان.

(لكن يمكنكم مرة أخرى استغلال هذه الفكرة و البحث عن قيمة طاقة زعيم أشرار و اجبار اللعبة على قتله بهذه الطريقة)


لنحاول اذن مع قيم أخرى ... من 81، 82 و نحن نزيد شيئا فشيئا.

سنجرب اذا العودة لنافذة الغش، تغيير القيمة تحت Val (Value) و كل مرة نضغط Update، و نحسب المطات:


84 : 4 مطات

86 : 6 مطات

88 : 8 مطات

89 : 9 مطات

90 : 16 مطة ؟؟؟



ما السبب في القفزة الغريبة بين القيم 89 و 90 مع أن الفارق هو 1 فقط؟


السبب أن الفارق يكون 1 لو كانت هذه قيما بنظامنا العشري، الذي فيه 9+1=10، و به عشرة أرقام من الصفر للتسعة.

لكن بيانات الألعاب ليست كذلك. و الفارق ليس 1.


بل هي تستخدم النظام الست عشري، أو ما يسمى بالهيكس، اختصارا لـ Hexadecimal (ست عشري)،

و الذي فيه ما يكتب 10 هو يعني في الواقع 16 بالنظام العشري العادي.

و النظام الست عشري به ستة عشر رقما، من الصفر للتسعة متبوعة بالأرقام المرموز لها A و B و C و D و E و F.


النظام العشري

النظام الست عشري

النظام العشري

النظام الست عشري

1

1

10 = 0 + 10×1

A

2

2

11 = 1 + 10×1

B

3

3

12 = 2 + 10×1

C

4

4

13 = 3 + 10×1

D

5

5

14 = 4 + 10×1

E

6

6

15 = 5 + 10×1

F

7

7

16 = 6 + 10×1

10 = 0 + 1×16

8

8

17 = 7 + 10×1

11 = 1 + 1×16

9

9

18 = 8 + 10×1

12 = 2 + 1×16

طبعا 0 بالعشري تقابلها 0 بالست عشري.

نفس الشيء، اللون فقط للتوضيح.


السبب هو أن الألعاب تخزن بياناتها بالصفر و الواحد.

البيت Bit هو وحدة ذاكرة يمكن أن تأخذ اما الصفر و اما الواحد.

يمكن استخدام البيتات لتخزين قيم رقمية بهذه الطريقة.

مثلا لو كان لدينا 4 بيتات و كل بيت لديه احتمالان اما يكون قيمته 0 أو 1، فهذا يعني أن لدينا 2×2×2×2 = 16 احتمالات مختلفة.

أي يمكننا بواسطة 4 من البيتات تمثيل 16 قيمة عددية ممكنة: من صفر إلى 15. و ذلك كالآتي.


النظام العشري

النظام الثنائي (البيت)

النظام العشري

النظام الثنائي (البيت)

0

0000 = 0+0+0+0

8

1000 = 0+0+0+8

1

0001 = 1+0+0+0

9

1001 = 1+0+0+8

2

0010 = 0+2+0+0

10

1010 = 0+2+0+8

3

0011 = 1+2+0+0

11

1011 = 1+2+0+8

4

0100 = 0+0+4+0

12

1100 = 0+0+4+8

5

0101 = 1+0+4+0

13

1101 = 1+0+4+8

6

0110 = 0+2+4+0

14

1110 = 0+2+4+8

7

0111 = 1+2+4+0

15

1111 = 1+2+4+8


لكن كتابة أربعة أرقام من الصفر و الواحد ليست بالأمر المحبذ خاصة و أن قراءتها هكذا تكون أصعب.

لحسن حظنا النظام الست عشري يناسبنا جدا في هذه الحالة،

اذ أنه لكتابة كل هذه القيم من 0 إلى 15(عشري) يكفي كتابة "رقم ست عشري" وحيد (من 0 الى F) !

و هذا يختصر الكتابة كثيرا و يسهل القراءة.


يصادف أيضا أن كل عنوان ذاكرة في بيانات الكمبيوتر، و الألعاب، مثل العنوان الذي فيه قيمة طاقة ميغامان في مثالنا،

يستخدم البايت (الثماني) Byte و هو مجموعة من 8 بيتات Bits.

بالتالي لدينا 2×2×2×2×2×2×2×2 = 256 قيمة مختلفة،

و هذه القيم العددية هي بين 0 و 255(عشري).

القيمة العددية 255 مثلا تمثل بالبيتات هكذا 11111111 أي بالنظام العشري 1+2+4+8+16+32+64+128

لكن أليس هذا معقدا؟


كما رأينا في السابق، فرقم ست عشري وحيد يعوض 4 بيتات.

إذن رقمان ست عشريان يمكن أن يعوضا 8 بيتات.

و بالتالي يمكننا كتابة القيمة 255 (عشري) بالنظام الست عشري هكذا FF و بكل بساطة.

الرقم F الست عشري هو 15(عشري)، و FF تعني بالعشري 15×1 + 15×16 = 255.


و لذلك السبب لتمثيل قيم الذاكرة، سواء في المحاكيات أو برامج التعديل، سنستخدم دائما النظام الست عشري لكتابة الأعداد.

لذلك وجب عليكم التعود عليه.

هل تستطيعون مثلا التعرف على كم تساوي هذه الأعداد الست عشرية في لغتنا؟

الحلول كتبت بالأبيض...


41 [ 1 + 4×16 = 65 ]

DF [ 15 + 13×16 = 223 ]

0A [ 10 + 0×16 = 10 ]

7F [ 15 + 7×16 = 127 ]

24 [ 4 + 2×16 = 36 ]

123 [ 3 + 2×16 + 1×16×16 = 291 ]


على فكرة، فالألة الحاسبة التي في الويندوز تستطيع التحويل

بين النظام العشري (Decimal) و الست عشري (Hexadecimal) و حتى الثنائي (Binary)،

و ذلك من خلال وضع الآلة الحاسبة للمبرمجين Programming، لذلك لو احترتم تستطيعون استخدامها للتحويل.


إذن نحن استطعنا التحكم في كيف خزنت بيانات اللعبة لطاقة ميغامان في الرام؟

سنجرب البحث عن أشياء أخرى.


سنختار مثلا ...

لعبة أخرى على السوبر نيس، اسمها Legend of the Mystical Ninja

(من سلسلة غويمون، التي صدرت أغلب عناوينها في اليابان فقط)

و سنختار محاكي سوبر نيس مثل Snes9X.



هذه المرة، سنجرب البحث عن عدة أشياء.

أولا، سنبحث عن قيمة طاقة الحياة التي عنده.

في حالتنا هذه توجد على الشاشة ممثلة بذلك المقياس الذي فيه 8 قطع حمراء في أعلى الشاشة.


قيمة طاقة الحياة اذن قد تكون في حالتنا 8

ليس بالضرورة، كما رأينا في حالة ميغامان 4، فقيمة طاقة 8 مثلت في الذاكرة 88.

لكن سنفترض، و نجرب على أساس أنها مخزنة 08.

لا ضرر من المحاولة، لأنه حتى لو كنا مخطئين، يمكننا اعادة البحث من جديد بالزر Reset.


بما أننا نعرف القيمة، فاننا سنبحث عن قيمة معروفة (Known Search).

نذهب الى قائمة Cheat.

نتأكد أولا أن Apply Cheat تعمل، كي يكون لأي كود غش نعمله مفعول.

ثم نذهب الى Search for New Cheats.

هناك اختياران من هذا،

أحدهما فيه Active (يترك اللعبة تعمل و نافذة الغش مفتوحة)،

و الآخر يوقف اللعبة مؤقتا أثناء فتح النافذة.

اختر أيهما تريد، و لو أني أحبذ الذي يوقف اللعبة.



في حالة Snes9X فالبرنامج يحول لك القيم الرقمية آليا للنظام العشري.

لو احتجت لتظهرها بالنظام الست عشري، غير Data Type الى Hexadecimal.


يمكنكم أيضا ملاحظة أن جهاز السوبر نيس متطور أكثر من النيس و به أكبر ذاكرة.

لذلك هناك عدد أكبر من المبرمجين انتهزوا هذه الفرصة لتخزين قيم رقمية كبيرة.


استعمال بايت واحد يمكننا من استغلال القيم من 00 الى FF (أي 00-255 بالعشري).

لكن 2 بايت تتيح لنا القيم 0000 الى FFFF.

و FFFF في النظام الست عشري يقابلها 15 + 15×16 + 15×256 + 15×4096

مع العلم أن 256=16×16 و 4096=16×16×16.

أين أن FFFF تعادل 65535 و هو عدد ضخم.

بالتالي أي قيمة أكثر من 255 لا تكتفي ببايت واحد بل ستضيف 2 بايت.

هناك حتى 3 بايت (00 00 00 الى FF FF FF) و 4 بايت، لقيم أكبر من هذا.


يمكن تغيير البحث لمراعاة هذه النقطة باستخدام Data Size.

لكن بما أننا نبحث عن قيمة طاقة الحياة، فانها لن تتجاوز على الأرجح 255 (عشري).

سنختار اذن 1 byte (بايت واحد).


البحث يستخدم حاليا نفس الوضع الذي تعودنا عليه.

Compare To (نقارن بماذا) الآن وضعت على الإختيار Previous Value (القيمة السابقة)

نحن نحتاج هذا ان كنا نقارن القيم بالقيم القديمة هل زادت أم نقصت و نحن لا نعرف كم تساوي بالضبط.


لكن نحن الآن في حالة نعرف كم تساوي القيمة بالضبط.

نختار اذن تحت Comparison Type (نوع المقارنة) الاختيار Equal To (يساوي).

و نختار تحت Compare To (نقارن بماذا) الاختيار Entered Value (القيمة التي سأعطيها).

نتأكد أننا نعمل مع Hexadecimal (ست عشري) و 1 byte (بايت واحد).


للاستعداد لعملية البحث الجديدة، نضغط Reset.

في المربع الأبيض أمام Enter a Value (اكتب قيمة)، سنكتب 08

ثم سنضغط الزر Search للبحث.



نغلق النافذة.

نعود للعبة و نجعل الشخصية تصاب.

صار مقياس طاقة الحياة يظهر 6 مطات فقط.

سنعود اذن لشاشة البحث، عبر Cheat و Search for New Cheats.



هذه المرة سنكتب 06 و نضغط Search.

و بما أننا كنا نعرف كم تساوي القيمة بالضبط، فالبحث مرتين فقط أتانا بالنتيجة فورا

و بقي فقط السطر الوحيد الذي نحتاج اليه.




نضغط فوق السطر، و نضغط Add Cheat لإضافة كود غش جديد.

نعمر الخانات المتبقية، خاصة New Value، بالقيمة المطلوبة.

لاحقا في اللعبة يمكن ان يزداد مقياس طاقة الحياة الى 16 مطة، لذلك سأضع 10 (ست عشري).

و طبعا هناك الاسم أيضا.


ينصح بتدوين عنوان الرام المستعمل هنا أيضا لتجنب البحث عنه من جديد، في ملف نص آخر

كي تتمكنوا من استعماله المرة القادمة. في حالتنا، العنوان هو 7E1B2 هنا.



لو نذهب لقائمة Cheat ثم نضغط أول اختيار، سنجد قائمة لكودات الغش المستخدمة حاليا.

و يمكننا تشغيلها او ايقافها منفردة.

أو تعديلها ثم ضغط Update.

أو اضافة كودات جديدة من النت بواسطة Add،

أو حذف الكودات غير المرغوب فيها بواسطة Delete.

لا ننسى ضغط OK بعد كل تغيير.

و عندما نخرج من هذه النافذة، نتأكد دائما تحت قائمة Cheat أن Apply Cheat تعمل، كي تعمل الكودات.



و عندما نجرب اللعبة، مهما أصيبت الشخصية، فالمقياس لن ينخفض.

بما أننا لا نستطيع ان نخسر بسهولة في وضعيتنا الحالية،

يمكننا أن نجرب الآن البحث عن عديد الأشياء الأخرى...

زيادة عداد الأسلحة

زيادة النقود

زيادة الوقت

زيادة عدد الحيوات

الخ.


في هذه اللعبة يمكنك ضرب الأعداء و الحصول على نقود.

يمكنك البحث عن النقود بواسطة خاصية 3 bytes نظرا أن القيمة تكتب بعدة أرقام.


المشكل أن هذه اللعبة بالذات (و بعض مثيلاتها) حالة خاصة من بين كل الألعاب.

لو حصلت على 10 من النقود في اللعبة،

و جربت البحث عن القيمة 0A بالست عشري، أو 10 بالعشري،

فستعطيك قائمة النتائج 0 نتيجة.

في الواقع هناك برمجة غريبة للعدادات في هذه اللعبة،

و الحل لتجد ما تريد، هو أن تبحث عن 10 بالست عشري !!


السبب هو أن برمجة هذه اللعبة تظهر على الشاشة مباشرة القيم الست عشرية

على الرغم أن ذلك ليس الطريقة الصحيحة لكتابة تلك القيم.

هذا نموذج من طرق البرمجة الغريبة جدا التي ستعترضكم في بعض الألعاب.


سنجرب البحث عن أمر مثير للاهتمام أكثر.

أنواع السلاح!


في هذه اللعبة، هناك سلاح ضعيف تبدأ به.

عندما تصيب 8 أعداء، ستظهر دمية قط الحظ التي تعطي سلاحا أفضل.

هناك السلاح الضعيف (الغليون)، و سلاح أفضل (الغليون الذهبي) و سلاح أفضل منه (اليويو).

عندما تصاب، تخسر سلاحك الحالي و تعود للسلاح الذي تحته في المرتبة.



سنصنع كود غش يجبر اللعبة على الحفاظ على السلاح الأفضل.

بعبارة أخرى، سنبحث عن عنوان نوع السلاح، و نجعله دائما بقيمة السلاح الأفضل.

لنحاول أن نفكر بنفس طريقة المبرمجين.


على الأرجح، فان قيمة السلاح الأفضل ستكون أكبر من القديم,

لذلك، يمكن عمل بحث بالمقارنة متى تظل القيمة هي نفسها، متى تزيد، و متى تنقص.

لكن هناك حل آخر.

عادة لهذه القيم، يضع المبرمجون القيمة 00 للحالة الأصلية.

و لقيم الأنواع، تكون مرتبة بحيث أول شيء يكون 00، و ثاني شيء 01، و الثالث 02، و هكذا...

لذلك يمكننا عمل محاولة أولى بالقيمة المعروفة، و لو لم ننجح، نحاول بالمقارنة.


في الواقع، فان الطريقة الثانية تمككنا بسهولة من التوصل لنفس النتيجة لكن بسرعة أكبر بكثير!

لكن سبب ذلك هو أننا كنا محظوظين و كان حدسنا حول طريقة تفكير المبرمجين في محله.

في حالات أخرى، قد نكون مخطئين، و قد نضطر للعودة للطريقة السابقة...


لتكن هذه فرصة للقارئ لتجربة هذه الطريقة.

بالمناسبة: خاصية فتح لقطة Save State / Load State تمكننا من بلوغ حالات قيم معينة بسهولة أكبر.

جربوها أثناء بحثكم عن هذه القيمة.


أحيانا هناك أمور لديها قيمتان فقط. يعمل، أو لا يعمل. لديك، أو ليس لديك.

مثلا، المناعة المؤقتة التي عند الشخصية عندما تصاب.

أو العدة الاضافية التي تكتسبها.

في أغلب هذه الحالات، فالبايت المطلوب سيكون اما 00 أو 01.

لكن ليس دائما! لو لم يكن كذلك، فالبحث بالمقارنة هو الحل،

و بالذات خيار "لا يساوي" Not Equal الذي لم نتحدث عنه كثيرا لحد الآن.


هذه ان شاء الله ربما يكون مجال الحديث عنها ملحق درس متعمق أكثر في مسألة كودات الغش...

لكن لدينا أمر يجب أن نواصله.


لنجرب شيئا مغايرا تماما هذه المرة.

سنختار لعبة للجيم بوي أدفانس، و بالطبع ننزل VBA-M من موقع emucr لهذا الغرض.

هذه اللعبة ستكون Harvest Moon Friends of Mineral Town.

المهم أن تكون نسخة غير يابانية بالطبع.

نحن نريد لعبة فيها شاشة اختيار أسماء.


سنذهب الى شاشة اختيار الأسماء.



الآن، سنقوم بتجربة من نوع خاص جدا...

سنحاول معرفة كيف تخزن هذه الألعاب نصوصها في الذاكرة.

سنستخدم طرق البحث عن عناوين كودات الغش السابقة بالضبط، لكن الهدف هذه المرة سيكون:

العنوان الذي يحتوي قيمة الحرف الأول من إسم الشخصية.

طبعا، نحن لا نعرف بالضبط كم تساوي هذه القيمة التي نبحث عن عنوانها.


اذن سنبقى في شاشة كتابة الاسم هذه، لكننا كل مرة سنكتب اسما ما، ثم نحذف و نكتب اسما آخر...

و بالطبع ما يهمنا سيكون الحرف الأول.

و نقارن بين النتائج، بما أننا كلما تقدمنا في الأبجدية كلما تكون قيمة الحرف العددية أكبر (لأن الحروف مرتبة).


نكتب اذن اسما يكون الحرف الأول فيه هو الحرف A الكبير (هناك فرق بين الكبير و الصغير!)

ثم نذهب للقائمة Cheat ثم Create



لاحظ أن النافذة مشابهة جدا لنافذة البحث عن الغش في المحاكيات الأخرى.

في حالة VBA-M، لو كنا نعرف القيمة الرقمية لما نبحث عنه لكنا سنختار Specific Value.

لكننا لا نعرف، لذلك سنبحث و كل مرة نقارن مع القيمة السابقة. لذلك نختار Old Value.


الحروف اللاتينية 52 حرفا، و هناك رموز قليلة أخرى.

إذن بايت واحد 1 Byte (256 قيمة، من 00 الى FF) يكفي لتخزين قيم الحروف اللاتينية.

سنختار ذلك الخيار.

في حالة VBA-M فسنختار 8 بيتات (8 bits)، بما أن 8 بيتات = 1 بايت كما رأينا سابقا.


نختار Hexadecimal ليظهر لنا النتائج بالأعداد الست عشرية.


نضغط Start للشروع في عملية بحث جديدة (مثل زر Reset في المحاكيات الأخرى).

و بعد ذلك، نعود للعبة.

سنحذف الاسم و سنكتب اسما آخر يكون الحرف الأول فيه هذه المرة هو B الكبير.

(لا يجب أن نخطئ و نضع b الصغير، لأن قيمهم مختلفة منطقيا نظرا ان شكل الحرف ليس نفسه).


قيمة الحرف B ستكون أكبر من قيمة A.

نعود لنافذة الغش و نختار أكبر Greater than.

ثم نضغط Search.

ستظهر رسالة خطأ كهذه على الشاشة. لا تخافوا منها.

(أنا مستغرب لماذا مطورو هذا المحاكي يعتبرونها "خطأ". انها مرحلة طبيعية في عملية البحث!)



المعنى أن كمية النتائج هائلة و لا يمكن اظهارها كلها على الشاشة.

و ذلك أمر منطقي، نظرا أن جهاز الجيم بوي أدفانس متقدم أكثر.

الأمر المهم في الرسالة هو عدد النتائج.

ان كان العدد بدأ يتقلص، فهذا يعني أنك في الطريق الصحيح على الأرجح.

لكن لو وصل العدد 0 نتيجة، فهذا يعني أنك قمت بارتكاب خطأ في البحث و عليك الاعادة من الأول بواسطة Start.


سنواصل البحث.

لا داعي للحديث عن العملية بالتفصيل الممل، نظرا أن الطريقة صارت مألوفة لديكم، لذا سنلخص:


اختيار اسم أول حرف فيه A

الشروع في البحث (Start)


اختيار اسم أول حرف فيه B

مقارنة بالسابق، "أكبر من" (Greater than)

البحث (Search)


اختيار اسم أول حرف فيه C

مقارنة بالسابق، "أكبر من" (Greater than)

البحث (Search)


اختيار اسم أول حرف فيه B

مقارنة بالسابق، "أصغر من" (Less than)

البحث (Search)

...


شيئا فشيئا، و بعد عديد المحاولات بعديد الحروف،

مع عدة مرات سنفشل فيها و نعيد من جديد...

ستتقلص شاشة النتائج.

قد يكون حتى من المجدي النظر لتلك القائمة كي نستبعد بأنفسنا القيم الغير معقولة (مثل التي تزيد بشكل غير مستقر).

و في النهاية، سنجد ضالتنا أخيرا.



يمكننا أن نغلق النافذة، و نعود للعبة و نغير الحروف ثم نعود للنافذة و ننظر للخانة New Value

حيث القيمة الجديدة لذلك العنوان، و هي قيمة الحرف أو الرمز الذي غيرناه في اللعبة.


عندما نجرب، سنرى أن القيم في حالة هذه اللعبة هي هكذا (لو كنا نعمل بالنظام الست عشري):

A=41

B=42

C=43

..

a=61

b=62

c=63

y=79

z=7A

0=30

1=31

9=39


بعد أن نجرب كما نريد، سنقوم بأمر آخر.

نضغط فوق الاختيار و نضيف كود غش عبر Add Cheat

لكننا هذه المرة، سنجرب أن نعطي لهذا العنوان قيمة لا يأخذها عادة.

مثلا... 22 (بالست عشري).


نخرج من النافذة،

نتأكد تحت قائمة Cheat أن Disabled/Disable Cheat (اغلاق الغش) لا تعمل.

و نعود للعبة، و سنجد أمرا مثيرا للاهتمام:



قيمة 22 لعنوان الحرف الأول تعطينا رمز الاقتباس (")

و هو غير موجود في شاشة اختيار الاسم.

يمكننا ايجاد رموز أخرى مدفونة في اللعبة بهذه الطريقة، حتى حروف يابانية من بقايا النسخة اليابانية.


في جميع الألعاب (و حتى برامج الكمبيوتر)، فالنصوص مخزنة هكذا.

كل حرف لديه قيمة رقمية معينة.

هذه القيمة تختلف بحسب مزاج من برمج اللعبة.


أول شيء علينا قعله لإيجاد نص في لعبة (قبل أن نفكر أصلا في تغييره و ترجمته!)

هو عمل قائمة كل حرف ما هي قيمة بالست عشري

مثل القائمة التي في الأعلى، لكن يجب أن تشمل جميع الحروف و الرموز في اللعبة.

هذه القائمة اسمها التيبل Table file أو جدول قيم الحروف.


هذه الآن طريقة لعمل قائمة من هذا النوع، لكن هناك طرق أسهل لعمل هذه القوائم.

سنتحدث عن كل هذه الحالات عندما نبدأ في ترجمة الألعاب بأنفسنا في الواقع.


الأمر الجيد أن هناك معيارا يقترح طريقة محددة ثابتة لاسناد القيم للحروف اللاتينية اسمه ASCII

و تم تكميله بمعايير للحروف اليابانية اسمه Shift-JIS و هو مع ال ASCII من أكثر المعايير انتشارا في الألعاب،

اضافة لواحد عالمي اسمه Unicode و هو المستخدم في جل أجهزة الكمبيوتر لتخزين عدة لغات، مثل اللغة العربية، بما في ذلك هذه السطور.


معيار ASCII هذا يقترح القيمة 41 للحرف A، و القيمة 61 للحرف a و...

بما يذكركم هذا؟

نعم، لعبة Harvest Moon FoMT للجيم بوي أدفانس بالفعل تستخدم معيار ASCII لنصوصها الانكليزية.

هذه صدفة سعيدة، نظرا أن العمل سينقص بشكل كبير علينا في هذه الحالة.


الآن، بما أننا عرفنا كيف تخزن اللعبة نصوصها، لم لا ننظر في داخل الروم و نبحث عن النص؟

لكي نفتح الروم، الحل الأنسب هو ...

برامج تعديل البيانات الثنائية. أو برامج الهيكس Hex Editors.


ألم نقل في السابق أن بيانات الكمبيوتر هي مكونة من كم هائل من وحدة اسمها بيت Bit قيمتها اما صفر أو واحد؟

و أن البايت Byte هو سلسلة من 8 بيتات متتالية، و هو مربع ذاكرة، مثل الذي خزن فيه الحرف قبل قليل أو قيم الطاقة في الألعاب؟

و أن كتابة كم هائل من الأصفار و الواحد يسبب الرعب للقارئ،

بينما كتابتها على شكل أعداد ست عشرية من 00 الى FF لكل بايت يختصر الحيز المكاني و يجعل قراءتها أسهل؟


برنامج الهيكس يقوم باظهار محتوى أي ملف في الدنيا نعطيه اياه (بما في ذلك رومات الألعاب في حالتنا)،

و يظهر لنا البايتات Bytes المكونة لبيانات الملف و يتيح لنا أن نغير كل بايت بمفرده كما نريد!

و بما أنه يكتب البايتات على شكل أرقام ست عشرية من 00 الى FF

فمنه أتت تسمية البرنامج و كلمة الهيكس من كلة ست عشري Hexadecimal.


نحمل اذن برنامج الهيكس، و في الحقيقة هناك كم هائل من هذه البرامج لكن لاحتياجاتنا سنختار:

WindHex. يمكنكم تحميله من هنا.


على سبيل تسهيل الأمور على أنفسنا، لنقم بوضع محتويات الملف الذي به WindHex الذي حملتموه الآن في مجلد خاص،

و في نفس المجلد، نضع روم Harvest Moon بصيغة gba (طبعا مع الحرص ألا تكون داخل ملف مضغوط مثل zip أو غيره).

تجنبوا تسمية المجلدات بأسماء عربية، سواء هذا المجلد أو المجلد الذي يحتويه، لأن البرنامج لن يعمل جيدا حينها.

لو استعصى ذلك، ضعوه في مجلد خاص مباشرة تحت قرص صلب ما مثل C:\ لو لزم الأمر.

يجب أن نترك نسخة احتياطية من الروم في مكان آخر، في حال ما تلف الروم بسبب تغييراتنا.


نفتح WindHex.

من Option ثم Set Font ثم Set All Fonts، نختار حجما أكبر للحروف، مثل 14 مثلا أو ما فوق.

ثم نذهب الى قائمة File.



تذكرون حديثنا السابق؟


عندما نفتح الروم، كي نرى النصوص نحتاج لجدول قيم الحروف أو التيبل Table، لكي نعرف كل حرف ماذا تقابله من قيمة ست عشرية.

لذلك في برنامج WindHex يمكننا بعد فتح الروم أن نفتح ملف التيبل Open Table File الذي فيه هذه القيم.


لكننا لا نحتاج لذلك الآن. و السبب؟

أن اللعبة Harvest Moon FoMT تستخدم معيار ASCII كما رأينا (41=A الخ).

جميع برامج الهيكس عند فتحها تفتح آليا تيبل جاهز مسبقا فيه قيم الحروف حسب معيار ASCII.


لن نضغط Open Table File اذن لأن ملف التيبل الذي نريده مفتوح في الواقع.

و نكتفي بفتح الروم (الملف الذي سنراه و نغيره) و ذلك من خلال Open File For Editing. و نختار الروم.


أنا سميت الروم BaseFontSwap.gba لأنني غريب الأطوار. لا تركزوا على هذا الاسم. إنه لا يهم. بتاتا.

هذه في الواقع روم الهارفست مون.

نافذة برنامج الهيكس مثيرة للاهتمام. هي مقسمة لثلاث أجزاء:


هناك جزء على اليسار هو جزء العنوان، و الذي يقال له أيضا الأوفسيت هنا.

كما تلاحظون هو بالأعداد الست عشرية.

هو يدلك أين أنت في هذه الروم الضخمة.

لا تنس أنك تنظر عن قرب شديد في شاشة السطر فيها 16 بايت، و هناك حوالي عشرة أو احد عشر سطرا...

في روم حجمها 8 ميغابايت. أي 8 مليون بايت.

استخدام تعبير البحث عن ابرة في كومة قش في محله هنا لو كنت تبحث عن شيء و لم تجده في الروم عندما عدت اليه.


لذلك، انتبه جيدا الى عنوان السطر الذي تعمل فيه، و الموجود أيضا في الأسفل أمام كلمة Offset : و احرص

أن تعمل ملف نص صغير تدون فيه ملاحظاتك و عناوين الأشياء المهمة في الروم.

و ذلك كي عندما تعود لبرنامج الهيكس، تذهب مباشرة الى Search و Goto Offset للذهاب هناك مباشرة.


الجزء الأوسط هو جزء الهيكس.

هنا توجد جميع بيانات الملف الثنائية و هنا يمكنك تعديلها.

و كما تلاحظون فهي مقسمة بشكل رائع و واضح الى بايتات.

و هناك مربع يتوهج فوق احدى هذه البايتات و في هذا المربع يمكنك بلوحة المفاتيح كتابة قيمة جديدة لهذا البايت!


لننظر للجزء الثالث، و هو جزء النصوص.

هذا الجزء الذي يعطي لكل بايت ما هو الحرف الذي يقابله حسب جدول التيبل (الذي في حالتنا هذه هو الASCII)

و الذي يمكننا من تغيير نصوص اللعبة.

أنتم تلاحظون أن بيانات اللعبة ليست كلها نصوص و بالتالي سيظهر كل ما هو ليس نص خرابيطا بلا معنى هنا.


المربع يتوهج الآن فوق خانة الهيكس، لذلك أي شيء سنكتبه في لوحة المفاتيح سيأثر هناك.

لنعدل على خانة النص، نضغط في لوحة المفاتيح الزر TAB و سيصبح المربع المقابل للبايت في خانة النص هو المتوهج.


هناك أمر يجلب الانتباه في جزء النصوص و هو خاصية في رومات الجيم بوي أدفانس:

اسم اللعبة. HARVESTMOGBAA4NPE9 ، و هذا اسم داخلي على الأرجح لن تراه أبدا الا بفتح الروم بهذه الطريقة.

ننقر على الحرف A



نضغط TAB بحيث تكون خانة النص هي التي فيها يتوهج المربع.

و الآن نكتب بخانة المفاتيح الحرف B الكبير و ننظر للجهة المقابلة:

البايت تحول من 41 الى 42


طالما فهمنا المبدأ، سنحاول البحث عن نص هذه اللعبة. الذي نرجو أن يكون مخزنا بشكل واضح دون أي مشاكل.

يجب أن نعود للعبة و نجد كلمة تستعمل الخط الذي كتبت به تلك الحروف التي بحثنا عنها منذ قليل.

لدينا مثلا.. هذا:



نذهب الى Search ثم Search Text.

تظهر لنا هذه النافذة:



هذه الخيارات التي تهمنا، و ان كان من الحري بنا ان نشغلها أو ألا نشغلها:


Ignore Case: لا فرق بين الحروف الصغيرة و الكبيرة. لا يعمل.

Save Finds in a Search List: يضع لنا نتائج البحث في قائمة، عوض الضغط على F3 كل مرة. يعمل.

Use * For Wildcards: عندما يكون هناك رمز ليس حرفا (مثل الفراغات) نستخدم نجمة. غير ضروري هنا، لكن يعمل.

Start Search from the Beginning: يبدأ في البحث من أول الملف و ليس فقط بعد البايت الذي تركناه يتوهج. يعمل.


أمام Enter Data، نكتب النص الذي نريد البحث عنه.

من المحبذ الاكتفاء فقط بالحروف اللاتينية الصغيرة و الكبيرة

و تجنب أي رمز آخر بما في ذلك علامات التنقيط و الأرقام و الفراغات، التي نعوض كل رمز منها بنجمة واحدة *.


اذن نكتب:

correct

(كلما طالت الجملة لما كان البحث اسرع و ادق، لكن اي خطأ بسيط قد يكلفنا فشل البحث)

أكتبوها باليد و لا تنسخوها من هذا الدرس، لأن أي فراغ قد يفسد العملية!

نكتب ذلك و نضغط زر البحث Find.



و النتيجة تكون:



كلمة correct تظهر 12 مرة في الروم،

و المرة الأولى كانت هي التي فيها الجملة التي كنا نريدها من حسن حظنا.

أول شيء نفعله هو كتابة العنوان E8C80 (الذي في خانة اليسار) في مكان ما لكي لا ننساه.


و الآن، نقوم باغلاق نافذة Data List الصغيرة.

نجعل المربع الذي يتوهج في خانة النص (زر TAB).

ننقر فوق أول حرف من حروف الجملة (حرف I الكبير في Is this name correct ?) و بعد ذلك

نكتب جملة جديدة من عندنا بالانكليزية.

المهم ليس اللغة بالضبط بل كون الحروف المستخدمة موجودة في اللعبة، أي أننا سنكتفي بحروف من a-z و A-Z.


لن نضع حروفا عربية الآن. لماذا؟

لعدة أسباب، لكن الأسباب المباشرة هي:

عندما جربنا قيم الحروف وجدنا أن اللعبة هارفست مون لا تحتوي حروفا عربية (أمر بديهي)

و ايضا، لكون الحروف العربية غير موجودة في معيار ASCII (بل في معيار Unicode).

هل هذا يعني أن الكتابة بحروف عربية أمر مستحيل؟

كلا، صحيح أننا لا نستطيع الكتابة على برنامج الهيكس بحروف عربية مباشرة،

لكن هناك طرق لتجاوز هذا الاشكال و حله و جعل اللعبة تظهر نصوصا عربية، سنرى كيف لاحقا.


اذن سنستخدم فقط الحروف الانكليزية.

يمكنكم كتابة اسماءكم أو جملة قصيرة مثل hello world أو ما شاء لكم.

المهم ألا تكون جملتنا طويلة جدا و تتجاوز الطول الأصلي و نقطة الاستفهام آخر الجملة.

لأنه لو كان نصنا الجديد أطول من النص الأصلي، فان أجزاء مهمة من الروم بعد النص سوف تتلف.


النص الجديد يجب أن يكون أقصر أو يساوي في الطول النص القديم.

و لو كان أقصر، نعوض الزائد بفراغات.

المهم أن تكون التعديلات بالضبط بنفس طول الأصل.

هناك طرق أخرى لكي نتمكن من اضافة نصوص أطول نضعها في أماكن فارغة من الروم و نجعل اللعبة تقرأ من هناك

(و هذا ما يسمى بتغيير المؤشرات أو البوينتر)، و هذه أيضا أمور سنأجل الحديث عنها لوقت لاحق.



نذهب الى File ثم Save لنسجل الروم.

و نذهب الآن ل VBA-M لفتح الروم من جديد، نذهب لشاشة اختيار الاسم، نحتار الاسم، و ...



وجدنا تغييرنا في اللعبة!

هكذا نكون قد رأينا و عدلنا النص في أول تجربة تعديل روم لنا.


لكنه مجرد تعويض نص انكليزي بنص انكليزي لا غير.

ثم ان اللعبة هنا كانت من حسن حظنا بالانكليزي و بمعيار ASCII،

ماذا لو كانت الحروف بقيم أخرى (مثل ما هو الحال مع Legend of the Mystical Ninja مثلا من أول الدرس؟)

و كيف نستطيع وضع العربية في اللعبة أصلا؟


سنحاول الاجابة عن هذه التساؤلات في الأبواب اللاحقة من هذا الدرس...


إرسال تعليق

لا يتوفر اتصال بالإنترنت!
”يبدو أن هناك خطأ ما في اتصالك بالإنترنت ، يرجى التحقق من اتصالك بالإنترنت والمحاولة مرة أخرى.“
Site is Blocked
Sorry! This site is not available in your country.