Coder Social home page Coder Social logo

neo-engine / neo Goto Github PK

View Code? Open in Web Editor NEW
99.0 9.0 6.0 536.98 MB

A homebrew Pokémon nds game; written from scratch using libnds and devkitPro

License: GNU General Public License v3.0

C 2.49% C++ 97.06% Makefile 0.35% Shell 0.01% Python 0.07% Vim Script 0.02%
libnds devkitpro pokemon

neo's Introduction

Pokémon neo

An experimental Pokémon engine for Nintendo DS. For demonstration purposes only, currently neo includes some (updated) maps from Pokémon Emerald, as well as images from other mainline Pokémon games. These are not part of neo.

Consult the compatibilty section for more or less up-to-date information on supported hardware and emulators.

Features

Partially implemented features are in italics.

  • A working Pokémon engine (at 60fps), including

    • A status view for single Pokémon as well as the player's party, including detailed information about the Pokémon's moves and ribbons
    • An in-game Pokémon storage system
    • A working PokéDex, listing for each Pokémon
      • A flavor text
      • Types, simplified base stats, height, and weight
      • Different forms, if any
      • Locations where (and when) the Pokémon can be found in-game
    • A working battle engine including
      • Single and double trainer battles
      • Multi trainer battles
      • Wild Pokémon battles
      • Switch Pokémon, use moves, use items
      • Move effects, item effects, ability effects
      • Move animations
    • A fully working bag
    • A working map engine (for now only GBA-style maps are supported) including
      • Events, Warps
      • Wild Pokémon encounters
      • Pokémon Trainers challenging the player
      • Animated map tiles, changing tiles based on story progress
      • Player sprite, animated moving, surfing, cycling, and fishing
      • PKMN following the player
      • Weather and other overlays (flash, sandstorm, etc)
      • Field moves such as Surf, Waterfall, Rock Climb, Cut, Strength, Fly, Dive, etc
      • Currently unsupported field moves: Whirlpool, Defog
      • Mach Bike, Acro Bike, Fishing Rods, PokéRadar, Escape Rope, Honey
    • BGM and SFX including
      • An in-game jukebox
      • Compatibility with official NDS game music (using .sseq, .sbnk, and .swar files for BGM playback).
    • A real time clock
      • Overworld changes based on time (map palette akin to DNS)
      • Different wild Pokémon encounters based on time.
      • Map events based on day time
    • Support for (multiple) save games
      • Saving the progress to the micro SD (works only on flash cards)
      • Saving the progress to flash memory (works only in emulators)
    • Support for communication with “the originals”
      • Playing with / importing a save from a GBA version
      • Link trading with Gen IV and Gen V games
    • A clean UI
    • Dynamic difficulty
      • Wild Pokémon's levels scale with the story progression
      • Adjust the difficulty anytime via the Options.
    • Full support for multiple languages (English, German)
      • Kana are supported font-wise, getting Kana text for story content still requires some work.
  • Easy-to-understand and ready-to-(re)use code

    • Strict and intuitive naming conventions
    • Documentation

Build requirements

  • devkitARM ≥ r57

  • libnds ≥ 1.8.2

  • libfilesystem ≥ 0.9.14

  • libfat-nds ≥ 1.1.5

  • dswifi ≥ 0.4.2 (currently unused)

  • gcc/g++ ≥ 11.2 (for ndstool)

  • make

Having installed the above tools, neo can be built with a single make command. See the section below for optional compilation parameters.

The main data for the maps, 'mons, etc, is stored in the separate perm2-FSROOT repository; some data can be configured and build via tools and csv files found in the perm2-fsdata repository.

Further helper scripts to convert images and other data can be found in the perm2-helper repository.

Compilation Parameters

All of the following parameter can be specified as environment variables or as parameters to make; the exact (non-empty) value of a variable is unused.

  • DESQUID Enable desquid mode. Adds a desquid menu to the party screen, allowing for an easy way to edit and/or test Pokémon. Also adds a global dequid menu to SELECT; shows the current location and other desquid output on L, and enables a walk-through-walls mode while pressing R.
  • NOSOUND Disable all sound output.
  • FLASHCARD Optimize for flashcards. Uses argv parameters to write save game files (instead of writing directly to CARD memory). Typically, FLASHCARD builds cannot create/load save games in an emulator.
  • VANILLA Use default ndstool shipped with devkitPro to bundle the nds binary.
  • NOSOUNDFADE Disable fade-out/fade-in when switching BGM. No longer needed.

Compatibility

In general, neo tries to be compatible with most emulators and flashcards. Below, there is a list of known compatibility issues for select emulators. Feel free to open an issue if neo does not run on your emulator or hardware, but you think it should.

Emulator/HW Status Notes
NooDS OK
melonDS OK, minor slowdowns
Delta OK, minor slowdowns (uses/same as melonDS)
desmume OK, slowdowns not tested recently
woodR4 OK, sound effects broken compile with FLASHCARD=1
nds-bootstrap OK, sound effects broken compile with FLASHCARD=1 VANILLA=1

Screenshots

More screenshots are available in the Screens subdirectory.

General gameplay

Pokémon status screens

The storage system

The Bag

The PokéDex

Battles
Wild Pokémon battles

Trainer battles

Miscellaneous

neo's People

Contributors

