pyrdacor / ambermoon.net Goto Github PK
View Code? Open in Web Editor NEWAmbermoon rewrite in C#
License: GNU General Public License v3.0
Ambermoon rewrite in C#
License: GNU General Public License v3.0
Originally suggested by @a1exh on Twitter. I add it here to don't forget about it.
A turbo mode option should be added to minimize monster battle sequence duration.
This is the current view I have in the first 3D map:
First I thought it is a data problem, because I used the extracted data files and maybe they are corrupt, but I get the same colors, when I use Ambermoon.net v1.0.6 with the adf files you have under Ambermoon/Disks/German/ambermoon_german_1.01.zip
I am able to correct the problem by changing the PaletteIndex by 1:
Then I get the same colors as you get in your screenshots:
Same goes for the other 3D maps.
Are you able to reproduce it and have an idea, what is causing the problem?
Those writers should allow to save game objects back to files. Useful for savegame writing, game data patching or modding.
Writers needed for:
Maybe also add palettes writer later?
Maybe also allow graphic writing later?
Sometimes the item is dropped somewhere when resetting the drag with right mouse. Also saw duplication of items this way. Needs testing and fixing.
While trying to figure out how to display the map name correctly, I found out, that all text characters and shadows are created and rendered twice, every time Text.set(IText value)
is called.
The call stack for a hovered item:
This is not visible on manually positioned texts, like in chests:
But if I use for example mapName.Place(new Rect(16, 40, 175, 10), TextAlign.Center);
and then change the Text-property to a new name one pair of characters is rendered correctly centered and the other one is rendered left aligned beginning from center of the rectangle.
If I change UpdateTextSprites()
to the following code, the text is only drawn once, but at the wrong position.
void UpdateTextSprites()
{
if (!UpdateCharacterPositions())
return;
characterSprites.ForEach(s => s?.Delete());
characterSprites.Clear();
characterShadowSprites.ForEach(s => s?.Delete());
characterShadowSprites.Clear();
Could you have a look at it?
The goal is to create a stable patched Ambermoon version in german and english. We focus on the english patch for now.
I guess the bugs here are either fixed or not important or even the same in the original. For other bugs I will now use indepedent issues. This will be closed now.
First implementation of battles is out there.
Please start testing battles with v1.1.18. Report bugs here so I won't get drowned in oceans of bugs. :D This is still beta and will have many flaws.
Spells are not implemented yet as well as advancing the group. So don't report issues regarding these features.
The game crashes when i try to open the inventory from a character other than the main character. It just quits without any error message.
The inventory of the main character works.
Apart from the palette problem I described in the other issue, I am having Z-ordering problems in both map types.
Your screenshots suggest, that you don't have the problem, so I will post it as an issue.
This is the room with the well in the first 3D map which is mostly looking okay:
But if I turn around all walls and objects are drawn in the wrong order:
In 2D maps I have the issue, that the main character is drawn behind the decoration tiles
I am using a Radeon HD 5670 on one computer and a HD6850 on my other. Both have the same problem.
Btw, I am closely following the project since day 2 or 3.
I will try to help where I can, but I don't have much experience in reverse engineering!
After pressing the load button in the disk menu i get this error
Unhandled exception. System.IndexOutOfRangeException: Data index out of range.
at Ambermoon.Data.Legacy.DataReader.set_Position(Int32 value)
at Ambermoon.Data.Legacy.SavegameManager.GetSavegameNames(IGameData gameData, Int32& current)
at Ambermoon.UI.Layout.OpenLoadMenu()
at Ambermoon.UI.Button.ExecuteActions(UInt32 currentTicks)
at Ambermoon.UI.Button.LeftMouseUp(Position position, Nullable1& cursorType, UInt32 currentTicks) at Ambermoon.UI.ButtonGrid.MouseUp(Position position, MouseButtons mouseButtons, Nullable
1& newCursorType, UInt32 currentTicks)
at Ambermoon.UI.Layout.LeftMouseUp(Position position, Nullable`1& newCursorType, UInt32 currentTicks)
at Ambermoon.Game.OnMouseUp(Position position, MouseButtons buttons)
at Ambermoon.GameWindow.Mouse_MouseUp(IMouse mouse, MouseButton button)
at Silk.NET.Input.Desktop.GlfwMouse.b__62_2(WindowHandle* _, MouseButton btn, InputAction action, KeyModifiers mods)
at Silk.NET.Input.Desktop.GlfwEvents.<.ctor>b__0_2(WindowHandle* a, MouseButton b, InputAction c, KeyModifiers d)
at Silk.NET.GLFW.X84D602C1.Glfw.PollEvents()
at Silk.NET.Windowing.Desktop.GlfwWindow.DoEvents()
at Silk.NET.Windowing.Common.WindowExtensions.<>c__DisplayClass2_0.b__0()
at Silk.NET.Windowing.Desktop.GlfwWindow.Run(Action onFrame)
at Silk.NET.Windowing.Common.WindowExtensions.Run(IView view)
at Ambermoon.GameWindow.Run(Configuration configuration)
at Ambermoon.Program.Main()
I could need some help with decoding savegame data. Basically it is easy:
You need WinUAE and a hex editor (e.g. HxD) or even better a hex data comparer (e.g. winmerge).
There may be other stuff that is stored there. Use your imagination what must be stored so a loaded game knows about it. Note that all chest, merchant and party member data is stored in other files. The same is true for exploration of 3D maps. Those data is mostly decoded except for some character values.
You can just drag&drop both files into the program. Most of the times it does not compare the files in binary format. To do so you can go to "File > Recompare as > Binary".
You will see differences highlighted in yellow. Note that some bytes will always changed (like map position or current time). Those values are located at the beginning. So don't bother with bytes prior to offset 58 (hex 3A) as those bytes are already decoded. The only exception is byte 0-5 which are also unknown yet.
If you mark/select data in winmerge you will see the offset and selection length at the bottom of the window for the file.
@Metibor @Thallyrion Maybe you guys want to help.
If you have some results, please let me know here. Thanks in advance.
When i just started a new game, i cant add any item into my wallet.
Ill remember that i can scroll the actions with the middle mousebutton and do a left click on a chest or a bookshelf.
Thas not possible right now.
In some places tiles will not block movement. This needs a fix.
I was walking around the worldmap near Spannenberg when a crash occured:
Unhandled exception. Ambermoon.AmbermoonException: [Render] Invalid index
at Ambermoon.Renderer.RenderBuffer.GetDrawIndex(ISurface3D surface)
at Ambermoon.Renderer.RenderLayer.GetDrawIndex(ISurface3D surface)
at Ambermoon.Renderer.OpenGL.Surface3D.AddToLayer()
at Ambermoon.Renderer.OpenGL.Surface3D.set_Visible(Boolean value)
at Ambermoon.Render.RenderMap3D.AddObject(ISurface3DFactory surfaceFactory, IRenderLayer layer, UInt32 mapX, UInt32 mapY, Object obj)
at Ambermoon.Render.RenderMap3D.UpdateSurfaces()
at Ambermoon.Render.RenderMap3D.SetMap(Map map, UInt32 playerX, UInt32 playerY, CharacterDirection playerDirection)
at Ambermoon.Game.Start3D(Map map, UInt32 playerX, UInt32 playerY, CharacterDirection direction)
at Ambermoon.Render.Character2D.MoveTo(Map map, UInt32 x, UInt32 y, UInt32 ticks, Boolean frameReset, Nullable1 newDirection) at Ambermoon.Render.Player2D.Move(Int32 x, Int32 y, UInt32 ticks, Nullable
1 prevDirection, Boolean updateDirectionIfNotMoving)
at Ambermoon.Game.Move()
at Ambermoon.GameWindow.Keyboard_KeyDown(IKeyboard keyboard, Key key, Int32 value)
at Silk.NET.GLFW.XC6DECC54.Glfw.PollEvents()
at Silk.NET.Windowing.Desktop.GlfwWindow.DoEvents()
at Silk.NET.Windowing.Common.WindowExtensions.<>c__DisplayClass2_0.b__0()
at Silk.NET.Windowing.Desktop.GlfwWindow.Run(Action onFrame)
at Silk.NET.Windowing.Common.WindowExtensions.Run(IView view)
at Ambermoon.GameWindow.Run(Configuration configuration)
at Ambermoon.Program.Main()
Version 1.09
I could not reproduce it. Occured only once.
Edit: Could reproduce the crash. It randomly occurs on entering another 3D locations. In this case the Orc Caves/Burnville Tunnel
Edit2: I don't know if this actually is an issue (could not be implemented yet) not all 3D location are visitable. E.g. entering Sylph/Gala Temple does not work. And in Spannenberg you have no Sky textures, background is just Black.
I get this crash alway at a very specific place.
See Screenshot - It crashes if i move to the yellow circle.
Unhandled exception. System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at System.Collections.Generic.List1.get_Item(Int32 index) at Ambermoon.Game.ShowTextPopup(PopupTextEvent popupTextEvent, Action
1 responseHandler)
at Ambermoon.MapExtensions.ExecuteEvent(Map map, Game game, IRenderPlayer player, MapEventTrigger trigger, UInt32 x, UInt32 y, IMapManager mapManager, UInt32 ticks, MapEvent mapEvent, Boolean& lastEventStatus)
at Ambermoon.MapExtensions.TriggerEventChain(Map map, Game game, IRenderPlayer player, MapEventTrigger trigger, UInt32 x, UInt32 y, IMapManager mapManager, UInt32 ticks, MapEvent firstMapEvent)
at Ambermoon.MapExtensions.TriggerEvents(Map map, Game game, IRenderPlayer player, MapEventTrigger trigger, UInt32 x, UInt32 y, IMapManager mapManager, UInt32 ticks)
at Ambermoon.Render.RenderMap2D.TriggerEvents(IRenderPlayer player, MapEventTrigger trigger, UInt32 x, UInt32 y, IMapManager mapManager, UInt32 ticks)
at Ambermoon.Render.Player2D.Move(Int32 x, Int32 y, UInt32 ticks, Nullable`1 prevDirection, Boolean updateDirectionIfNotMoving)
at Ambermoon.Game.Move2D(Int32 x, Int32 y)
at Ambermoon.Game.Move(CursorType cursorType)
at Ambermoon.Game.HandleClickMovement()
at Ambermoon.Game.OnMouseDown(Position position, MouseButtons buttons)
at Ambermoon.GameWindow.Mouse_MouseDown(IMouse mouse, MouseButton button)
at Silk.NET.Input.Desktop.GlfwMouse.HandleMouseDown(IMouse mouse, MouseButton button)
at Silk.NET.Input.Desktop.GlfwMouse.b__62_2(WindowHandle* _, MouseButton btn, InputAction action, KeyModifiers mods)
at Silk.NET.Input.Desktop.GlfwEvents.<.ctor>b__0_2(WindowHandle* a, MouseButton b, InputAction c, KeyModifiers d)
at Silk.NET.GLFW.XEEB4BF50.Glfw.PollEvents()
at Silk.NET.Windowing.Desktop.GlfwWindow.DoEvents()
at Silk.NET.Windowing.Common.WindowExtensions.<>c__DisplayClass2_0.b__0()
at Silk.NET.Windowing.Desktop.GlfwWindow.Run(Action onFrame)
at Silk.NET.Windowing.Common.WindowExtensions.Run(IView view)
at Ambermoon.GameWindow.Run(Configuration configuration)
at Ambermoon.Program.Main()
Okay, I will start to implement it.
My thoughts so far:
IAudioPlayer
For playing the audio tracks
Methods like SetTrack, SetVolume, Play, Stop.
Maybe Pause/Continue for the default track, because one thing that bothered me is, that the tracks alway start at the beginning.
Implementations will be:
Can be switched via ambermoon.cfg (and later in game)
IAudioProvider
For loading/extracting and caching the audio data and providing it to the AudioPlayer
Implementations will be:
AudioTrack
Enumeration for Map.MusicIndex with all audio tracks 32 in game files + 3 for intro, menu and extro + Index 0 for Default Track
DataNameProvider
Could provide the song names, but I don't think that they are really needed.
In the 3D maps the floor and ceiling textures are missing a pixel or have garbage pixels on two of the borders.
I am pretty sure that this is another 0.5f problem (the color index is 0 or something else instead of the correct value because the index is read on the border of the pixel instead of the middle), but I was not able to tweak the shaders to get it working.
Ceiling
Missing pixels on the border with tilted camera
Extracted graphic with the missing pixels of one square marked in red
Floor
Missing pixels and garbage pixels on the border with tilted camera
Extracted graphic with the missing pixels of one square marked in red and the garbage pixels marked in yellow (I flipped the image to have the same orientation)
Ignore the palettes, it seems to be off in the extracted images the 3d palette is fine.
According to your screenshots I don't think it is just me again with my AMD gpu. ;-)
When opening the inventory screen in the German version, we get an exception because of an encoding problem.
The UIText "MÄNNLICH" is read as "M─NNLICH" from the Executable.
Just changing Encoding = Encoding.GetEncoding(437);
to another value in Ambermoon.Data.Legacy.DataReader
does not work, because then the other data files won't load.
We could extend CharToGlyph
with the additional characters though.
Unhandled exception. Ambermoon.AmbermoonException: [Data] Unsupported text character '─'.
at Ambermoon.Data.Legacy.TextProcessor.CharToGlyph(Char ch, Boolean rune) in K:\GIT\Ambermoon.net\Ambermoon.Data.Legacy\Text.cs:line 117
at Ambermoon.Data.Legacy.TextProcessor.<>c.<CreateText>b__1_0(Char ch) in K:\GIT\Ambermoon.net\Ambermoon.Data.Legacy\Text.cs:line 121
at System.Linq.Enumerable.SelectEnumerableIterator`2.ToArray()
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Ambermoon.Data.Legacy.TextProcessor.CreateText(String text) in K:\GIT\Ambermoon.net\Ambermoon.Data.Legacy\Text.cs:line 121
at Ambermoon.UI.Layout.AddText(Rect rect, String text, TextColor color, TextAlign textAlign, Byte displayLayer) in K:\GIT\Ambermoon.net\Ambermoon.Core\UI\Layout.cs:line 393
at Ambermoon.Game.<>c__DisplayClass92_0.<OpenPartyMember>b__0() in K:\GIT\Ambermoon.net\Ambermoon.Core\Game.cs:line 849
at Ambermoon.Game.OpenPartyMember(Int32 slot) in K:\GIT\Ambermoon.net\Ambermoon.Core\Game.cs:line 870
at Ambermoon.UI.Layout.Click(Position position, MouseButtons buttons, CursorType& cursorType) in K:\GIT\Ambermoon.net\Ambermoon.Core\UI\Layout.cs:line 614
at Ambermoon.Game.OnMouseDown(Position position, MouseButtons buttons) in K:\GIT\Ambermoon.net\Ambermoon.Core\Game.cs:line 618
at Ambermoon.GameWindow.Mouse_MouseDown(IMouse mouse, MouseButton button) in K:\GIT\Ambermoon.net\Ambermoon.net\GameWindow.cs:line 174
at Silk.NET.Input.Desktop.GlfwMouse.HandleMouseDown(IMouse mouse, MouseButton button)
at Silk.NET.Input.Desktop.GlfwMouse.<Subscribe>b__62_2(WindowHandle* _, MouseButton btn, InputAction action, KeyModifiers mods)
at Silk.NET.Input.Desktop.GlfwEvents.<.ctor>b__0_2(WindowHandle* a, MouseButton b, InputAction c, KeyModifiers d)
at Silk.NET.GLFW.XBD8D053E.Glfw.PollEvents()
at Silk.NET.Windowing.Desktop.GlfwWindow.DoEvents()
at Silk.NET.Windowing.Common.WindowExtensions.<>c__DisplayClass2_0.<Run>b__0()
at Silk.NET.Windowing.Desktop.GlfwWindow.Run(Action onFrame)
at Silk.NET.Windowing.Common.WindowExtensions.Run(IView view)
at Ambermoon.GameWindow.Run(Configuration configuration) in K:\GIT\Ambermoon.net\Ambermoon.net\GameWindow.cs:line 250
at Ambermoon.Program.Main() in K:\GIT\Ambermoon.net\Ambermoon.net\Program.cs:line 16
When saving while standing next to a chest etc and then loading the game, the map events is immediately triggered (e.g. opening the chest window). This should be avoided.
Until now it is possible to enter Buildings/Towns/Water while riding a horse. This should be impossible,
Sorry for the title, didn't know how to exactly name it.
There is a problem with a Map Event in the thieves Guild. After pressing the hidden lever in the fireplace, the Wall should disappear so you can get into the cellar.
There are issues with this:
In the original Amiga game there is a rune sheet included in the game box and some of the fun is decoding the writing you find around Ambermoon. But it soon becomes a chore. How about an enhancement that once you've found the rune sheet in the game (I think there is a rune sheet item in the game) all the runes are displayed as plain text? OR perhaps if you hold down a key, like TAB or something?
This idea was suggested/implemented by Ambermoon fan st-th in 2009 when he was making his own Amiga patch. However he disappeared without releasing anything. I still think it is a good enhancement.
I saw in v1.1.16 you implemented "active special items" the compass, clock.
Can I please request the X/Y co-ordinates next?
This is a very useful feature when play testing.
I made a commit in my repository that adds the original map names to the main window:
Metibor@f51b328
I think it is not ready for a PR, yet, but if its okay, I will create one
Positive:
Negative:
I am open for criticism. 😃
I will prioritize the next steps here so you can see what's coming next and what I am working on. This should also allow others to pick stuff for contribution.
Next steps
Ideas for contribution
More to come. I am open for suggestions. I will update this list from time to time. Stay tuned. :)
I get the following crash when i click on the load savegame symbol
Unhandled exception. Ambermoon.AmbermoonException: [Data] Unsupported text character '▄'.
at Ambermoon.Data.Legacy.TextProcessor.CharToGlyph(Char ch, Boolean rune)
at Ambermoon.Data.Legacy.TextProcessor.<>c.b__2_0(Char ch)
at System.Linq.Enumerable.SelectEnumerableIterator2.MoveNext() at Ambermoon.Data.Legacy.TextProcessor.FinalizeText(IEnumerable
1 glyphs)
at Ambermoon.Data.Legacy.TextProcessor.CreateText(String text)
at Ambermoon.UI.Popup.AddText(Position position, String text, TextColor textColor, Boolean shadow, Byte displayLayer)
at Ambermoon.UI.ListBox..ctor(IRenderView renderView, Game game, Popup popup, List1 items, Rect area, Position itemBasePosition, Int32 itemHeight, Int32 hoverBoxWidth, Position relativeHoverBoxOffset, Boolean withIndex, Int32 maxItems) at Ambermoon.UI.ListBox.CreateSavegameListbox(IRenderView renderView, Game game, Popup popup, List
1 items)
at Ambermoon.UI.Popup.AddSavegameListBox(List1 items) at Ambermoon.UI.Layout.OpenLoadMenu() at Ambermoon.UI.Button.ExecuteActions(UInt32 currentTicks) at Ambermoon.UI.Button.LeftMouseUp(Position position, Nullable
1& cursorType, UInt32 currentTicks)
at Ambermoon.UI.ButtonGrid.MouseUp(Position position, MouseButtons mouseButtons, Nullable1& newCursorType, UInt32 currentTicks) at Ambermoon.UI.Layout.LeftMouseUp(Position position, Nullable
1& newCursorType, UInt32 currentTicks)
at Ambermoon.Game.OnMouseUp(Position cursorPosition, MouseButtons buttons)
at Ambermoon.GameWindow.Mouse_MouseUp(IMouse mouse, MouseButton button)
at Silk.NET.Input.Desktop.GlfwMouse.b__62_2(WindowHandle* _, MouseButton btn, InputAction action, KeyModifiers mods)
at Silk.NET.Input.Desktop.GlfwEvents.<.ctor>b__0_2(WindowHandle* a, MouseButton b, InputAction c, KeyModifiers d)
at Silk.NET.GLFW.X8A925E35.Glfw.PollEvents()
at Silk.NET.Windowing.Desktop.GlfwWindow.DoEvents()
at Silk.NET.Windowing.Common.WindowExtensions.<>c__DisplayClass2_0.b__0()
at Silk.NET.Windowing.Desktop.GlfwWindow.Run(Action onFrame)
at Silk.NET.Windowing.Common.WindowExtensions.Run(IView view)
at Ambermoon.GameWindow.Run(Configuration configuration)
at Ambermoon.Program.Main()
My guess is this happens because of unsupported "space character" in savegame name
I added a contribution section in the readme. I will add all contributors there. I hope this is ok.
Thanks for helping to bring this project to life.
I released v1.1.14 just now. It contains 2D NPCs (with moving and all) and a rudimentary conversation window.
From now on I will also announce new releases on twitter (https://twitter.com/Pyrdacor2 with hashtag #Ambermoon) cause github isn't the best platform to do so.
I changed a lot of code so maybe there will be bugs. Not everything is working yet but feel free to report any issues. :)
Surprisingly i had this crash. Cannot exactly pinpoint it but it happend after entering Spannenberg and right clicking on the movement menu.
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Ambermoon.MapExtensions.TriggerEvents(Map map, Game game, IRenderPlayer player, MapEventTrigger trigger, UInt32 x, UInt32 y, IMapManager mapManager, UInt32 ticks)
at Ambermoon.Game.TriggerMapEvents(MapEventTrigger trigger, UInt32 x, UInt32 y)
at Ambermoon.Game.TriggerMapEvents(MapEventTrigger trigger)
at Ambermoon.UI.Layout.b__62_3()
at Ambermoon.UI.Button.ExecuteActions(UInt32 currentTicks)
at Ambermoon.UI.Button.LeftMouseDown(Position position, Nullable1& cursorType, UInt32 currentTicks) at Ambermoon.UI.ButtonGrid.MouseDown(Position position, MouseButtons mouseButtons, Nullable
1& newCursorType, UInt32 currentTicks)
at Ambermoon.UI.Layout.Click(Position position, MouseButtons buttons, CursorType& cursorType, UInt32 currentTicks)
at Ambermoon.Game.OnMouseDown(Position position, MouseButtons buttons)
at Ambermoon.GameWindow.Mouse_MouseDown(IMouse mouse, MouseButton button)
at Silk.NET.Input.Desktop.GlfwMouse.HandleMouseDown(IMouse mouse, MouseButton button)
at Silk.NET.GLFW.XC9BB5C31.Glfw.PollEvents()
at Silk.NET.Windowing.Desktop.GlfwWindow.DoEvents()
at Silk.NET.Windowing.Common.WindowExtensions.<>c__DisplayClass2_0.b__0()
at Silk.NET.Windowing.Desktop.GlfwWindow.Run(Action onFrame)
at Silk.NET.Windowing.Common.WindowExtensions.Run(IView view)
at Ambermoon.GameWindow.Run(Configuration configuration)
at Ambermoon.Program.Main()
v1.1.8. introduced some blocking issues in 2D Movement.
See Video
https://drive.google.com/file/d/1E9CM3XWtyu2yl2AgnM4htfl9snw9o5eV/view?usp=sharing
Right now the high resolution rendering of the 3D-world clashes with the low resolution of the game interface and 2D-world.
My suggestion would be twofold:
Add a fullscreen filters like 2xSAI and HQ2x and combine this with a bilinear filter
and/or
add the option of using a full screen shader (for example crt-caligari) or even the option the add your own shaders
Allow a filter (again for example 2xSAI or HQ2x) to be added to all 2D elements like the interface, 2D sprites and 3D textures.
The 3D movement via the movement arrows (num key movement) does not resemble the original behaviour yet.
The Num 7+9+1+3 should only rotate the perspective and not move + rotate
The arrow keys left + right do it correctly
Note: This will be a big one. But battles are too important to leave them out for too long. 🗡️
Some billboards are animated in original game (like the pendulums in luminor's tower). They are not animated yet in Ambermoon.net though. Moreover floor billboards (like lava) seems to stuck partly inside the ground in luminor's tower. A little offset is needed there I guess. Also in luminor's tower the torches consist of two billboards (wood and flame). The flame should be displayed above the wood but it is not at the moment.
Implement eye, hand and mouth cursor interaction in 3D.
I need a bunch of information from the original game and I don't have the time for it. So maybe you guys could help me with some things:
I will add some points here from time to time. Thanks for your support.
I get this crash when i try to open the inventory of the 2nd member (in my case Egil):
Unhandled exception. System.Collections.Generic.KeyNotFoundException: The given key '0' was not present in the dictionary.
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Ambermoon.Data.Legacy.ItemManager.GetItem(UInt32 index)
at Ambermoon.UI.UIItem.Update(Boolean itemTypeChanged)
at Ambermoon.UI.UIItem..ctor(IRenderView renderView, IItemManager itemManager, ItemSlot item)
at Ambermoon.UI.ItemGrid.SetItem(Int32 slot, ItemSlot item)
at Ambermoon.Game.<>c__DisplayClass92_0.b__0()
at Ambermoon.Game.OpenPartyMember(Int32 slot)
at Ambermoon.Game.OnKeyDown(Key key, KeyModifiers modifiers)
at Ambermoon.GameWindow.Keyboard_KeyDown(IKeyboard keyboard, Key key, Int32 value)
at Silk.NET.Input.Desktop.GlfwKeyboard.b__26_1(WindowHandle* _, Keys key, Int32 code, InputAction action, KeyModifiers mods)
at Silk.NET.Input.Desktop.GlfwEvents.<.ctor>b__0_1(WindowHandle* a, Keys b, Int32 c, InputAction d, KeyModifiers e)
at Silk.NET.GLFW.XDFEF5638.Glfw.PollEvents()
at Silk.NET.Windowing.Desktop.GlfwWindow.DoEvents()
at Silk.NET.Windowing.Common.WindowExtensions.<>c__DisplayClass2_0.b__0()
at Silk.NET.Windowing.Desktop.GlfwWindow.Run(Action onFrame)
at Silk.NET.Windowing.Common.WindowExtensions.Run(IView view)
at Ambermoon.GameWindow.Run(Configuration configuration)
at Ambermoon.Program.Main()
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.