everestapi / everest Goto Github PK
View Code? Open in Web Editor NEWEverest - Celeste Mod Loader / Mod API
Home Page: https://everestapi.github.io/
License: MIT License
Everest - Celeste Mod Loader / Mod API
Home Page: https://everestapi.github.io/
License: MIT License
This is probably middle-low priority, but let's see if we can compile some common problems that throw unhelpful exceptions and try to make them more helpful.
Looking at you, tileset errors.
The core heart being visible is hardcoded to the level ID 9 (core) unlike how you can use State 3 to view the moon, I am unfamiliar with celeste and Everest code so IDK how to make this possible myself...
OS: Debian 10 buster
Mono version: 5.8.0.108
I am running a deb-based mono install with minimal nuget packages. From ab9caf3 onward, my build environment no longer functions properly; I need to install nuget packages which mono has already accounted for, in /usr/lib/mono/
. This is a nuisance because nuget wants to install all the dependencies too, which I don't have installed because mono has that taken care of, too.
Is there any workaround possible for my workflow? If all else fails, I could just revert this commit on my local repo.
Someone reported crashes on Linux with the itch.io version and only CelesteTAS installed: to replicate, have both installed, go anywhere and try to dash.
System.NullReferenceException: Object reference not set to an instance of an object
at IL.Monocle.Commands.add_Render (MonoMod.Cil.ILContext+Manipulator ) <0x40c41170 + 0x00002> in <58802592a1084eefacf85810fc582ba3>:0
at (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition.DMD<DMD<Hook<Celeste.Stats::Increment>?-1002508516>?807530993::Hook<Celeste.Stats::Increment>?-1002508516>(Celeste.Stat,int)
Seeing the source code, there is no reason for execution to jump from the hook to Commands.add_Render though.
=================================================================
Got a SIGILL while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
I cannot replicate this myself with my Steam version of the game.
This is a non-critical enhancement. It'd be nice if we could fit this into 1.0, but it's not a requirement.
Batby#8536 on Discord keeps asking for 21:9 support. It will never be officially supported as peeking into other rooms (or even the void) is undesired. Luckily, game modifications can get away with weird / negative side effects more easily than "official" features.
The menu code has been written with a "virtual" fixed resolution of 1920x1080 in mind - we'll probably just shrink the menu so that it fits on the screen.
I don't know how much of the in-game rendering code assumes a 16:9 context.
This task is currently open for anyone as I'm working on the ghost mod right now.
Here are the recreated steps and examples.
EverestHookBugExample.zip
DoScreenWipe
, it works fine. When retry in game will output two logs. (04/15/2020 22:15:00) [Everest] [Verbose] [Hook2] On.Celeste.Level.DoScreenWipe wipeIn=False, onComplete=System.Action, hiresSnow=False
(04/15/2020 22:15:00) [Everest] [Verbose] [Hook2] On.Celeste.Level.DoScreenWipe wipeIn=True, onComplete=, hiresSnow=False
public override void Load() {
On.Celeste.Level.DoScreenWipe += JustLogDoScreenWipe;
}
private static void JustLogDoScreenWipe(On.Celeste.Level.orig_DoScreenWipe orig, Level self, bool wipeIn, Action onComplete, bool hiresSnow) {
Logger.Log("Hook2", $"On.Celeste.Level.DoScreenWipe\twipeIn={wipeIn}, onComplete={onComplete}, hiresSnow={hiresSnow}");
orig(self, wipeIn, onComplete, hiresSnow);
}
End
, when retry in game the JustLogDoScreenWipe
will only output one log.(04/15/2020 22:25:46) [Everest] [Verbose] [Hook2] On.Celeste.PlayerDeadBody.End
(04/15/2020 22:25:47) [Everest] [Verbose] [Hook2] On.Celeste.Level.DoScreenWipe wipeIn=True, onComplete=, hiresSnow=False
public override void Load() {
On.Celeste.PlayerDeadBody.End += JustLogEnd;
On.Celeste.Level.DoScreenWipe += JustLogDoScreenWipe;
}
public override void Unload() {
On.Celeste.PlayerDeadBody.End -= JustLogEnd;
On.Celeste.Level.DoScreenWipe -= JustLogDoScreenWipe;
}
private void JustLogEnd(On.Celeste.PlayerDeadBody.orig_End orig, PlayerDeadBody self) {
Logger.Log("Hook2", "On.Celeste.PlayerDeadBody.End");
orig(self);
}
private static void JustLogDoScreenWipe(On.Celeste.Level.orig_DoScreenWipe orig, Level self, bool wipeIn, Action onComplete, bool hiresSnow) {
Logger.Log("Hook2", $"On.Celeste.Level.DoScreenWipe\twipeIn={wipeIn}, onComplete={onComplete}, hiresSnow={hiresSnow}");
orig(self, wipeIn, onComplete, hiresSnow);
}
It seems that after Hook End
method, the DoScreenWipe
method called by End
method cannot be Hooked.
private void End()
{
if (!finished)
{
finished = true;
Level level = SceneAs<Level>();
if (DeathAction == null)
{
DeathAction = level.Reload;
}
level.DoScreenWipe(wipeIn: false, DeathAction);
}
}
As an alternative to enabling auto updating, notify the user when mod updates are available.
Maybe do that in the same way as Everest updates (logo on title screen and/or message on the main menu)?
This makes installing a Crystal Shatter trigger anywhere near a Floaty Space Block, Intro Crusher, Zip Mover, Swap Block, or Star Jump Block a recipe for disaster.
uh-oh. I wasn't done.
But I'd like to take a little break and come back in a bit. I don't think anything I list here will be an API-breaking change.
Non-tracked registered berries need to be tallied up too, so that save files can be gold-sleeved for levelsets that have all berries, tracked and secret, collected.
completion_stamps
branch aims to tackle this.Do we need to do something to include registered modberries in LevelData.excludeNames
? This looks a little suspicious and I should have looked into it earlier.
Need to account for vanilla moonberries. (Ugh.)
We may want a custom berry seed object that can accept an arbitrary Entity and double-checks that what is passed is a registered strawberry. Then we can read seed sprite data from custom berry definitions and do all the other things we need to with reflection.
Non-vanilla berries aren't appearing in the Debug map. This is low priority, but we'll fix it anyway.
Of course, feel free to tack on anything worth mentioning, or tackle something on here yourself.
When opening the installer, it seems to be cropped/scaled weirdly, so the full window cannot be viewed. As such, I am unable to install Everest.
My display is 1920x1080 with 125% scaling in Windows' Settings. I'm assuming it's something to do with that but I'm not sure. Any way to fix this? I've already tried changing the compatibility settings, but to no avail.
The video honestly speaks for itself. The first time a Seeker is encountered and catches sight of Madeline, the game slams on the brakes for some unknown reason.
This is occurring in a vanilla environment. Any clues to the cause will be appreciated by all.
If we can, I mean. And we probably should if we can.
First of all, sorry if this is not the right place to report those.
I'm reporting here the issues I encountered with hooks while developing Extended Variants:
Player.ExplodeLaunch
makes the game explodeFor some reason, hooking Player.ExplodeLaunch (even with a hook that does nothing) crashes the game (with System.AccessViolationException
in the system's event logs on the XNA branch). This happens with both On.Celeste
hooks and IL.Celeste
ones.
Here is an example mod doing just that: ExplodeLaunch.zip. To replicate, go to room 09 in chapter 6 and hit a bumper.
I didn't encounter this issue with any other method I hooked... and I hooked a lot of them. 馃 Might just be something special with this method or something I'm doing wrong.
More specifically, it seems that if two IL hooks are present on a method, unhooking one of them does not work (as in, the hook is still effective). But if there is only one hook, unhooking it works fine.
Here is a mod to replicate: ILHook.zip. This hooks Level.Render to enable debug pathfinder rendering and has an option to change the color grade of the level to Core (hot).
Player.orig_Update()
Trying to IL-hook Player.orig_Update() gives the following error (full error log):
System.ArgumentException: The type or method has 1 generic parameter(s), but 2 generic argument(s) were provided. A generic argument must be provided for each generic parameter.
I didn't look into this in very deep detail, but from what I can see, the call to Entity.CollideCheck<Solid, NegaBlock>(Vector2)
is the one causing trouble. Entity.CollideCheck<T>(Vector2)
also exists, so maybe this one gets picked by accident?
I have been developing a code mod using IL.Celeste
recently, and I ran into some issues when trying to use ILCursor
. I cannot use some of the methods without the game blowing up with various errors, for example:
TryGotoNext(MoveType moveType, params Func<Instruction, bool>[] predicates)
: "The JIT compiler encountered an internal limitation"Ver 1.2.6.1 [Everest: 859-azure-98148]
07/17/2019 13:00:35
System.InvalidProgramException: Le compilateur JIT a rencontr茅 une limitation interne.
GotoNext(MoveType moveType, params Func<Instruction, bool>[] predicates)
:Ver 1.2.6.1 [Everest: 859-azure-98148]
07/17/2019 13:01:51
System.NullReferenceException: Object reference not set to an instance of an object.
at Celeste.Mod.Helpers.MonoModUpdateShim._ILCursor.GotoNext(ILCursor c, Func`2[] predicates) in d:\a\1\s\Celeste.Mod.mm\Mod\Helpers\MonoModUpdateShim.cs:line 31
TryGotoNext(params Func<Instruction, bool>[] predicates)
: works fineI am opening this issue because from what I understand, these crashes are coming from ILCursor
getting relinked to MonoModUpdateShim
. If I remove that shim my code mod runs fine (but I guess it breaks older code mods).
I would love to help solving that issue, but I am afraid of breaking backward compatibility. Which mods should I test my changes with if I try to solve this?
Currently, strawberry count related achievements and the moon berry one can be unlocked when playing a mod campaign, but the "all C-sides" achievement can only be unlocked for the vanilla campaign.
So, it would make sense to restrict the "strawberry count" and the "moon berry" achievements to vanilla maps as well.
Some mappers reported random crashes on map reload (after saving in Ahorn):
https://hatebin.com/cwbtmoqzss
https://cdn.discordapp.com/attachments/514006912115802113/714618373924847686/error_log.txt
This seems to be a "random hard-to-reproduce" crash as I wasn't able to replicate myself, but that has been reported multiple times.
So, I decided to finally try out a few Celeste mods... But the Everest installer is giving me an error. Any chance someone could help me? Thanks in advance,
Rainbowmon of the Care-monic Spirits.
The map screen is not as consistent with modded campaigns as it is the vanilla campaign. I have noticed two inconsistencies.
These minor issues do not change much, just minor nitpicks.
Running MonoMod to patch Celeste 1.3.1.2 (as part of miniinstaller) errors out in a variety of ways depending on what mono version I have.
6.4.0.198 (latest)
$ mono MonoMod.exe Celeste.exe
WARNING: The runtime version supported by this application is unavailable.
Using default runtime: v4.0.30319
MonoMod 19.9.1.6
[MonoMod] Reading input file into module.
[MonoMod] [Main] Scanning for mods in directory.
[MonoMod] [ReadMod] Loading mod dir: /home/audrey/games/celeste
[MonoMod] [ReadMod] Loading mod: /home/audrey/games/celeste/Celeste.Mod.mm.dll
[MonoMod] [Main] mm.AutoPatch();
[MonoMod] [AutoPatch] Parsing rules in loaded mods
[MonoMod] [RulesModder] [Write] Writing modded module into output stream.
[MonoMod] [AutoPatch] PrePatch pass
[MonoMod] [AutoPatch] Patch pass
[MonoMod] [AutoPatch] PatchRefs pass
[MonoMod] [PostProcessor] PostProcessor pass #1
[MonoMod] [PostProcessor] PostProcessor pass #2
[MonoMod] [Write] Writing modded module into output file.
Mono.CompilerServices.SymbolWriter.MonoSymbolFileException: Exception of type 'Mono.CompilerServices.SymbolWriter.MonoSymbolFileException' was thrown.
at Mono.CompilerServices.SymbolWriter.MethodEntry.CheckLineNumberTable (Mono.CompilerServices.SymbolWriter.LineNumberEntry[] line_numbers) [0x00031] in <40e1bef3e5f040168367d50ea20aeffc>:0
at Mono.CompilerServices.SymbolWriter.MethodEntry..ctor (Mono.CompilerServices.SymbolWriter.MonoSymbolFile file, Mono.CompilerServices.SymbolWriter.CompileUnitEntry comp_unit, System.Int32 token, Mono.CompilerServices.SymbolWriter.ScopeVariable[] scope_vars, Mono.CompilerServices.SymbolWriter.LocalVariableEntry[] locals, Mono.CompilerServices.SymbolWriter.LineNumberEntry[] lines, Mono.CompilerServices.SymbolWriter.CodeBlockEntry[] code_blocks, System.String real_name, Mono.CompilerServices.SymbolWriter.MethodEntry+Flags flags, System.Int32 namespace_id) [0x0005e] in <40e1bef3e5f040168367d50ea20aeffc>:0
at Mono.CompilerServices.SymbolWriter.SourceMethodBuilder.DefineMethod (Mono.CompilerServices.SymbolWriter.MonoSymbolFile file, System.Int32 token) [0x000e1] in <40e1bef3e5f040168367d50ea20aeffc>:0
at Mono.CompilerServices.SymbolWriter.SourceMethodBuilder.DefineMethod (Mono.CompilerServices.SymbolWriter.MonoSymbolFile file) [0x0000d] in <40e1bef3e5f040168367d50ea20aeffc>:0
at Mono.CompilerServices.SymbolWriter.MonoSymbolWriter.WriteSymbolFile (System.Guid guid) [0x00015] in <40e1bef3e5f040168367d50ea20aeffc>:0
at Mono.Cecil.Mdb.MdbWriter.Dispose () [0x00000] in <40e1bef3e5f040168367d50ea20aeffc>:0
at Mono.Cecil.ModuleWriter.Write (Mono.Cecil.ModuleDefinition module, Mono.Disposable`1[T] stream, Mono.Cecil.WriterParameters parameters) [0x00152] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.ModuleWriter.WriteModule (Mono.Cecil.ModuleDefinition module, Mono.Disposable`1[T] stream, Mono.Cecil.WriterParameters parameters) [0x00002] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.ModuleDefinition.Write (System.String fileName, Mono.Cecil.WriterParameters parameters) [0x00017] in <8d9dd476eed0422b8775a719e22dbc54>:0
at MonoMod.MonoModder.Write (System.IO.Stream output, System.String outputPath) [0x0005f] in <71b3fea653634393ac8b3aaec0affcdc>:0
at MonoMod.Program.Main (System.String[] args) [0x00262] in <71b3fea653634393ac8b3aaec0affcdc>:0
mono 4.6.2 (packaged with ubuntu 18.04):
root@8d4d221713d4:/mnt# mono MonoMod.exe Celeste.exe
WARNING: The runtime version supported by this application is unavailable.
Using default runtime: v4.0.30319
MonoMod 19.9.1.6
[MonoMod] Reading input file into module.
[MonoMod] [Main] Scanning for mods in directory.
[MonoMod] [ReadMod] Loading mod dir: /mnt
[MonoMod] [ReadMod] Loading mod: /mnt/Celeste.Mod.mm.dll
[MonoMod] [Main] mm.AutoPatch();
[MonoMod] [AutoPatch] Parsing rules in loaded mods
[MonoMod] [RulesModder] [Write] Writing modded module into output stream.
[MonoMod] [AutoPatch] PrePatch pass
[MonoMod] [AutoPatch] Patch pass
[MonoMod] [AutoPatch] PatchRefs pass
[MonoMod] [PostProcessor] PostProcessor pass #1
[MonoMod] [PostProcessor] PostProcessor pass #2
[MonoMod] [Write] Writing modded module into output file.
System.MissingMethodException: Method 'System.Runtime.CompilerServices.RuntimeHelpers.IsReferenceOrContainsReferences' not found.
at Mono.CompilerServices.SymbolWriter.MonoSymbolWriter.CloseMethod () [0x00000] in <40e1bef3e5f040168367d50ea20aeffc>:0
at Mono.Cecil.Mdb.MdbWriter.Write (Mono.Cecil.Cil.MethodDebugInformation info) [0x000be] in <40e1bef3e5f040168367d50ea20aeffc>:0
at Mono.Cecil.Cil.CodeWriter.WriteResolvedMethodBody (Mono.Cecil.MethodDefinition method) [0x000f1] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.Cil.CodeWriter.WriteMethodBody (Mono.Cecil.MethodDefinition method) [0x0002b] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.MetadataBuilder.AddMethod (Mono.Cecil.MethodDefinition method) [0x00013] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.MetadataBuilder.AddMethods (Mono.Cecil.TypeDefinition type) [0x00013] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.MetadataBuilder.AddType (Mono.Cecil.TypeDefinition type) [0x0009a] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.MetadataBuilder.AddTypes () [0x00018] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.MetadataBuilder.BuildTypes () [0x00014] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.MetadataBuilder.BuildModule () [0x0009f] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.MetadataBuilder.BuildMetadata () [0x00000] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.ModuleWriter+<>c.<BuildMetadata>b__2_0 (Mono.Cecil.MetadataBuilder builder, Mono.Cecil.MetadataReader _) [0x00000] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.ModuleDefinition.Read[TItem,TRet] (TItem item, System.Func`3[T1,T2,TResult] read) [0x00029] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.ModuleWriter.BuildMetadata (Mono.Cecil.ModuleDefinition module, Mono.Cecil.MetadataBuilder metadata) [0x0000f] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.ModuleWriter.Write (Mono.Cecil.ModuleDefinition module, Mono.Disposable`1[T] stream, Mono.Cecil.WriterParameters parameters) [0x0010a] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.ModuleWriter.WriteModule (Mono.Cecil.ModuleDefinition module, Mono.Disposable`1[T] stream, Mono.Cecil.WriterParameters parameters) [0x00002] in <8d9dd476eed0422b8775a719e22dbc54>:0
at Mono.Cecil.ModuleDefinition.Write (System.String fileName, Mono.Cecil.WriterParameters parameters) [0x00017] in <8d9dd476eed0422b8775a719e22dbc54>:0
at MonoMod.MonoModder.Write (System.IO.Stream output, System.String outputPath) [0x0005f] in <71b3fea653634393ac8b3aaec0affcdc>:0
at MonoMod.Program.Main (System.String[] args) [0x00262] in <71b3fea653634393ac8b3aaec0affcdc>:0
mono 4.2.1 (bundled with ubuntu 16.04):
$ mono MonoMod.exe Celeste.exe
WARNING: The runtime version supported by this application is unavailable.
Using default runtime: v4.0.30319
MonoMod 19.9.1.6
[MonoMod] Reading input file into module.
[MonoMod] [Main] Scanning for mods in directory.
[MonoMod] [ReadMod] Loading mod dir: /mnt
[MonoMod] [ReadMod] Loading mod: /mnt/Celeste.Mod.mm.dll
[MonoMod] [Main] mm.AutoPatch();
[MonoMod] [AutoPatch] Parsing rules in loaded mods
MonoMod.Utils.RelinkFailedException: MonoMod failed relinking System.Object (context: MonoMod.MonoModRules) ---> System.MissingMethodException: Method 'Array.Empty' not found.
at MonoMod.MonoModder.FindType (System.String name, Boolean runtimeName) <0x414ded20 + 0x0004f> in <filename unknown>:0
at MonoMod.MonoModder.FindTypeDeep (System.String name) <0x414de8a0 + 0x00057> in <filename unknown>:0
at MonoMod.MonoModder.MainRelinker (IMetadataTokenProvider mtp, IGenericParameterProvider context) <0x414de1c0 + 0x00127> in <filename unknown>:0
at MonoMod.MonoModder.Relinker (IMetadataTokenProvider mtp, IGenericParameterProvider context) <0x414de080 + 0x00036> in <filename unknown>:0
--- End of inner exception stack trace ---
at MonoMod.MonoModder.Relinker (IMetadataTokenProvider mtp, IGenericParameterProvider context) <0x414de080 + 0x00113> in <filename unknown>:0
at MonoMod.InlineRT.MonoModRulesModder.Relinker (IMetadataTokenProvider mtp, IGenericParameterProvider context) <0x414bea50 + 0x000fb> in <filename unknown>:0
at MonoMod.Utils.MonoModExt.Relink (Mono.Cecil.TypeReference type, MonoMod.Utils.Relinker relinker, IGenericParameterProvider context) <0x414bdf50 + 0x00936> in <filename unknown>:0
at MonoMod.MonoModder.PatchRefsInType (Mono.Cecil.TypeDefinition type) <0x414dd230 + 0x00137> in <filename unknown>:0
at MonoMod.MonoModder.PatchRefs () <0x414dc970 + 0x00616> in <filename unknown>:0
at MonoMod.InlineRT.MonoModRulesManager.ExecuteRules (MonoMod.MonoModder self, Mono.Cecil.TypeDefinition orig) <0x414b2f70 + 0x00777> in <filename unknown>:0
at MonoMod.MonoModder.ParseRules (Mono.Cecil.ModuleDefinition mod) <0x414b2e30 + 0x00063> in <filename unknown>:0
at MonoMod.MonoModder.AutoPatch () <0x414b2a90 + 0x000b2> in <filename unknown>:0
at MonoMod.Program.Main (System.String[] args) <0x4143dd50 + 0x00726> in <filename unknown>:0
This is not actually where miniinstaller errors out - something a few steps later corrupts Celeste.exe and replaces it with an empty file somehow. Here's the log for that: miniinstaller-log.txt
Realistically this is probably a MonoMod bug or an error with my environment, but I would appreciate any relevant advice on getting everest installed on linux... thanks!
This is more of a problem for @Vexatos and Cruor, but as most people will be using Everest for custom maps, this is definitely a spot that needs work. Despite the fact that this is more of a problem for Maple and whoever is working on the one or more GUIs, this should happen before 1.0 is out if we want it to actually be useful.
Low priority, of course, being avoidable in a lot of scenarios, but it did catch a casual player checking hitboxes just now.
(is this even in our power to fix?)
Reading this bright text on this bright background doesn't seem like the best use of your eyes.
This is already done, just wanted to track this change.
Fake hearts have randomized colors which change when editing a map, but seem consistent under no edits.
I suppose it would be worth adding an option that sets a specific heart color for individual fake hearts.
I have a free copie of celeste, Im trying to install everest mod loader but it fails in the last screen every time, the game itself runs fine, here is the miniistaller log
Loading Mono.Cecil
Lazily loading C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\Mono.Cecil.dll
Loading Mono.Cecil.Mdb
Lazily loading C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\Mono.Cecil.Mdb.dll
Loading Mono.Cecil.Pdb
Lazily loading C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\Mono.Cecil.Pdb.dll
Loading MonoMod.Utils.dll
Lazily loading C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\MonoMod.Utils.dll
Loading MonoMod
Lazily loading C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\MonoMod.exe
Loading MonoMod.RuntimeDetour.dll
Lazily loading C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\MonoMod.RuntimeDetour.dll
Loading MonoMod.RuntimeDetour.HookGen
Lazily loading C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\MonoMod.RuntimeDetour.HookGen.exe
Running MonoMod for C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\orig\Celeste.exe
MonoMod 20.5.2.5
[MonoMod] Reading input file into module.
[MonoMod] [ReadMod] Loading mod dir: C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅
[MonoMod] [ReadMod] Loading mod: C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\Celeste.Mod.mm.dll
[MonoMod] [Main] Scanning for mods in directory.
[MonoMod] [ReadMod] Loading mod dir: C:\Games\Celeste v1.3.0.0-鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅\orig
[MonoMod] [Main] mm.AutoPatch();
[MonoMod] [AutoPatch] Parsing rules in loaded mods
[MonoMod] [RulesModder] [Write] Writing modded module into output stream.
System.TypeInitializationException: Se produjo una excepci贸n en el inicializador de tipo de 'MonoMod.MonoModRules'. ---> System.Exception: Unsupported version of Celeste: 1.3.0.0
en MonoMod.MonoModRules..cctor()
--- Fin del seguimiento de la pila de la excepci贸n interna ---
en System.Runtime.CompilerServices.RuntimeHelpers._RunClassConstructor(RuntimeType type)
en MonoMod.InlineRT.MonoModRulesManager.ExecuteRules(MonoModder self, TypeDefinition orig)
en MonoMod.MonoModder.ParseRules(ModuleDefinition mod)
en MonoMod.MonoModder.AutoPatch()
en MonoMod.Program.Main(String[] args)
System.Exception: MonoMod failed creating a patched assembly!
en MiniInstaller.Program.RunMonoMod(String asmFrom, String asmTo)
en MiniInstaller.Program.Main(String[] args)
Installing Everest failed.
Please create a new issue on GitHub @ https://github.com/EverestAPI/Everest
or join the #modding_help channel on Discord (invite in the repo).
Make sure to upload your miniinstaller-log.txt
Ver 1.2.6.1 [Everest: 797-azure-5f3fa]
02/03/2019 20:32:31
System.DllNotFoundException: libMonoPosixHelper.dylib
at (wrapper managed-to-native) System.IO.Compression.DeflateStreamNative.CreateZStream(System.IO.Compression.CompressionMode,bool,System.IO.Compression.DeflateStreamNative/UnmanagedReadOrWrite,intptr)
at System.IO.Compression.DeflateStreamNative.Create (System.IO.Stream compressedStream, System.IO.Compression.CompressionMode mode, System.Boolean gzip) [0x0004a] in <4deb318bb3254cab91ca66698a056198>:0
at System.IO.Compression.DeflateStream..ctor (System.IO.Stream compressedStream, System.IO.Compression.CompressionMode mode, System.Boolean leaveOpen, System.Boolean gzip) [0x0002d] in <4deb318bb3254cab91ca66698a056198>:0
at System.IO.Compression.DeflateStream..ctor (System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel, System.Boolean leaveOpen, System.Boolean gzip) [0x00000] in <4deb318bb3254cab91ca66698a056198>:0
at System.IO.Compression.DeflateStream..ctor (System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel, System.Boolean leaveOpen) [0x00000] in <4deb318bb3254cab91ca66698a056198>:0
at (wrapper remoting-invoke-with-check) System.IO.Compression.DeflateStream..ctor(System.IO.Stream,System.IO.Compression.CompressionLevel,bool)
at Jdenticon.IO.ZlibStream..ctor (System.IO.Stream stream) [0x00047] in <ab564dc515b94c289a2d06cfad69bf6e>:0
at (wrapper remoting-invoke-with-check) Jdenticon.IO.ZlibStream..ctor(System.IO.Stream)
at Jdenticon.Drawing.Png.PngEncoder.WriteImageData () [0x00011] in <ab564dc515b94c289a2d06cfad69bf6e>:0
at Jdenticon.Drawing.Png.PngEncoder.Save (System.IO.Stream output) [0x00047] in <ab564dc515b94c289a2d06cfad69bf6e>:0
at Jdenticon.Drawing.Bitmap.SaveAsPng (System.IO.Stream stream) [0x0002b] in <ab564dc515b94c289a2d06cfad69bf6e>:0
at Jdenticon.Rendering.PngRenderer.SavePng (System.IO.Stream stream) [0x00000] in <ab564dc515b94c289a2d06cfad69bf6e>:0
at Jdenticon.PngExtensions.GeneratePng (Jdenticon.Identicon icon) [0x00027] in <ab564dc515b94c289a2d06cfad69bf6e>:0
at Jdenticon.PngExtensions.SaveAsPng (Jdenticon.Identicon icon) [0x00000] in <ab564dc515b94c289a2d06cfad69bf6e>:0
at Celeste.AreaComplete.Begin () [0x0004a] in <e6396995e64e4637a8dd70ee94d7253d>:0
at (wrapper dynamic-method) Monocle.Engine.DMD<Monocle.Engine::Update>(Monocle.Engine,Microsoft.Xna.Framework.GameTime)
at TAS.EverestInterop.CelesteTASModule.Engine_Update (On.Monocle.Engine+orig_Update orig, Monocle.Engine self, Microsoft.Xna.Framework.GameTime gameTime) [0x00064] in <1d07fbc9f1a947228cc8ba943be88cd1>:0
at (wrapper dynamic-method) Monocle.Engine.Hook<Monocle.Engine::Update>?-1737187478(Monocle.Engine,Microsoft.Xna.Framework.GameTime)
at Celeste.Celeste.Update (Microsoft.Xna.Framework.GameTime gameTime) [0x00030] in <e6396995e64e4637a8dd70ee94d7253d>:0
at Microsoft.Xna.Framework.Game.Tick () [0x000ef] in <d8a8e8a23bae436f88420b87ce0d373a>:0
at Microsoft.Xna.Framework.SDL2_FNAPlatform.RunLoop (Microsoft.Xna.Framework.Game game) [0x005ed] in <d8a8e8a23bae436f88420b87ce0d373a>:0
at Microsoft.Xna.Framework.Game.Run () [0x0002c] in <d8a8e8a23bae436f88420b87ce0d373a>:0
at Monocle.Engine.RunWithLogging () [0x00000] in <e6396995e64e4637a8dd70ee94d7253d>:0
This happens when you finish a level, seems to be crashing in the process of adding the version number to the completion screen. I fixed it for myself by copying libMonoPosixHelper.dylib from another Mono installation.
It's been suggested to have the ability to have a brief introduction, like with the B-side opening music credits, for subhapters.
This is currently under investigation. Looks like I won't be sleeping for a while...
One victim is Cavern of the Ancient...
Apparently this is inconsistent?
When in the OuiFileNaming or OuiModOptionString, debug keys such as space still trigger if the user is in debug mode.
I would propose a method to toggle them on/off separate from toggling debug mode.
A well-designed user-friendly website is basically a requirement for a successful 1.0 release.
<head>
Example SEO / embed data:
<meta property="og:title" content="Everest - Celeste Mod Loader" />
<meta name="author" content="Everest Team" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Unofficial mod loader for the retro-style 2D platformer Celeste." />
<meta property="og:description" content="Unofficial mod loader for the retro-style 2D platformer Celeste." />
<link rel="canonical" href="https://everestapi.github.io/" />
<meta property="og:url" content="https://everestapi.github.io/" />
<meta property="og:site_name" content="Everest - Celeste Mod Loader" />
<meta property="og:image" content="https:/everestapi.github.io/thumbnail.png" itemprop="thumbnailUrl" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@everestapi" />
<meta name="twitter:creator" content="@everestapi" />
<meta name="twitter:image" content="https:/everestapi.github.io/preview.png" />
Upon release, if the entity's hitbox is within a solid, it disappears.
It doesn't seem to get removed, its position remains the same, and it doesn't appear in debug render.
So that we don't have to argue with what's in front of or behind something based on ID, we ought to have the ability to decide which layer a decal is on with some level of granularity. Placing a bg decal or fg decal without the depth definition would simply default their position to their current depths.
I'll just leave the install log here.
installer-log.txt
It looks like this should probably be patched, particularly if anyone uses this code.
MMMMAAAAYYBEEEE we should patch it for all Followers? Currently, it won't take keys through when the transition happens.
Gonna need to investigate thoroughly, maybe discuss the implications...
Celeste Error Log
==========================================
Ver 1.3.1.2 [Everest: 1339-azure-0f7ea]
01/12/2020 21:57:44
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at Celeste.LevelSetStats.get_MaxStrawberries() in d:\a\1\s\Celeste.Mod.mm\Patches\SaveData.cs:line 494
at Celeste.OuiFileSelectSlot..ctor(Int32 index, OuiFileSelect fileSelect, SaveData data) in d:\a\1\s\Celeste.Mod.mm\Patches\OuiFileSelectSlot.cs:line 38
at Celeste.OuiFileSelect.LoadThread()
at Celeste.RunThread.RunThreadWithLogging(Action method)
Note to self: map is in Celeste\Mods\Name\Maps\Problem.bin
and is the only map in the levelset
In short, this is the problem you get when you peek at the F6 screen at the start of Farewell, then play through to the moon berry and then press F6 again--oh, hey, it's still showing the first room.
This is fine and all, but having a button to re-center the view is helpful.
Observed in D-Sides, this video demonstrates that Madeline gets shoved into the ceiling during an Oshiro bonk out of a feather... from a surprising distance.
This feels like a vanilla-engine bug, which we might be able to fix on our end, as tricky as it might be.
We'll need to run this frame by frame in the tas tools and watch Madeline's active state and her hitboxes...
This is low priority to work on, but it lets us have a chance to really use those stamps on mod campaigns, which would otherwise be unable to receive the Farewell stamp with the new changes to the ticket sleeves.
Perhaps we can set metadata somewhere to indicate "this map sets Summit stamp" or "this map sets Farewell stamp", particularly if a campaign has an appropriate map but then continues past that point chronologically.
It's really just a beauty support for longer campaigns, if and when we start getting those.
Currently, most of the codebase has XML comments (this is a good thing!). However, most of it is only relevant to people working on Everest, and not people working on mods. Based on past experience, I'd recommend DocFX, but you could go with whatever you want. (BTW, I thought I saw that DocFX requires VS2017, but I can't find that anymore)
mod.sh
/mod.bat
is confusing. Ideas:
Add-Type
.msi
Installer: Write an .msi
script to install Everest
.bat
/.sh
for ease of running. The script would automatically find Celeste, run MonoMod on it, in a nice, user-friendly package. It could even offer to install some "sample" mods.
Right now, the source for mods is to go on the Discord and ask for WIPs. Almost anything would be better than this for users.
Whenever I try playing GhostNet with my friend, the game just crashes. However, on steam, it says that the game is still running. This is the log:
Ver 1.2.5.3 [Everest: 772-azure-0fa40]
01/10/2019 17:45:17
System.InvalidOperationException: A previous Draw call threw an unhandled exception. See InnerException for details. ---> System.OutOfMemoryException: Mem贸ria insuficiente para continuar a execu莽茫o do programa.
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Present(tagRECT* pSource, tagRECT* pDest, HWND__* hOverride)
at Microsoft.Xna.Framework.GraphicsDeviceManager.Microsoft.Xna.Framework.IGraphicsDeviceManager.EndDraw()
at Microsoft.Xna.Framework.Game.EndDraw()
at Microsoft.Xna.Framework.Game.DrawFrame()
at Microsoft.Xna.Framework.Game.Paint(Object sender, EventArgs e)
at Microsoft.Xna.Framework.GameWindow.OnPaint()
at Microsoft.Xna.Framework.WindowsGameWindow.mainForm_Paint(Object sender, PaintEventArgs e)
--- End of inner exception stack trace ---
at Microsoft.Xna.Framework.WindowsGameHost.RunOneFrame()
at Microsoft.Xna.Framework.WindowsGameHost.ApplicationIdle(Object sender, EventArgs e)
at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Microsoft.Xna.Framework.WindowsGameHost.Run()
at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun)
at Monocle.Engine.RunWithLogging() in D:\a\1\s\Celeste.Mod.mm\Patches\Monocle\Engine.cs:line 29
Steps to reproduce: Be on the latest version (and possibly other newish versions but eh).
Download the mario bros 1-1 level map.
Complete it.
The error message is supposed to be this : https://gist.github.com/Hugman76/c03083743268ebaaf4450c9628fd599a
(a null reference error)
but instead it's an out of memory error
this bug report brought to you by "okay, something failed to download properly and is crashing everest on startup, but installer_log.txt isn't helping and the crash text is lies"
as discussed before in the channel...
I discovered it when playtesting my maps which have a special Starting Room setting.
I used the debug map, teleported to a room, and finished the A side from set room...
Entered B/C sides from the beginning, the spawn point was wrong, and was set to the room which was closest to 0,0 and not my Starting Room meta value.
FYI
A declarative, efficient, and flexible JavaScript library for building user interfaces.
馃枛 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 馃搳馃搱馃帀
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google 鉂わ笍 Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.