ph111p 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  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  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neo's Issues

Real hardware: Memory corruption upon entering a battle

(Real hardware is just weird.)

Upon entering a battle, some seemingly random garbage may be written to the team data and to other places in memory. This further seems to cause some sprite related nitroFS accesses return garbage as well, thus rendering the game merely playable. (At least it does not seem to crash, however, I'd rather not save in that situation either.)

This happens, of course, only on real hardware and only sometimes.

Possible port to PC

I was wondering if you have thought about splitting the engine part and the hardware part, and doing a port to PC using SDL2 or something similar. It would be useful for testing purposes, for example.

Gbarunner3 Support and gen 3 Pokémon transfer

The neo engine recognizes the gen 3 cart and rom save file. Pokémon from gen 3 can be transferred from game to the Neo engine. Gbarunner 2/3 link support, Trading and battling with Pokémon FrLg, Ruby, sapphire, Emerald

GEN 6/7 support

Pokemon from 3DS code on the Nintendo ds. 3D Models of trainers, overworld and Pokémon

EXP distribution is buggy

Hardly ever works correctly if multiple Pokémon gain experience.

  • Wrong Pokémon gain experience
  • Wrong Pokémon don't gain experience

Fix README

Update the outdated screens in the README,

"Currently at [...]" popping up repeatedly

  • Issue: "The currently at [...]" dialoge pops up repeatedly even after closing
  • Emulator: No$gba v2.6a
  • Reproducible: 100%
  • Reproduction:
    • Alt-tabbing out of the emulator and re-entering the game pops up the dialogue
    • "okay"-ing on the touchscreen does clear the box but it reappears
      • you can free yourself from the lock by hitting L (which is not defined in the controls)

RTC and other stuff seems buggy on o3DS

(I suppose this is a rather rare setup but, nevertheless, I found it funny enough to report.)

Running the game via a NDS flash card on an o3DS seems to produce some bugs. It remains to be seen if these occur on a DSlite. (Don't ask how I made the game run in the first place, there are some good guides for that.)

In particular:

  • RTC stalls at the time during boot (as in some emulators)
  • Game freeze after closing the PKMN status screen

Add mapscript

Add a script to enable map events as:

  • trainer battles
  • items on the ground
  • warps (currently really hacky)
  • scripts
  • stationary wild PKMN

Bag UI drag and drop

  • Issue: Dragging from anywhere on the bag screen to a pokemon picks up their item
  • Reproducible: 100%
  • Reproduction:
    • open bag while carrying pokemons that hold items
    • drag (for instance from the right-hand side) 'nothing' to the pokemon
      • this also works if you start dragging on an item inside your bag while not waiting for its background to light up (reproduction notice i start dragging whilst hovering the item on the right)
    • your cursor will now carry the pokemons item

Some bugs when trying to play through twilight 3DS menu

I recently tried to play pokémon neo project on the Old 3DS via the Twilight menu, but unfortunately the game only loaded with some strings on the screen written "(uistring failed)" and no graphics were rendered, the tested version of the game was 1.0.1-alpha , and the version of Twilight until then was something released around 2020 which was probably the date I had initially installed it, so I updated that version to v25.7.0 (latest on the date I write this issue), and the error remains.

Screenshot

img

So I downloaded some other previous versions to test, the v0.9.7 and v0.8, the 1.0-alpha I didn't find the compiled version on the github of the project, both versions 0.97 and 0.8 render normally, both does't have that bug from 1.0.1-alpha , but in all versions from what I've seen, the controls freeze after some time, in the first test on the 0.97 the game has freeze after i entered in the bedroom of the protagonist and went down the stairs, the game has stuck on dialog, but the Vigoroths animation it was normal, only the text or controls has stucked, theese bugs of freezing apparenly ocurrs on the three versions, even on the 1.0.1-alpha freezes if you remain waiting on menu.

the name of the game displayed on menu also has bug, it doesn't occurs on the v0.9.7 and v0.8.

Screenshot

img

Menu stucked, this picture is on v0.8 if I remember.

Screenshot

img

in one of the tests, if I'm not mistaken in version v0.9.7, my console crashed and I had to turn it off using the power button, I don't know if this is related to the game or if it was just a coincidence, I don't remember if this had already happened before with my 3ds.

Apparently change the execution mode between default, dsi and ds. It doesn't affect anything, I tested it only on 1.0.1-alpha.

well, from the tests I've done this is all I've noticed and I think it's relevant to help find the bugs, I'm sorry if anything got confusing, as you can see I'm not a native English speaker.

Overriding HM ability causes glitched attack view

  • Issue: Overriding an HM ability changes the HM ability in the pokemon menu, but not in the override-attack-dialogue
  • Reproducible: 100%
  • Reproduction:
    • Override a pokemons HM move by a TM move
    • Try to teach the pokemon another move

Bitmap Sprites Broken on Hardware

Bitmap sprites display only garbage on hardware. This affects OW sprites as well as PKMN icons in the storage system. It seems as if the DS' GFX engine is not set up properly for these modes, but for some reason the emulators don't complain and it just works...

TMs can override HMs

  • Issue: TM moves can override HM moves
  • Reproducible: 100%
  • Reproduction:
    • Teach HM move to a pokemon either by using the item or levelup
    • Use TM on pokemon to override HM move as normal

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.