ফ্যাক্টোরিও (Factorio) গেমের লেট-গেমে একটা বড় সমস্যা হলো "মল" (Mall)। আপনার এমন একটা জায়গা দরকার যেখানে বেল্ট স্লিটার থেকে শুরু করে নিউক্লিয়ার রিঅ্যাক্টর পর্যন্ত সবকিছু অটোমেটিকভাবে তৈরি হবে এবং স্টকে কমে গেলেই তা আবার ক্রাফট করবে। কিন্তু ম্যানুয়ালি প্রতিটি আইটেমের জন্য সার্কিট ওয়্যার আর ডিসাইডার কম্বিনেটর সেট করা এক বিরাট ঝক্কির কাজ। সেই বিরক্তি থেকেই আমি আমার Factorio Auto Mall জেনারেটরটি লিখেছি।

"নেগেটিভ সিগন্যাল" ট্রিক: যেখানে আমার বুদ্ধি খেলেছিল

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

কোডের সেই অদ্ভুত অংশ এবং আমার ভয়

আমার কোডের সবচেয়ে বড় উইকনেস বা গ্রাইপ হলো একটি বিশেষ নাম্বার—-৫০০০। প্রতিটি আইটেম বা কোয়ালিটির জন্য আমি জাস্ট ৫০০০ করে কমিয়ে ইউনিক আইডি জেনারেট করছি। এই নাম্বারটা আমি একদমই খেয়াল-খুশিমতো নিয়েছিলাম। আমার মনে হয় যদি কখনো কোনো মডপ্যাকে হাজার হাজার রেসিপি থাকে, তবে এটি ৩২-বিট ইন্ট্রিজার লিমিট ক্রস করে ক্রাশ করতে পারে। তবুও আপাতত ভ্যানিলা স্পেস এজে এটি বেশ ভালো কাজ করছে।

ফ্যাক্টোরিও ২.০ এবং এর মডার্ন ফিচার

ফ্যাক্টোরিও ২.০ এর নতুন ConstantCombinatorSection ফিচারটি আমার জন্য বেশ সহায়ক ছিল। আগে আমাকে একটি লম্বা লিস্টে সব আইটেম রাখতে হতো, কিন্তু এখন আমি আলাদা আলাদা পেইজে সিগন্যালগুলো ম্যাপ করতে পারি।

// ২.০ সেকশনে ম্যাপিং
section := blueprint.Section{
    Index: i,
    Filters: filters,
}

কেন আমি গো (Go) ব্যবহার করলাম?

আমি চাইলে পাইথন বা লুয়া ব্যবহার করতে পারতাম, কিন্তু আমার দরকার ছিল একটি ফাস্ট বাইনারি যা টার্মিনাল থেকে রান করে সরাসরি ক্লিপবোর্ড ম্যানেজারে রেজাল্ট পাইপ করা যাবে। গো এর এই স্পিড আর সিম্পলিসিটি আমাকে গেম খেলতে অনেক বেশি ফোকাস করতে সাহায্য করে।

আমার এই Factorio Auto Mall সেটআপ এখন প্রতিটি নতুন গ্রহে ল্যান্ড করার পর আমার অন্তত ৩ ঘণ্টা সময় বাঁচিয়ে দেয়। আপনার গেম প্লে যদি অনেক বেশি ইঞ্জিনিয়ারিং নির্ভর হয়, তবে এ ধরনের অটোমেশন ছাড়া আসলে টিকে থাকা কঠিন।

ফ্যাক্টোরিও (Factorio) ২.০ এর সার্কিট নেটওয়ার্ক অটোমেশন এবং Go ব্যবহার করে কীভাবে দক্ষ Factorio Auto Mall জেনারেটর তৈরি করবেন, তার কোড ও টেকনিক্যাল গাইড নিয়ে বিস্তারিত জানুন।

Asaduzzaman Pavel

About the Author

Asaduzzaman Pavel is a Software Engineer who actually enjoys the friction of a well-architected system. He has over 15 years of experience building high-performance backends and infrastructure that can actually handle the real-world chaos of scale.

Currently looking for new opportunities to build something amazing.