Coder Social home page Coder Social logo

pmdodump's Introduction

PMD: Origins

Open source Pokémon roguelike with modding tools.

Thread on Pokécommunity

https://www.pokecommunity.com/showthread.php?p=10325347

Wiki

https://wiki.pmdo.pmdcollab.org/Main_Page

Download

https://github.com/audinowho/PMDODump/releases

How to Run

Follow the instructions inside the README.txt file in the game folder.

Repository

This repository contains only code that builds the data used in PMDO, its updater, and scripts that are run to deploy it. It does not contain the base engine of the game! The submodules supply those things:

Submodules

  • PMDC: Contains battle system code roguelike engine that PMDO runs on.
  • DumpAsset: Contains the full asset data for PMDO.
  • RawAsset: Contains unconverted graphics.

Pull all submodules recursively.

  • Run git submodule update --init --recursive to get all the submodules.
  • You may need to regenerate NuGet packages for the RogueEssence solution first, before building.

Building Game

  • Run dotnet publish -c Release -r win-x86 PMDC/PMDC/PMDC.csproj to publish to Windows x86.
  • Run dotnet publish -c Release -r win-x64 PMDC/PMDC/PMDC.csproj to publish to Windows.
  • Run dotnet publish -c Release -r linux-x64 PMDC/PMDC/PMDC.csproj to publish to Linux.
  • Run dotnet publish -c Release -r osx-x64 PMDC/PMDC/PMDC.csproj to publish to Mac.
  • Files will appear in the publish folder.

Building Server

  • Run dotnet publish -c Release -r win-x64 PMDC/RogueEssence/WaypointServer/WaypointServer.csproj to publish to Windows.
  • Run dotnet publish -c Release -r linux-x64 PMDC/RogueEssence/WaypointServer/WaypointServer.csproj to publish to Linux.

Building Installer/Updater

  • Run dotnet publish -c Release -r win-x64 PMDOSetup/PMDOSetup.csproj to publish to Windows.
  • Run dotnet publish -c Release -r linux-x64 PMDOSetup/PMDOSetup.csproj to publish to Linux.
  • Run dotnet publish -c Release -r osx-x64 PMDOSetup/PMDOSetup.csproj to publish to Mac.
  • Files will appear in the publish folder.

Projects

DataGenerator and MapGenTest are two projects not meant to be deployed.

  • DataGenerator is used to construct data files of all dungeons, Pokémon, etc.
  • MapGenTest is used to bulk test and debug dungeon maps.

DataGenerator Deployment Order

  • One-time: Run -itemprep to generate monster/status/element tables needed for items.

  • Run Scripts/item_sync.py to update exclusive item spreadsheet with data generated above. It will generate a csv of exclusive items to be used in the -dump step.

  • Reserialize Skills and Monster (Or regenerate Monster) using -reserialize Skill or -reserialize Monster

  • Dump all data using -dump. It depends on the csv of exclusive items to generate that exclusive items (item creation). It also generates an XML to map species to family items (spawning lookup), and a common_gen.lua containing tables of generic trades and specific trades.

  • Generate tables for string merge with -strings out.

  • Sync the translation table using Scripts/strings_sync.py

  • Uptake tables for string merge with -strings in.

pmdodump's People

Contributors

audinowho avatar doubletrio avatar leo-in-the-house avatar purpasmart96 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pmdodump's Issues

Negative bonus health instant death

Discord: Palika#2589 <@118458522685014017>

If you give a level 1 pokemon too much negative bonus health, they will instantly die when the map begins

Ask player for confirmation when loading with missing mods

Steps to set up scenario:
A player plays the game with mods A, B, and C.
Player saves the game.
Player turns off Mods A and C.
Player loads the game.

Expected behavior:
Game asks for confirmation: "Are you sure you want to load this save without these mods?"
Make sure it shows a list of missing mods when it does this.

CSV output for Guides

Discord: Shitpost Sunkern#8311 <@292039958829727744>

Feature request: ability to output the guide in CSV so I can import into a spreadsheet more easily

Type change when copy+pasting in Data editor

Discord: Palika#2589 <@118458522685014017>

Very minor editor bug: I've been using eyedrop to copy and paste signs more or less, and i just edit the key string for the text to display. anyway, the first time i edit the key and then click OK, it changes the type from LocalFormSimple to one of the LocalFormatEnum options. This doesn't really matter but I figured i'd mention it. bug not pictured here, but it is in this menu
image

