গেমগুলিতে প্যাচগুলি কীভাবে কাজ করে?


37

কনসোল এবং পিসি গেমগুলির মাঝে মাঝে বাগগুলি ঠিক করার জন্য প্যাচ থাকে যা বিকাশকারীরা মিস করেন / ঠিক করার সময় পাননি।

আমার প্রশ্ন এই কাজ কিভাবে?

কখনও কখনও প্যাচ ফাইলগুলি আকারে কয়েকটি মেগাবাইট। আমি বুঝতে পারি না একটি ছোট ফাইল কীভাবে একটি মঞ্জুরিপ্রাপ্ত প্রোগ্রামকে পরিবর্তন করতে পারে।


আপনি একটি ছোট প্যাচ ব্যবহার করে তৈরি একটি সংকলিত গেমস পরিবর্তন করতে চান?
উলফডন

না, আমি এর পেছনের তত্ত্বটিতে কেবল আগ্রহী। আমার গেমগুলি এগুলি পুনরায় সংশোধন করতে এবং পুরো গেমটি আবার বিতরণ করার জন্য যথেষ্ট ছোট :)
মুল্যাডেভিল

4
এটি একটি আকর্ষণীয় প্রশ্ন। এটি গেম ডিজাইনের সাথে আপনি যে সমস্যার মুখোমুখি হয়েছেন তা ভিত্তিতে নয়। সর্বাধিক নিষ্পাপ উপায় থেকে প্যাচ হ্যান্ডেল করার অনেকগুলি উপায় রয়েছে, সমস্ত ফাইল যা সর্বাধিক জটিল রূপান্তরিত হয়েছিল তা প্রতিস্থাপন করে এবং বিদ্যমান ফাইলগুলিতে নির্দিষ্ট জিনিসগুলিকে পরিবর্তনের নির্দেশনা পেয়ে থাকে। আমি নিশ্চিত নই যে এই প্রশ্নটি এই সাইটের জন্য উপযুক্ত।
উলফডন

3
কয়েকটি মেগাবাইট "ছোট" নয়। ধরুন আমাদের কাছে একটি তিনটি মেগাবাইট ফাইল রয়েছে যা সংঘবদ্ধ, এক্সিকিউটেবল কোডের ছয় মেগাবাইট। মনে করুন যে নির্দেশাবলী গড়ে ছয় বাইট দীর্ঘ, তাই এটি প্রায় মিলিয়ন নির্দেশাবলী। (স্ট্রিং আক্ষরিক এবং হোয়াট নোটের মতো স্থিতিশীল ডেটা অগ্রাহ্য করা যাক of) সি এর কোনও লাইন যদি প্রায় দশটি মেশিনের নির্দেশের সাথে মিলে যায় তবে সেটি কোডের 100,000 লাইনের। এটি একটি গেমের কোর ইঞ্জিনের জন্য যথেষ্ট বলে মনে হচ্ছে। ইনস্টলেশন আকারের বেশিরভাগটি টেক্সচার মানচিত্র, পর্দা, ভিডিও সিকোয়েন্সগুলির মতো স্টাফ থাকবে।

2
কয়েকটি মেগাবাইট ভাল ছোট হতে পারে, সমস্ত এটির মধ্যে নির্ভর করে এবং মোট কোডবেসের পরিমাণ কত। যদি বলুন যে সমস্ত টেক্সচার এবং কী না নির্বাচিত ফাইল ফর্ম্যাট ইত্যাদির কারণে একটি পুরো 3 ডি স্তরের মানচিত্রটি প্রতিস্থাপন করা দরকার তবে কয়েকটি মেগাবাইট প্রকৃতপক্ষে খুব ছোট হতে পারে।
জেভেন্টিং

উত্তর:


30

এটি করার একাধিক উপায় রয়েছে, সবচেয়ে সহজ হ'ল দুটি ফাইলের এক্সওআর করা এবং সেগুলি সংকুচিত করা (জিজেআইপি বা আরও কিছু)। এর পেছনের তত্ত্বটি হ'ল আশা করি আপনি শূন্যের একটি বৃহত ক্রম পেতে পারেন (একই মানগুলির দীর্ঘতর ক্রমগুলি ভালভাবে সংকোচিত হয়)।

আপনি সেই ধারণাটি আরও নিতে পারেন এবং চেষ্টা করতে পারেন এবং দুটি ফাইলের ক্ষেত্রগুলি যেখানে ডেটা অভিন্ন এবং এটি সম্পূর্ণরূপে বাদ দিতে পারেন।

