الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كود لعبة Quake III

مغلق
بدأه احمد صالح في 21 أغسطس 2005 · 18 رد · 5,230 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اصدرت شركة ID الكود الكامل للعبة Quake III و هذا مبادرة من القائد جون كارمك و المبرمج تيموتي بيستي ...

اعتقد اننا سننتظر كود دووم 3 بعد 5 سنين :D رائع ! ! !

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

تمتعوا!

ftp://ftp.idsoftware.com/idstuff/source/q....32b-source.zip

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#2

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

وشكراً لك ،،،،،،،،،،،،،،،،،

Live Free ... Die Well

The Scorpion King

#3
اقتباس
اصدرت شركة ID الكود الكامل للعبة Quake III و هذا مبادرة من القائد جون كارمك و

المبرمج تيموتي بيستي ...

اعتقد اننا سننتظر كود دووم 3 بعد 5 سنين  رائع ! ! !

:D

ما مصلحتهم ... من نشر الكود ..

جاري تحميل الملف لو اني ما راح افهم شيء :)

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#4
الشمري كتب:
:D

ما مصلحتهم ... من نشر الكود ..

جاري تحميل الملف لو اني  ما راح افهم شيء :)

يقولون لأغراض تعليمية (شكراً لهم) و أنا مثلك لا أثق كثيراً في قدرتي على فهم كود اللعبة

شكراً لم أستاذ أحمد

#5
  qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min);
  qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);

هنا ليش دوال gl تبدا بـ q ... امر غريب ..

انا ما فهمت الا الملف tr_image.c .. لانه يختص بالصور والاكساء ..

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

أعتقد أن حرف الq هذا إختصار Quake فربما قاموا بتطوير بعض الfunctions في الGL خصيصاً للعبة Quake

و الله أعلم

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#7

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

هذه تقنية أو حيلة برمجية متقنة جداً ، وتدعى بعملية "الاستدعاء وفقاً لنظام التشغيل" .... وأساس استخدام هذه الحيلة هو تقنية في الـ ++C وتعرف بمؤشرات الوظائف .... مؤشرات الوظائف شائعة الاستخدام مع من يبرمجون باستخدام DirectX وهي أساس من أساسيات اتقان البرمجة باستخدام الـ COM.

الآن ، ماذا يحصل في شيفرة id هو التالي:

- أولاً ، يتم تعريف مؤشرات وظائفية بأسماء ثابتة ، وهي تحديداً اسم الوظيفة الأصلي مضافاً إليه q .... راجع الملف qgl_linked.h

- ثانياً ، يتم تهيئة المؤشرات بما يقابلها من وظائف OpenGL المدعومة من قبل السائق التشغيلي لـ OpenGL وهذا واضح جداً في الوظيفة QGL_Init الموجودة في الملف QGL_WIN.C:

int QGL_Init(const char *dllname, const char* pGluName )
{

  g_hGLDLL = LoadLibrary(dllname);
  if (g_hGLDLL == NULL)
  {
    return 0;
  }

  g_hGLUDLL = LoadLibrary(pGluName);
  if (g_hGLUDLL == NULL)
  {
    FreeLibrary(g_hGLDLL);
    g_hGLDLL = NULL;
    return 0;
  }

  qgluPerspective              = GPA(g_hGLUDLL, "gluPerspective");
  qgluBuild2DMipmaps           = GPA(g_hGLUDLL, "gluBuild2DMipmaps");
	// added for plugins
	qgluLookAt                   = GPA(g_hGLUDLL, "gluLookAt" );

	qglAccum                     = GPA(g_hGLDLL, "glAccum" );
qglAlphaFunc                 = GPA(g_hGLDLL, "glAlphaFunc" );
	qglAreTexturesResident       = GPA(g_hGLDLL, "glAreTexturesResident" );

لاحظ تهيئة المؤشر التالي:

qglAlphaFunc                 = GPA(g_hGLDLL, "glAlphaFunc" );

- الآن استدعاء الوظيفة qglAlphaFunc هو تماماً استدعاء للوظيفة glAlphaFunc

- يقوم المصير وعند بدأ التطبيق (لاحظ أنه المصير) بعملية تفحص لنوع نظام التشغيل وعلى أساسها سوف يقرر فيما إذا سوف يستخدم *qgl أم *gl ..... وهذا نراه في الملف qgl.h ..... والواقع أن المصير يقبل استخدام *gl في كل الحالات باستثناء نظام التشغيل MAC ..... غريب أليس كذلك !!!!!!!!! .... ولذلك سوف ترى أن هنالك ملف خاص بـ MAC يدعى بـ macosx_qgl.h

- الآن وعند نهاية عمل المحرك يتم عملية تحرير كاملة للمؤشرات المستخدمة وهذا تقليد معروف مع COM .... راجع الوظيفة QGL_Shutdown في QGL_WIN.C ..... !!!!!!!

لقد استخدمت ذات الأسلوب عند العمل على محركي ولكن ليس بهذا التعقيد أبداً ..... هذا ما أعلمه والله ورسوله أعلم !!!!!!!

الباب مفتوح للنقاش !!!!!! والسلام عليكم ،،،،،،،،،،،،،،،،،،،،

Live Free ... Die Well

The Scorpion King

#8

تسلم يا اخ رامي ....

كم اتمنى ان نرى محركك

موقعي :- www.gamesdevteam.com

#9

السلام عليكم

شاكراً لكم هذا السورس كود، ولكن أود الاستفسار

أي من الملفات نعمل له كومبيل فتعمل اللعبة؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

مشكورين

اللهم صل وسلم وزد وبارك على سيدنا محمد وعلى آله وصحبه وسلم

تعلم كيف تقرأ من ملف باستخدام لغة السي

Routers Programming-الدرس الأول

#10

بالنسبة لتسمية الدوال فهذة بمؤشرات الدوال مثل ما قال الاخ رامي

و للاستزادة http://www.function-pointer.org/

eng_ibr

مرفق مع الملفات مشروع للعبة مع فيجول 7 لكن لاحظ ان محتويات اللعبة غير موجودة

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#11

اوه نسيت

رامح - بحلل الكود في هذه الايام ...

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#12

كلام جميل و واضح

// windows systems use a function pointer for each call so we can load minidrivers

extern  void ( APIENTRY * qglAccum )(GLenum op, GLfloat value);
extern  void ( APIENTRY * qglAlphaFunc )(GLenum func, GLclampf ref);

هذا احدها :)