50% transparent map option

Discord: thelmexx#0745 <@245872572808298496>

feature req: option for 50% transparent maps on screen like in main games

Feature Request: Option to restart a roguelocke

Sometimes it's annoying to have to manually select the same character in the rogue over and over and over again.
A option to restore the last roguelocke would be appreciated in the menu, where it's list located the new, load and info:
.-------------------------,
|New Game
|Load Game
|Restart Last Game
|Info
'-------------------------'

Selecting Restart should give the following options:
Seed: Allow use of 2 options Random / Repeat. (random should be displayed by default if player haven't selected one before, repeat should be used if player repeated a seed before, or used a pre-determined seed in a previous game
Team name: If not set before uses random
Pokemon: Appear only if a repeat seed is selected, place last chosen pokemon overriding if random pokemon was chosen but allow random if the player want to repeat the same seed with a random pokemon.
Char name: Same as the before, blank if none was chosen previously.
them pressing enter tell that you accept the following options and start the game as the last used pokemon (or not if players want to use the same seed with other pokemon).

This can really speed up doing roguelockes when the pokemon list is huge and your pokemon must be searched in the list.

Edit let me know here if you want to suggest something different or if i forget something i'm all ears.

Ground mode TM use always targets leader with learnset of party members

This enables Pokémon to learn TM moves that aren't necessarily part of their TM learnset.

Steps to reproduce:

  1. Start with a TM (for example, Flamethrower) and two party members: one who can learn the TM move (for example: Charmander) and one who cannot (for example: Starly)
  2. Set the party member who cannot learn the move as the team leader.
  3. Open the Items menu and use the TM on the party member who can learn the move.
  4. The TM will attempt to teach the move to the party leader, even though that Pokémon should not be able to learn the move.

Preserve 4:3 aspect in fullscreen

Discord: Nooga#3123 <@217899432652308480>

Feature Request: Full Screen option that keeps 4:3 aspect ratio. I don't mind having black bars at the sides of the game window, but I greatly dislike the stretching that the current (and only) Full Screen option has. Hell, you could even have cute little bits of border art like Red and Blue had for the Super Game Boy to fill in the black space if you wanted.

Specifiable placeholder art for sprites, etc

Discord: Nooga#3123 <@217899432652308480>

Feature Request: Allow for an efficient custom placeholder sprite/portrait system that can fall back on the current checkerboard placeholder if needed. This allows for better testing of dungeon mons (eg. You can see which direction they're facing, what anim is playing etc) and starters that don't have assets yet.

Stat previews in map NPC editors

Discord: Palika#2589 <@118458522685014017>

SUGGESTION: map editor entities tabs gives a preview of Pokémon’s stats. Would be useful for balancing boss encounters

Clamp Background to map boundary

Discord: AntyMew#7931 <@119926342111330304>

feature request: clamp background to a ground map boundary (dir8 at least, offset would be nice) rather than a screen boundary, e.g. the skybox at pelipper post office

Stacking weather in ground map editor

so if map scripts are edited while the map editor is open, weathers will stack on top of one another
how to reproduce
load the ground map
go into edit mode
edit the script to change weather
reload scripts though the scripts tab of the ground map editor
save and tested
that got the first weather in place
go into edit ground again
edit the script to change the weather again
reload scripts through scripts tab of ground map editor again
save and test map
weathers now stacked

Thief/Shadow Force's particle effect does not load properly

Steps to reproduce:

  1. Enter any dungeon
  2. Find a foe and use Thief on that foe
  3. A debug magenta checkerboard texture will appear instead of a particle effect. The following error will be printed to the console:
Exception Depth: 0
System.Exception: Error loading /[PATH]/PMDO/Content/Particle/Shadow_Force_Hit.dir

 ---> System.IO.EndOfStreamException: Unable to read beyond the end of the stream.
   at System.IO.BinaryReader.InternalRead(Int32 numBytes)
   at System.IO.BinaryReader.ReadInt32()
   at RogueEssence.Content.DirSheet.Load(BinaryReader reader)
   at RogueEssence.Content.GraphicsManager.GetAttackSheet(String name)
   --- End of inner exception stack trace ---

Exception Depth: 1
System.IO.EndOfStreamException: Unable to read beyond the end of the stream.
   at System.IO.BinaryReader.InternalRead(Int32 numBytes)
   at System.IO.BinaryReader.ReadInt32()
   at RogueEssence.Content.DirSheet.Load(BinaryReader reader)
   at RogueEssence.Content.GraphicsManager.GetAttackSheet(String name)

More customizable Shiny Chance

Discord: thelmexx#0745 <@245872572808298496>

feature request: set shiny chance per dungeon, and a Spawn Feature under the TeamSpawnZoneStep to block a pokemon from appearing shiny

Option to disable mouse input

Discord: Shitpost Sunkern#8311 <@292039958829727744>

Feature request: Ability to disable mouse input
nearly deleted my save clicking back into the PMDO window

Save state in quicksave

Currently when quicksaving, the .rsqs file which has been logging our moves is simply closed. And when reloading, it plays back the entire adventure to reach its current point.

What needs to be done instead is that the state of the game is serialized, like a regular save, and then it is loaded back. One of the current issues with this is that some dungeon properties are not serialized and thus turn up blank on reload. They will need to be made saveable some way...

Explosions trigger thief mode

Discord: @Hazreath#4746 <@310407674917552128>

Bug report : Triggering an explosion trap (whether it is you or an enemy) and destroying a shop item in consequence makes you a shopstealer (most likely run ender 😦 )

AnimateInDirection documentation

Discord: Nooga#3123 <@217899432652308480>

Documentation request: Elaborate on how to use "GROUND:AnimateInDirection", it's not in the cheat sheet and the example in the testing grounds init.lua isn't super clear either.

Add option to export replays to a video file

Easy way to turn command-based replays to video-based ones in preparation for updates, ala Super Smash Bros. Maybe there's some video codec stuff that can be done in FNA idk.

Line Wrapping for Map Strings in the Developer GUI

What's the issue?
While editing the ground map strings through the developer GUI, the user may type in a string and associate a name to it; however sometimes strings may become excessively long which the use of the bottom scroll bar. This can become a cumbersome and tedious side task for the user as more text is added.

Recommended Solution
Allow rows in the map string table to vertically extend from text wrapping enabled in the string column. This will provide a more natural look for large blocks of text.

Self-cornering escape AI

Discord: Lars#6541 <@135862208654606337>

"Split Up" AI keeps getting stuck all the time, running into corners and staying there.

Document item icon IDs

Discord: Shitpost Sunkern#8311 <@292039958829727744>

Docs request: what item icon ids correspond to what? (Alternatively, just make it an enum)

Reset Button fails on Missingnos

Discord: Palika#2589 <@118458522685014017>

The reset button doesn't seem to work properly for missingos? I have a dummy to beat up on and when the map resets his name is reset to Missingno
image

Belly of all party members depletes while exploring

All party members' Belly will deplete at the same time while exploring.

Steps to reproduce:

  1. Enter a dungeon with multiple party members
  2. Walk around the floor for a while
  3. Open the menu. See that the Belly of party members who are not the leader has depleted.

Make it possible for multiple mods to be enabled

Currently only one mod can be enabled at a time. Make it possible for players to turn on multiple mods and come up with some kind of priority system to ensure they play nice with each other.

[Feature Request] Boss Health Bar

Boss fights do not feature health bars. It would be helpful to the player if these existed that way they can gauge how much longer the fight will last and act accordingly.

IDX function error

Discord: AntyMew#7931 <@119926342111330304>

bug (scripting): IDX function is not updated for latest changes to scripting API, and results in an error
image

floor count in screen UI

Discord: Shitpost Sunkern#8311 <@292039958829727744>

Feature request: floor number in top of screen UI, like the original games
While there's less room for health bars, it makes it easier to tell what floor of a dungeon a screenshot came from (which may be useful when looking through a long replay for a screenshotted bug)

Desync between Save file's ActiveTeam and GroundMap ActiveChar

If a ground map is saved and then loaded, the ActiveChar becomes detached from _DATA.Save.ActiveTeam.Leader

Steps:
Enter a ground Map
Save and quit
Load back from save
Enter into a script interaction that changes the player's luatable
Leave the ground map
Enter into a script interaction that relies on the changed value in the player's luatable
The change will not be reflected.

This also means that code which sets starters to different data from actual entities cannot uptake changes either.

Proposed Solutions:
-Make ActiveChar into a TempChar, and have it loaded on init
-Make ActiveChar into a new GroundChar subclass that explicitly tracks what CharData it was taken from

Current workaround:
Just set the luatable of the _DATA.Save.ActiveTeam.Leader directly
If something needs to be saved on the starter/partner, it is likely to be a singleton, and can be saved on scriptvars instead.

Automatic Save File Conversion for Script Variables

What the issue?
Upon changing scriptvars.lua and loading a save file, the memory associated to the script variables is bound by those that were in the original save file and not by the those in the scriptvars.lua. This can lead to null pointer exceptions when new code attempts to reference new script variables that are absent from the save file. A simple, inconvenient way around this is to create a new save file from scratch.

Recommended Solution
Upon loading the script variables into memory, rather than relying on the save file's script variables alone, initialize the script variables in scriptvars.lua, then update them with those in the save file only when variables names exist in both files. Upon saving, write the entire script variables from memory into the save file. This will prevent old script variables in save files from polluting the namespace in the future. Additionally, new script variables will be initialized to their default values according to the scriptvars.lua. Any variables that exist in both files will prioritize the value of that in the save file to prevent overwriting.

Note: Different data types will have to be handled separately. Working with bools, numerical values, and strings are trivial, but tables need to be handled differently. If the save file and scriptvars.lua both contain a matching variable name whose value is a table, the process must be recursive and check where keys match and update values accordingly.

Progress bar for updater download

Exactly what the title says: a progress bar letting the user know how much of the ZIP file has been downloaded during update. Presently, there is no user feedback as to what the updater is doing during that stage, thus making it impossible to tell whether the program has halted or if the download is taking a while due to a slow internet connection.

Recruitment search screen

Discord: Madmadness65#0503 <@163791403279843328>

Feature request: Implementing the recruitment search screen that PMD2 uses so its easier to keep track of the Pokemon that have already been recruited to help prevent needlessly befriending a Pokemon you already have again. Additionally, as an added feature to the request, names could be colored pink or have a star next to them if you've befriended a shiny version of that Pokemon.
image

Bulk operation for Autotiles

Discord: Nooga#3123 <@217899432652308480>

Feature Request: Allow us to duplicate an Autotile entry into a new index (i.e. let us make copies an existing entry) and allow us to batch change the "Sheet" field in the "Frames" menu (E.g. Change the highlighted text but for all the list entries) (still talking about Autotile stuff). This will make dungeon tileset recolours a whole lot less cumbersome than it is now.
image

Editor warps occurring in save files modified in dev mode

Discord: Palika#2589 <@118458522685014017>

Probably doesnt matter since this is dev mode exclusive.

When you edit a ground, save and test, then save and exit from there, When you reload the save file it gets all screwy. Reloading that save and exiting the map brings up the editor again. If you load that save ion normal mode (not dev), leaving the map causes the error above and the game to spaz out (screen gets all tiny, im sure you've seen this before)
image

Better formatting for Dungeon Seeds

Discord: Shitpost Sunkern#8311 <@292039958829727744>

Feature request: put spaces every four characters in seed display
e.g.

7EE4 8B90 68A5 F79C
instead of
7EE48B9068A5F79C

also, forcibly display leading zeros in this scheme so we don't have a 3-char group

[FEATURE REQ] Extensive mod compatibility

PMDO as a fangame is already made to support modding from the get go in the form of separate data stored as a "Special Episode." While fit for its purpose, this system currently has its limitations, the biggest of which is being unable to run more than one mod at a time. This feature request will lay out a suggested roadmap of how mod compatibility could be tackled in the long term.

Phase One: Resource IDs

Presently in PMDO, items, moves, Poke​mon and other data are stored with numerical ids, for example an Apple is 0001, a Big Apple is 0002, etc. With 2361 items in the game as of 0.5.2.1, item ID conflicts are bound to happen in the future once support for running multiple mods is added.

Suggested solution

Namespaced IDs would be useful for two reasons. Firstly, incompatibility with different developers mod data. Secondly, it would be a quality of life change for mod devs to not have to search the documentation for the right ID number. Minecraft currently uses a system where the resource string is prefixed with the set of data it is from, which helps differentiate whether an item is from the base game or a mod.
Some examples of how this approach would work:

  • PMD resources that exist in official PMD games or PMDCollab would be pmdc:apple for items or pmdc:pika​chu for Poke​mon.
  • Resources that exist only in PMDO itself would be origins:sickly_hollow for dungeons.
  • Resources that exist in a mod would be skytemple:duskako for Poke​mon.
    A precedent should be set that namespaced resources should use a certain formatting. In the examples above, I used no capitals, as well as underscores, while aptly identifying which resource the item is from. On top of all this, a check should be implemented to prevent collisions in the rare case of mods using the same namespace, for example if more than one person wants to remake Blue Rescue Team.

Phase Two: Types of mods

PMDO currently loads mods as an entire "overhaul" format, where all data for that mod is kept isolated from other mods. This prevents using "patch" mods where the only intent is to modify certain minor aspects in an efficient way, especially if said patch mod is made for an overhaul, for example RaoKurai's ZMDO.

Suggested solution

Audino suggested splitting mods into two types: Quests and Mods. Quests would use the already implemented "overhaul" method, using their own menu and scripts. Mods on the other hand would be loaded seperately and after a Quest, to either append their content onto the currently running Quest (assuming that PMDO would also qualify as a Quest) or patch an item that currently exists either in the current Quest or in PMDC, such as modifying the properties of pmdc:reviver_seed.

Phase Three: Compatibility checking and mod interface

Often, games that have modding support will also have a system that checks whether certain mods are compatible with one another on load, as well as checking for other things such as the presence of dependencies. These systems tend to run alongside a mod GUI, either incorporated as a launcher or as a menu within the game, allowing the user to pick what mods that are installed to run in a certain session.

Suggested solution

First, implementing a menu for mods would allow for easier management of the users installed mods, letting them run certain mods at certain times and potentially without having to reload the entire game.
Second, implementing a system to go over the content of all mods that are to be loaded, as well as the currently loaded quest, and check for things such as namespace conflicts or missing dependencies, to take incompatibility stress off of both developers and players. This would require modders to mark whether their mod requires other mods as a dependency, as well mark whether a resource is meant to overwrite another resource, to prevent the compatibility checker from incorrectly marking an incompatibility.

Phase Four: Saves and Mods

Some games with mod support will keep track of what mods have been run with a certain save, and warn the user if a particular mod is missing from that save. PMDO currently only keeps one save per Quest, so this feature would be incredibly important for preventing save corruption.

Suggested solution

Add certain flags to a save that lists what mods it was last run with, then use a similar function to the compatibility checker from Phase Three's suggestion to ensure that the correct mods are loaded, and warn the user if they aren't. Rather than preventing the user from loading the mod outright, allow them to do so after a warning of potential instability, as some patch mods may be able to be retroactively removed.

Event for item pickup

Add a coroutine event fired on item pickup in dungeons. This way tutorials can be triggered per item.

Real Time timer for dungeon runs

Discord: Shitpost Sunkern#8311 <@292039958829727744>

Feature req: run timer for dungeoneering. Always wondered how long a Guildmaster Trail attempt takes in real time.
Might require the save state change to be made to quicksaves first to prevent the timer from being desynced on loading a quicksave

Paged Signs

Discord: Palika#2589 <@118458522685014017>

Feature request: Way to add pages to signs. Either add two events to a single sign so that the first event is on page 1 and the second event is for page 2. Or have it so adding [br] breaks it up into different pages

Built-In PMD-Styled Virtual Keyboard

What's the issue?
Right now the game relies on the user to enter text information using a physical keyboard connected to the device running the game, however, this hardware might not always be available depending on the device running the game. Additionally, some users may want to play the game with a gamepad controller which lacks the ability to enter text information. Finally, some special characters that the original games permit are not possible to enter with a standard keyboard.

Recommended Solution
Implement the traditional PMD-styled keyboard that allows the user to use arrow keys to navigate to different characters and enter them into the text box. If the user prefers to use the keyboard, a game setting can be added to allow toggling between these modes.

Performance issues in Town

Discord: Xindage#2825 <@149266145281572864>

request: i need a option to disable capture pokemons from appearing in the town, my pc is weak and my framerate dies when i enter there, to use he shop for example. stangely the fps is still at 30 but the game is slowed down badly.

[FEATURE REQ] Mod compatible GUI/HUD

Currently, most menu tabs and user interface elements are hardcoded to PMDO's customized PMD style. Changing this to a format modifiable by mods would allow both other game UI ports (such as Explorers of Sky) and modders to add their own menu tabs or menu styles to the game through the new mod system.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.