অবশেষে, আপনি আপনার সুবিধার জন্য প্রতিটি ধরণের ফাইলের কাঠামো ব্যবহার করতে পারেন। উদাহরণস্বরূপ, কোনও এক্সই-তে আপনি প্রতিটি পদ্ধতি পৃথকভাবে প্যাকেজ করতে পারবেন (কেবলমাত্র পরিবর্তিত হয়েছে) এবং প্যাচ অ্যাপ্লিকেশন চলাকালীন নিজেকে এক্সই পুনর্গঠন করতে পারেন; তবে মনে রাখবেন যে এটি ওভারকিলের ক্ষেত্রের খুব সম্ভবত এবং এটি চেষ্টা করার মতো নাও হতে পারে (একটি সাধারণ বিডিফের বেশি লাভ বন্যের মধ্যে ভাঙ্গতে পারে এমন অতিরিক্ত জটিলতাকে ন্যায়সঙ্গত করতে পারে না)। অন্য উদাহরণ হিসাবে আপনি স্ক্রিপ্টগুলির জন্য পৃথক ফাইল ব্যবহার করতে পারেন।

তবে, বন্যের বেশিরভাগ প্যাচিং সিস্টেমগুলি সহজতম রুট নেয়: তারা কেবল পরিবর্তিত ফাইলগুলিকে প্যাকেজ করে - তারা কেবলমাত্র সেই ফাইলগুলির মধ্যেই প্যাকেজ পরিবর্তনগুলি চেষ্টা করে না (সম্ভবত সঙ্গত কারণেই, বেশিরভাগ গেমের সামগ্রী ইতিমধ্যে সংকুচিত হয় এবং উচ্চের বিরুদ্ধে প্যাচ তৈরি করে) এন্ট্রপি বা সংকোচিত ডেটা কিছুতেই কাজ করবে না )।


প্রতিটি পদ্ধতিতে পৃথক পৃথকভাবে প্যাকেজ বলতে কী বোঝায়। এটা কি ব্যবহারিক?
উলফডন

নিবন্ধন করুন একটি ইন্ডি বাড়ির জন্য সম্ভবত সময়টির উপযুক্ত নয় কারণ এটি চূড়ান্ত পরিমাণ সময় এবং প্রচেষ্টা লাগবে (আপনাকে অবশ্যই নিজের লিঙ্কার লিখতে হবে) - একচেটিয়াভাবে 'প্যাচিং প্রযুক্তি' নিয়ে কাজ করার মতো একটি সংস্থা এটি প্রচেষ্টাটির পক্ষে উপযুক্ত হবে। এটি সমস্ত নির্বাহযোগ্য কোডটি কতটা বড় তার উপর নির্ভর করে - আমি স্যাক্রেড 2 এ তাত্ক্ষণিকভাবে দেখেছি এবং এটি 26 এমবি (মূল এক্সের জন্য 8 মিমি) ছিল। একটি বাইনারি ডিফ যদিও এটি কাছাকাছি যেতে সক্ষম হতে পারে - তবুও এটি সেখানে রাখার মতো একটি ধারণা (আমি জানি যে সিএবিরা এএসইইএসএতে ভাল সংকোচনের কারণ তারা কাঠামোর সুযোগ নেয়)।
জোনাথন ডিকিনসন

এটা খুব আকর্ষণীয়। আমি মনে করি ব্যান্ডউইথ যেটি আজ তা হ'ল, গেম প্যাচের আকার হ্রাস করা কোনও বড় বিষয় নয়। একটি আকর্ষণীয় সুচিন্তিত উত্তর +1 করুন।
উলফডন

বেশিরভাগ গেমগুলিতে পৃথক পদ্ধতিতে প্যাচ করা সম্ভব হয় না। সংকলকটির এমনকি সাধারণ কোড পরিবর্তনগুলির সাথেও মারাত্মকভাবে আলাদা আউটপুট থাকতে পারে। স্বয়ংক্রিয় অন্তর্নিহিত সিদ্ধান্তগুলি পরিবর্তন করতে পারে, প্রতীক টেবিল বিন্যাস পরিবর্তন করতে পারে ইত্যাদি changes কোড পরিবর্তনগুলি প্রায়শই অভ্যন্তরীণ এপিআই কাঠামো পরিবর্তন করে। অপ্টিমাইজেশানগুলি আপনার কোড সম্পাদকে যা দেখছেন তার তুলনায় ফাংশন সীমার মধ্যে রেখাটি ইতিমধ্যে ঝাপসা করে। ডিআরএম সিস্টেমগুলিও জলকে প্রচুর পরিমাণে কাদা দেয়। প্যাচ সিস্টেমগুলি হোলস রিপ্লেসমেন্ট বা বাইনারি ডিফগুলি ব্যবহার করে এবং সংকুচিত করে। আপনার প্রস্তাবিত যে কোনও কিছুই আসল বিশ্বে শিপানোর পক্ষে খুব ভঙ্গুর im
শান মিডলডিচ

