Current Release: 1.0.2 (19th of August, 2023)
Grog is a roguelike game directly inspired by having played the original Rogue on a real PDP-11 during Roguelike Celebration 2018. On one hand I was completely overwhelmed and very surprised about how much joy this rather simple and extremely boiled down game brought to me. On the other hand I started wondering why the original game was called ‘Rogue’ because thieves/rogues rarely seem to play an important role in classical fantasy fiction compared to the archetypical fighter or barbarian. With these thoughts in mind I started working on Grog even while Roguelike Celebration 2018 still was running and I was sitting among the spectators.
Game Design
The core design tenets of Grog are:
- Copy the raw and pure flavor of PDP-11 Rogue. Technically this implies running in a console in monochrome mode.
- Imitate the original UI but modernize it for a much smarter and more elegant user experience.
- Implement a tightly focussed roguelike with the following features:
- Play hard and fast.
- A dungeon consisting of 25 screen-sized levels.
- Four monster types on level 1, with plus two new monster types per level. One of the new monster types always will be more powerful as far as combat goes, the other type will sport some challenging or exotic special power.
- Special room types start appearing with dungeon level 3.
- Ghosts (former player characters showing up as monsters) are part of the game.
- Revenge monsters exist (meaning: monsters that manage to kill a player are baptized, receive special powers or power boosts for consecutive kills and then return in later games to slaughter even more player characters).
- Inventory size is strongly limited.
- And item identification game is included but Grog allows for auto-identifying items after some time has passed.
- Hunger, prayers and tons of highly variable items all are a core part of the game.
- Grog has an ultra-flexible character generation (e.g. you enter a textual name, gender and type and your attributes will be fixed and predetermined based on your input).
- Grog allows you to add a personal note about the fate of your character in your highscore entries.
- Grog has a straight-forward goal: Reach level 25, find the Throne of Immortality and then escape the dungeon.
- Fun fact: In a certain way Grog is ultra-old-school. Why? Because it becomes harder and harder to win the game the longer it is played because more and more ghosts and revenge monsters will wait for the player, making life more and more miserable. Which is quite a difference to these comfy modern games and meta designs that push the player ever nearer to winning given just enough time. In Grog you really have to earn winning.
Technical Information
- Grog is available for Windows, Linux and MacOS.
- Windows: Grog requires .NET Framework 4.8 or later to run. Double-click grog.exe and have fun playing.
- MacOS/Linux: Grog requires Mono 6.12 or later to run. Open a terminal and type ‘mono grog.exe’ to start the game (requires the terminal to be set to the directory to which you downloaded/copied grog.exe).
Media Samples
- RogueTemple, 25th of May 2022, Grog – a new small roguelike by Thomas Biskup by Slashie https://blog.roguetemple.com/2022/05/25/grog-a-new-small-roguelike-by-thomas-biskup/
- Youtube – Let’s Play Grog 1.0.1 by Slashie
- Youtube: Grog, a tiny weird new roguelike from ADOM’s creator – First gameplay ever! by Slashie
Releases
- Grog 1.0.2 (19th of August, 2023, source code: 199 files of C# code with 18,564 LOC)
- Grog 1.0.1 (8th of July, 2023, source code: 199 files of C# code with 18,464 LOC)
- Grog 1.0.0 (24th of May, 2022; source code: 198 files of C# code with 18,509 LOC)
Version History
Grog 1.0.2:
- ENHANCEMENT: All usable items can now be activated directly from the inventory by pressing <Ctrl> plus the character associated with the item.
- ENHANCEMENT: Ctrl-r now redraws the screen.
- ENHANCEMENT: Enlarging the terminal correctly redraws the terminal.
- ENHANCEMENT: Shrinking the terminal is less crash-prone (but still can crash – just don’t fiddle with terminal sizes after starting the game).
- ENHANCEMENT: Added some whitespacing to the keybinding section in the help text in order to reduce the chance of missing important commands.
- ENHANCEMENT: The . command (wait until healed) now falls back to the standard “wait one turn” if the PC is unwounded (instead of printing just a message).
- ENHANCEMENT: Added a help section explaining the data shown when you call upon the enemy list (with ‘m’).
- ENHANCEMENT: Show diagnostic information in the console title.
- ENHANCEMENT: Show more diagnostic information in error messages.
- ENHANCEMENT: Exchanged ‘=’ water symbol with ‘0’ in order to prevent confusion with rings.
- ENHANCEMENT: Improved the wording of the introductory page.
- BUGFIX: Fixed a crash when using scrolls of greater identify.
- BUGFIX: Pit rooms now are filled to the brink.
- BUGFIX: Throwing items didn’t use up time.
- BUGFIX: The ‘item use keys’ usually were not shown in the inventory footer.
- BUGFIX: Unified meta key text display in the help text.
- BUGFIX: Removed an excess space in identified weapon descriptions.
- BUGFIX: Exchanged ‘<Ctrl> + Q’ for ‘<Ctrl> + q’ in the online help (because keys are case sensitive).
- BUGFIX: Fixed various typos.
Grog 1.0.1:
- BUGFIX: In rare cases excessively long item names could crash both the inventory display and the game.
- BUGFIX: Prevent dropping items on positions that already contain the maximum number of items.
- BUGFIX: In rare cases items were used instead of dropped even if they were not usable.
- BUGFIX: Fixed typos in the credits.
- BUGFIX: Multi-page inventories no longer cause an infinite loop on the death inventory screen.
- BUGFIX: Removed an excessive space character in the name of some identified weapons.
- BUGFIX: Removed an empty highscore line that was provoked by some highscore entries.
- BUGFIX: Removed an unnecessary whitespace in the credits.
- ENHANCEMENT: Show the both release and build number on the title screen in addition to the version.
- ENHANCEMENT: Removed ugly brackets in the highscore header.
27 replies on “”
Hello, there is a bug that breaks the inventory display when item names are too long.
When trying to open the inventory, I get the error:
The game crashed with an exception. Error message:
Invalid cursor position requested: -2, 18 (permissible: 0, 0 – 80, 26).
Stack trace:
at Grog.Kernel.GCurses.Curses.SetCursorPosition(Int32 x, Int32 y)
at Grog.Dungeons.DungeonLevel.ProcessItemSelectionList(Func`1 getInfos, ItemSelectionList list, Func`3 processKey, Boolean printChoice, Func`1 headline, Boolean highlightEquippedItems)
at Grog.Dungeons.DungeonLevel.ManageInventory()
at Grog.Program.Play()
After decompiling the exe and doing a very dirty fix, I can see that the line it’s trying to display is:
q – adamantium broadsword of fortification +4, +4 [2d4+10 damage] (wielded)
Fixed in 1.0.1.
BTW if you’d like to be credited with your real name please reply in a comment (and I will not make it publicly visible).
I got this stack trace while playing GOG, trying to read a scroll
The game crashed with an exception. Error message:
An item with the same key has already been added.
Stack trace:
t System.ThrowHelper.ThrowArgumentException(ExceptionResource resource).)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boo
System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
at Grog.Dungeons.DungeonLevel.InitiateComplexInteraction(String text, List`1
at Grog.Dungeons.DungeonLevel.InitiateComplexInteraction(String text, Interac
at Grog.Dressings.Items.Implementations.ScrollImplementations.UseScrollOfGrea
erIdentify(DungeonLevel dungeonLevel, Being applier, Being user, Item scroll)
at Grog.Dungeons.DungeonLevel.ProcessUseKey(ItemSelectionList list, Char c)
at Grog.Dungeons.DungeonLevel.ProcessItemSelectionList(Func`1 getInfos, ItemS
electionList list, Func`3 processKey, Boolean printChoice, Func`1 headline, Bool
Fixed in 1.0.1.
All bugs mentioned in the comments have been fixed in Grog 1.0.1, released on the 8th of July, 2023. It is linked above.
Happy grogging!
Hi, I am writing an article about differences in roguelike UI choices. Would you give me a short rundown on what you did to modernize the UX in Grog? Thx
Actually with regard to Grog I’m only talking about a “modernized UI compared to the original Rogue”. Quite a few things have happened:
I might be forgetting something but this probably summarizes some of the more important optimizations.
Bug when reading great identify i suppose. https://ibb.co/t40XxzC
Dang. Thanks for finding this. It will be fixed in the upcoming Grog 1.0.2 release. If you’d like to be credited with your real name please reply in a comment (and I will not make it publicly visible).
Fixed in Grog 1.0.2 (just released).
Saved the game to the same slot that was loaded. Can’t load now:
*** Internal Error (7/22/2023 9:35:58 AM)! ***
Duplicate being while trying to make copies unique again:
Old: 0 -> Brak (grog)
New: 0 -> Brak (grog)
[Press ‘!’ to continue]
Where is save files located and can i fix this error?
What operating system are you using?
And what happens when you press ‘!’ after the error? Basically the game should be able to continue.
Final question: Did anything happen to your game (e.. a crash) prior to this message? It’s kind of weird.
In grog-101.zip there are grog.exe with version 1.0.0.
Are you sure you downloaded the right file? I just tried and mine contained the correct version :-/ When starting the grog.exe from the 101 download I see a 1.0.1 version on the screen.
Any possibility of vi keys coming to the game? My muscle memory keeps messing me up playing this game xD
Good suggestion. I’ll put it on my list. Would you feel like suggesting a complete keybinding map (not just for movement)?
Hi! The game looks really exciting, but I’m not getting very far before it freezes. It seems to freeze most times it tries to display the ‘more’ option (but not every time, for example, the help menu works). The easiest example is opening the monster list with ‘m’. It makes the terminal completely unresponsive for me. I’m on Linux (Debian) with mono version 6.12.0.200.
I’m also getting repeated freezes on windows when going down stairs. If I quit and reload, Grog will recover an autosave, and going down stairs might work, but I’ve reached a point level 9 or so where it freezes each time and I can’t get past it.
In the version 1.0.2 there is a bug with new dungeon levels. Game hangs sometimes when player goes to a new level. I think because of generating cycle.
You need to check for any empty positions in room before going to random room position cycle in GenerateMonsters.
Also i think that you need to set dungeonLevel.Grog.LastPrayerTurn only after player selected pray reason. Not when player accidentaly push ‘p’ button .
In GetSplitIndex there is the bug. After sorting list2.Sort(); there must be list2[list2.Count – 1] but not list2[list2.Count – 2]. Because of that “k – warhammer of animal slaying +2, +0 [2d3+4 damage]” brokes inventory menu.
Sorry previous message is wrong. The error in GetSplitLines on line info.LastIndexOf(‘ ‘, splitPoint); There must be info.LastIndexOf(‘ ‘, splitPoint – 1);
Maybe that mithril, adamantium and eternium stuff must have ItemAbility.ResistRust ablility?
There is a bug in TurnMonsterIntoRevengeMonster in ShowSceneText.
Invalid cursor position requested: -7, 20 (permissible: 0, 0 – 90, 24). I was killed by my previous ghost so i suppose that attacker.Name was greater than Curses.Instance.WindowWidth.
Thank you for the great game!
I’ve found a minor issue running 1.0.2 on Debian 12 with Mono: ctrl-H and ctrl-L don’t work from the inventory screen. It just exits the screen.
“f” key to use item still works.