---

بصراحة .. اول مرة افهم في كود كبير :) .. فيه تقدم ..

--

في ملف اسمه ..tr_image.c .. الخاص بالاكساء ..

المحرك يستخدم ثلاث انواع من الصور .. BMP JPG TGA ..

ويستخدم فلاتر الاكساء المعروفة ..

	{"GL_NEAREST", GL_NEAREST, GL_NEAREST},
	{"GL_LINEAR", GL_LINEAR, GL_LINEAR},
	{"GL_NEAREST_MIPMAP_NEAREST", GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST},
	{"GL_LINEAR_MIPMAP_NEAREST", GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR},
	{"GL_NEAREST_MIPMAP_LINEAR", GL_NEAREST_MIPMAP_LINEAR, GL_NEAREST},
	{"GL_LINEAR_MIPMAP_LINEAR", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR

}

هذا اللي استفدته :D

لكن فيه نقطة غريبة ؟..؟؟؟

المحرك ليس OOP .. ولايوجد كلاس واحد .. كلها تراكيب ... لماذا ..

نقطة ثانية .. هل يوجد في المحرك .. الذكاء الاصطناعي .. ومن هالامور .. او لا ؟

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#13

نفس الاسلوب كان مع دووم واحد و كويك 1،2 و 3 التعامل بلغة السى جائز بسبب عدم مقياس السي ++ في هذه الفترة ( علي الرغم من قياسها في سنة 98 ) علي ما اعتقد كويك 3 كانت في99

يوجد الكود الكامل للعبة

حتي ملفات الضغط PAK دائما يتعاملوا معها موجود كود فتحها و ضغطها

" و يا اخوة انظروا إلي العدد الهائل من الملفات ... تخيلوا كم ملف برمجي لدووم 3 :D "

لعبة NHL2004 كانت من 39 ملف Cpp, .H ...

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#14

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

#15

أخي الشمري ، و الأخوة الآخرون:

اقتباس
لكن فيه نقطة غريبة ؟..؟؟؟

المحرك ليس OOP .. ولايوجد كلاس واحد .. كلها تراكيب ... لماذا ..

أعتقد أن هناك خطأ أو أنكم تنظرون إلى شفرة أخرى !!!!!!!!!!!!!!!!!!!!!!

هناك 49 ملف شفرة برمجية ، مدججة بكل تقنيات وأساليب الـ OOP .... ومن بينها استخدام الـ Classes ..... كما أن وجود ملفات الـ C لا يعني بالضرورة أن برمجة التطبيق تمت باستخدام الـ C .... وهذا يرجع إلى أن الـ Shaders الخاصة بـ OpenGL مثلاً تكتب بالـ C وفقط الـ C .... !!!!! لذا أرجو التدقيق في المعلومات ...... !!!!!!

قم بالبحث عن cpp.* وافتح إحدى الملفات وراقب الشفرة ...... !!!!!!

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

راجع المصنف botlib فهو الشفرة الحقيقية للذكاء الاصطناعي الخاص بشخصيات اللعبة أو الـ Bots

وعذراً ،،،،،،،،،،،،،،،،،،،،،

Live Free ... Die Well

The Scorpion King

#16
اقتباس
" و يا اخوة انظروا إلي العدد الهائل من الملفات ... تخيلوا كم ملف برمجي لدووم 3  "

لعبة NHL2004 كانت من 39 ملف Cpp, .H ...

الـ HL2 SDK فيه اكثر من الفين ملف cpp و h .. و هذا الـ sdk فقط! يعني اللعبة كلهة اعتقد فيها اكثر من 4000 ملف!!!

#17

انا اقصد NHL من EA و ليس Half Life

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#18

إن تقصد Q3Arena فيفها اجزاء مكتوبة للسي ++

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

هذا الموضوع مغلق.

مواضيع مشابهة