|
|
@@ -0,0 +1,115 @@ |
|
|
|
<!DOCTYPE html> |
|
|
|
|
|
|
|
<html lang="en"> |
|
|
|
<head> |
|
|
|
<meta name="theme-color" content="#20c420" /> |
|
|
|
<meta name="author" content="NGnius" /> |
|
|
|
<meta name="keywords" content="exmods,gamecraft,modding,mod" /> |
|
|
|
<meta name="og:type" content="website" /> |
|
|
|
<meta name="og:title" content="Exmods Blog" /> |
|
|
|
<meta name="og:description" content="Quick mod development" /> |
|
|
|
<meta name="description" content="Quick mod development" /> |
|
|
|
<meta name="og:image" content="../static/favicon.png" /> |
|
|
|
<meta name="og:url" content="https://www.exmods.org" /> |
|
|
|
<meta charset="UTF-8" /> |
|
|
|
<link rel="icon" href="../static/favicon.png" type="image/x-icon"/> |
|
|
|
<link rel="shortcut icon" href="../static/favicon.png" type="image/x-icon"/> |
|
|
|
<link rel="stylesheet" href="../static/style.css" type="text/css" /> |
|
|
|
<title>Exmods | Rapid Prototyping</title> |
|
|
|
</head> |
|
|
|
<body> |
|
|
|
<h3><a href="index.html" title="You know your browser has a back button, right?">Back to list</a></h3> |
|
|
|
<h1>Rapid Prototyping</h1> |
|
|
|
|
|
|
|
<div class="text-content"> |
|
|
|
<p> |
|
|
|
<span class="tab"></span> |
|
|
|
In software development, creating a minimum viable product is a very popular strategy for getting to market quickly and getting customer feedback as soon as possible. |
|
|
|
Once the software has made it to market, improvements are made iteratively based on feedback and the product roadmap. |
|
|
|
This is the basis of the agile development strategy, which aims to ensure the product meets what the customer wants all throughout the development process, |
|
|
|
instead of releasing the software once it's all been finalised and hoping that the customer likes it (called "waterfall"). |
|
|
|
If you're interested in how this can apply to business practices, check out <a href="http://theleanstartup.com/">The Lean Startup by Eric Ries</a>. |
|
|
|
Admittedly, it's not the most interesting book to read -- I have read about half of it, |
|
|
|
but got tired of it (which means it's one of two books I never finished, the other being Relativity by Albert Einstein -- so The Lean Startup is like Relativity?) |
|
|
|
-- but it's great for learning about how lots of tech startups think. |
|
|
|
If you want to start a company, or your own for-profit hobby project, it may be worth a read. |
|
|
|
Regardless, agile is the currently the industry-leading way of doing development. |
|
|
|
There's some useless trivia that you'll probably never need unless you want to sound smart to friends. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
<span class="tab"></span> |
|
|
|
Agile software involves short coding "sprints" -- usually one or two weeks long -- where new features are added and existing ones are changed. |
|
|
|
At the end of a sprint, the new changes are released to the customers. |
|
|
|
To complete coding sprints on time, many things have to go right. |
|
|
|
Beforehand, features and changes for a sprint have to small enough to complete in one sprint |
|
|
|
(in exceptional cases, bigger features which can't be split up sometimes span multiple sprints). |
|
|
|
During the sprint, changes have to be made to work with minimal unexpected complications. |
|
|
|
Issues often come up when multiple developers change things which are inter-dependent (Svelto.ECS tries to mitigate this). |
|
|
|
If a feature ends up taking too long, deadlines can be missed. And companies don't like missing deadlines |
|
|
|
(although construction and governments seem to do it pretty often). |
|
|
|
To reduce the risk of missing deadlines, it's helpful to create a prototype of a feature first. |
|
|
|
This allows the developers to get acquainted with the intricate details that will need to be done, which is vital to estimating the amount of work required. |
|
|
|
But the prototype has to be made quickly, otherwise the sprint can't be started and deadlines will still slip. |
|
|
|
That's why rapid prototyping is a favourite buzzword of a lot of companies. |
|
|
|
I think FreeJam also calls them mock features (there's lots of unused code which mentions "mock"). |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
<span class="tab"></span> |
|
|
|
Since this blog is about Gamecraft modding, I'll stop talking in generalities. |
|
|
|
Rapid prototyping for mods is actually pretty easy. |
|
|
|
For a new mod, <a href="https://git.exmods.org/modtainers/HelloModdingWorld">HelloModdingWorld</a> |
|
|
|
has a mod skeleton ready for you, so that you can avoid most of the setup and boilerplate. |
|
|
|
For an existing mod, it's easy to throw together a new feature in a new git branch or using a copy of the code without risk to the mod. |
|
|
|
I hate to shill the <a href="https://git.exmods.org/modtainers/GamecraftModdingAPI">GamecraftModdingAPI</a>, but it can really make prototype features easy to implement. |
|
|
|
Once you've got a feel for how the feature should be done properly, you can reuse code from the prototype to make it happen. |
|
|
|
Seeing a new feature working is the most rewarding part of coding, at least for me, even if it's only a prototype. |
|
|
|
Seeing a feature working after only 30 minutes of work is icing on the cake. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
<span class="tab"></span> |
|
|
|
Recently, I put my rapid prototyping experience to a test by writing a mod to expose additional graphical settings, |
|
|
|
called <a href="https://git.exmods.org/NGnius/Kompressor">Kompresor</a>. |
|
|
|
While I didn't get it working in 30 minutes, I made video recordings of every minute I spent working on it and the footage didn't come close to a full day of work. |
|
|
|
A lot of that time was spent manually associating the file's data to specific graphical settings, which was tedious and unavoidable no matter how I did it. |
|
|
|
With that in mind, and if you don't count the long time I spent editing the footage, the first sprint for Kompressor took about 6 hours. |
|
|
|
That's pretty rapid for implementing a mod that modifies most readily available graphics settings. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
<span class="tab"></span> |
|
|
|
The next Kompressor sprint, whenever I find some time to record me typing and talking to my self, should be just as quick. |
|
|
|
I'm planning on focusing on adding game save compression for that coding sprint. |
|
|
|
The file compression involved will require some runtime game patching using <a href="https://harmony.pardeike.net/">Harmony</a>, which is something that I don't mention that often. |
|
|
|
Harmony is an easy way to hijack C# function calls and run your own code before, after or instead of the original. |
|
|
|
All of that is setup while the game is booting, and removed when the game shuts down, so it's a very safe and powerful way to mod Gamecraft. |
|
|
|
Harmony also offers quite a few helpful ways to designate what to patch, which can make patching as quick as writing a couple lines of code. |
|
|
|
When rapidly prototyping, this makes running code as a consequence of vanilla Gamecraft code easy and convenient. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
<span class="tab"></span> |
|
|
|
But how do you find the function you want to patch? |
|
|
|
Well, I've saved the best (worst) for last. |
|
|
|
Finding the function takes a lot of reading code. |
|
|
|
The best tools for reading code are C# decompilers like <a href="">dnSpy</a> and <a href="">ilSpy</a>. |
|
|
|
Unfortunately, I can't offer much advice for speeding that up except that it takes common sense |
|
|
|
(CommandLine.dll does not contain block-related code) and experience (ECS does not stand of Extremely Cool Sliderule). |
|
|
|
Searching the Gamecraft codebase for what you're looking for is undeniably the biggest slowdown that you can encounter while rapidly prototyping. |
|
|
|
Depending on what you're trying to mod, you may be able to avoid it, but if you can't it's not the end of the world: |
|
|
|
Reading Gamecraft code can be quite educational, especially for someone who doesn't know a lot about C# (like me). |
|
|
|
Function-finding can be slow, but think of it as an investment for speeding up future endeavours. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
<span class=""></span> |
|
|
|
See? Modding doesn't have to involve days of yelling at your code about a missing semicolon (only hours instead). |
|
|
|
Writing a minimum viable mod is a great way to explore what you can do with mods. |
|
|
|
Write some code, give it a test run, and repeat to see where you can go. |
|
|
|
Investing a few hours could get you pretty far. |
|
|
|
You could even make your investment back by completing a mod bounty -- the cash for importing 3D objects into the game sounds pretty sweet. |
|
|
|
If you're really enthusiastic about rapid prototyping, hit me up since I've been thinking about hosting a modding hackathon (modathon?), but I'd like to have more than 2 people show up. |
|
|
|
So go try some sprinting! |
|
|
|
</p> |
|
|
|
</div> |
|
|
|
<footer> |
|
|
|
exmods.org|<a href="https://git.exmods.org/ExMods/html-site">Site Repository</a>|<a href="https://exmods.org">Home</a>|<a href="https://discord.gg/2CtWzZT">Discord</a>|<a href="https://twitter.com/GamecraftMods">Twitter</a> |
|
|
|
</footer> |
|
|
|
</body> |
|
|
|
</html> |