What the hell is a Marin0?
It is a WIP reworking of the latest stable release of Mari0 SE geared towards being as flexible as possible. The way I put it to others is a gmod-styled ... mod. It is meant to serve as a standard base that people can work with. Its primary goal is to reduce the number of conflicting mods out in the woodwork by means of reducing the potential points of conflict, in addition to gmod-styled addons.
Here's a video of it in action.
What did you do?
- Love 0.9.1 compatibility. No more bad love. I wanted to reduce the number of people writing depreciated function calls to zero.
- Crash reloading. If you're editing and you manage to fix the code, a file watcher will reinit the game to the best of its ability.
- Graphics fallbacks. Not a new feature, but now you can reskin enemies without changing the base files. It has several fallback locations so the player can pick a system skin to use in addition to allowing modpacks to provide their own. This prevents things that aren't skinned from becoming invisible on a given graphics pack. If you are making a pack, warnings will be generated in the console when an image that isn't skinned falls back. If I catch you shipping graphics that are already included I will break your hands, 'cause there's no need for it. If you are making a mod off of this and you see a purple checkerboard, that means you forgot to give something a graphic.
- Sound fallbacks / packs. Just like graphics packs, mappacks can provide their own sounds and they will fall back just like graphics do. Crazy how nature do that. If you hear a skull trumpet that means you're referencing sounds that don't exist and now everyone will suffer because of it.
- Made it more debuggable. Better integration with ZeroBrane in addition to in-game utilities like a console.
- Built in screenshot uploading, hit f11 and it will automatically upload your current screen to imgur and put a link in your clipboard. It will also do this when you experience a crash so that fixing things is easier.
- Mass refactoring of code. Like, so much. I reduced the number of variables in global scope, fixed a lot of repeated anti-patterns in the code, split large files into smaller chunks with less responsibilities. Monolithic files make it harder to merge mods in so this was a good for everyone, really.
- Scope reduction. A lot of the game was responsible for things that didn't make sense. Why were globals responsible for portals when they could be objects? Other things like that.
- Entity overhaul. Instead of having a wall of includes, entities are being migrated to a Based Entity system that makes greater use of Middleclass' mixins and other fun things. This means that your new entity can just include the behavior of the companion cube and it will be carry-able.
- Sanity. All the entities that aren't yet based entities are now Sane Entities, they're not as smart as based entities, but they're smart enough to let the engine do some of their work for them.
- Baked in networking. A major advantage of migrating to the new entity system is that it allows the netcode to iterate through objects better and reduce the number of codepoints your entity needs to modify. Ideally, you would only need one lua file to make a new relatively basic entity that works with everything. Instead of just forcibly resyncing player position, the netcode also emulates movement keypresses for smoother and more accurate locations.
- New gels. White, black, water. White makes things portalable, black makes them unportalable, and water washes away any existing gel.
- Powerup routines. A powerup can now specify what state a player goes to. Want NSMB-styled powerups? Now that can happen, because your fireflower will now revert you to big mario. Unless you tell it not to. It is your call. This behavior isn't final but it's good enough for now to allow for things like mini-mushrooms with minimal effort.
- Gmod styled hooks. Want something to happen when another certain thing happens? Now your code can run without needing to touch core files, as long as there's a hook for it. Not enough hooks? Make one or ask for them.
- Control improvements. Every input that is handled in the game will eventually be handled by a library. This means that you can use crazy key combos if you want. It also means you can use the level editor without touching the mouse or keyboard. Tried to come up with a better controller default. Your mileage may vary.
- No more linear level names. Want a warp pipe to take you back to 1-1? Well, you're an asshole, but you can do it. Maps are on a per-name basis. As it stands, the only thing that a mappack needs is 1-1 and from there you could be taken anywhere else in the game. Whether or not the area you are transferring to is a sub-level depends on what flag you use on the warp-pipe.
- Killfeed. Why would I include a TF2 styled killfeed in a platformer? Makes you think.
- Editor improvements. Dropper tool now allows you to select entities. Buttons for making new maps. Better tooltips, entities get their graphics from their base graphics images, not from the lookup. Better point-entities graphics and tooltips. Map list shows you all maps for a given mappack, not just world one through eight. This means you'll need to click "new map", which will create a new map from your current map. Think of it as a "save as". The editor tells you what tool you're using, where your cursor is, and even has an animated outline for where the block you're painting will appear when you click. Editor menu background is now checkerboarded to make it easier to tell when something is transparent.
- Editor tool system. Want to write your own editor tool to do something way cool? Now you can! That way you don't have to bury your functionality miles deep in the editor.lua, work is being made to automate generation to an undo stack. Undo only the blocks you changed, not an entire map state.
- Editor shortcuts. ctrl+1-7 selects different tile groups. F1-4 now opens the different major tab sections. ctrl+t takes you into test mode immediately. ctrl+s saves the level. ctrl+e toggles to the eraser tool, hitting it twice will toggle to the entity eraser. Tab opens the editor menu to wherever you left it.
- Weapon system. Want to make a cool new gun that isn't a portal gun? Great! You could have a gel gun. Or a gun type that nobody has even started thinking about! Can you imagine that, being the person that made something nobody else has done before?!
- No-portal areas. Want the player not able to put portals somewhere? Okay, but you better have a good reason. This change was made by making the portal into a bullet, so there's tons of stuff you can do with this.
- Bowser is now an enemy. Why does he get to be so special? Now you can have your own boss as frequently as you please.
- More gates and events. You can now re-create the scene where mario touches the axe entirely with gates and events. That's pretty crazy. The animationtarget entity and event now provide a channel of communication between gates and the event system.
- Foundation for more gamemodes. Don't like being a flag toucher? If you insist. Now you can collect red coins, or even create your own gamemode with the foundation we're laying.
- Excursion funnel spread and bob. No longer will things be carried dead center, they will all bob and wave along with the waves of the funnel. This means that gel will be easier to spread. Lifetime of gel was also modified to be indefinite so that big rooms and more collaborative puzzles would be possible. Putting too much gel on your screen will lag you. I'm working on optimizing the graphics so that's less of a problem.
- Magic. It's so cool.
- Generators. You know when bullet bills and cheep cheeps start attacking your face? Now you can specify a region for them to exist in. Want a vertical level with cheep cheeps? Make them pop out of a pond instead of from literally everywhere.
- TMX/JSON maps. Don't like working with the existing map system? Tired of pumping variables into places that you're not comfortable with? Good. I'm lifting the maps from a global to an object, meaning that multiple maps could be loaded at the same time.
- Unlimited tiles. A side effect of TMX maps is that this allows you to edit maps externally and removes dependence on the "extra tiles" png. Go hog wild, include as many tiles as your heart desires. No more compiling a master sheet of all the things you like, keep 'em separate.
- Enemy riding. Ride those little fools like they're SMB2 shyguys or moles.
- Hats. What would I be if I didn't provide more hats?
- Damage types. Players and enemies alike can inflict damage types with their own defined callbacks. Things that kick shells technically score assists due to being the last thing that touched a physics object. Things that go through portals are technically "touched" so that whatever goes through them belongs to their parent. You can be credited for a kill by using a portal gun and a cube.
- Player localization. Each player object is now responsible for their coin count, lives, and score. There's also health. The player and enemies have health. Test this out with the strong goomba.
- New shaders. crushed reduces the colorspace to 4 colors only. greentint tints everything a select shade of green. Use them together and you can pretend you're playing on a Game Boy. Also added a bunch of shaders to simulate forms of color blindness. Mess, Stretch, picture-in-picture are two fun but ultimately useless shaders that I threw in the repo because who knows?
- Enemies. In addition to all of the flavorful attributes we introduced, we also imported alesan99's enemy.lua with what was the latest at the time.
What are you going to do?
- Finalize it. I want everyone to have their hands in this because I want the community brought together, not pushing a redistribution of the game that can't be combined with someone else. Part of this means that I'll be helping anyone that asks to make their code compatible with Marin0 if not outright merging it upstream.
- Everything it says here, to some capacity. And anything that you put over here.
Can I touch it?
You can, but it's very much broken. I didn't want to bring it public because I know it will get swarmed with loads of bug reports. Bug reports are good, but half of them are due to the game being in-transit to what it should look like in the end. Y'dig? The reason I'm bringing it out is because I want other developers to get their hands in the pot and tell me what they want to make the game easier to mod for others and easier for everyone's code to work together.
Check it out on github: Marin0SE
Can I see it?
Here's a bunch of images of it from when I was documenting bugs. You never take a picture of things when they work, huh?
Hammy got me to do the bulk of this, but he also helped. Mari0Maker also made my cursory visit into this post by asking politely. So good on him!