2
@ সানমিডলিচ এইটা সম্ভব সম্ভব প্রমাণ করার জন্য আমি এটি করতে যাচ্ছি :)।
জোনাথন ডিকিনসন

15

একটি গেমের এক্সিকিউটেবল কোড সর্বদা কেবল কার্যকর কার্যকর অবস্থায় থাকে না, প্রায়শই এটি বেশ কয়েকটি গতিশীল লাইব্রেরিতে বিভক্ত হয় (উদাহরণস্বরূপ গেম, গ্রাফিক্স এবং সাউন্ড ইঞ্জিন), প্রকৃত নির্বাহযোগ্য এবং বিভিন্ন উদ্দেশ্যে সম্ভবত অনেকগুলি স্ক্রিপ্ট।

কোনও প্যাচ এই সমস্ত অংশে পরিবর্তনের ওয়্যারেন্ট ছাড়াই এই অংশগুলির যে কোনও একটিতে সমস্যা সমাধান করতে পারে।

সব পরিবর্তিত ফাইল প্রতিস্থাপন তুলনায় বিভিন্ন পদ্ধতির কেবল একটি বাইনারি করতে হতে পারে পরিবর্তন তাদের উপর, এবং শুধুমাত্র packackge প্রকৃত পার্থক্য বিতরণ করা হবে।

(এটি অবশ্যই কেবল সেই ফাইলগুলিতে কাজ করবে যা আপনি গ্যারান্টি দিতে পারবেন যে ব্যবহারকারী দ্বারা পরিবর্তন করা হবে না))


2
আপনি উদাহরণ হিসাবে এটি উল্লেখ করতে পারেন: ডেমনোলজি ডটকম
ওল্ফড্ডন

2
ভাল ব্যবহারিক উত্তর। +1
ওল্ফড্ডন

2

সাধারণত তারা গেমের ডেটাতে প্যাচগুলি বিতরণ করতে একটি তৃতীয় পক্ষের বাইনারি ডিফ সিস্টেম ব্যবহার করে। এক্সিকিউটেবলগুলি সাধারণত তুচ্ছভাবে পুরোপুরি বিতরণ করার জন্য যথেষ্ট ছোট।

বেশিরভাগ আধুনিক গেমগুলিতে শত শত মেগস গেম ডেটা থাকে (বেশিরভাগ টেক্সচার, মডেল, স্তরের ডেটা ইত্যাদি)। এগুলির জন্য প্রায়শই প্যাচিং প্রয়োজন। আমি যতদূর জানি, প্রকাশকরা সাধারণত এটি করার একটি স্ট্যান্ডার্ড মালিকানাধীন পদ্ধতি রাখেন।

বলা বাহুল্য, ওপেন-সোর্স উদাহরণ রয়েছে। কিছু লিনাক্স বিতরণ (ফেডোরা?) তাদের প্যাচগুলির জন্য বাইনারি ডিফ ব্যবহার করে। আপনি সেগুলি তদন্ত করতে পারেন এবং তাদের উত্স কোড বা ডকুমেন্টেশন পড়তে পারেন।


-1

আধুনিক diffঅ্যালগরিদমগুলি দক্ষতার সাথে দুটি বাইনারিগুলির মধ্যে সাধারণ বাইট ক্রমগুলি খুঁজে পেতে পারে। অবাক হওয়ার কিছু নেই, আপনি যদি এটি সম্পর্কে চিন্তা করেন। ফাইল সংক্ষেপণ অভিন্ন বাইট সিকোয়েন্সগুলি খুঁজে পাওয়ার উপরও নির্ভর করে।

একবার আপনার কাছে অভিন্ন বাইট সিকোয়েন্সগুলির তালিকা হয়ে গেলে, আপনাকে কেবল পুরানো এবং নতুন অফসেট, দৈর্ঘ্য এবং অবশ্যই সম্পূর্ণ নতুন যা কিছু পাঠাতে হবে। গ্রহণের পক্ষে, এটি তখন একটি সরল সমাবেশ। পুরানো ফাইল থেকে আপনার যে বিটগুলি রাখতে হবে তা অনুলিপি করুন, নতুন বিটগুলি পূরণ করুন।

প্যাচ তৈরি করা আরও সহজ হয়ে ওঠে যদি আপনার লিঙ্কার কোনও এমএপি ফাইল ছড়িয়ে দিতে পারে যা ফাইলটির প্রতিটি ফাংশনের অফসেটগুলি তালিকাভুক্ত করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.