GithubHelp home page GithubHelp logo

legend-of-dragoon-modding / severed-chains Goto Github PK

View Code? Open in Web Editor NEW
268.0 268.0 20.0 54.36 MB

Legend of Dragoon decompiled, reverse engineered, and ported to Java

Home Page: https://legendofdragoon.org/projects/severed-chains/

GLSL 0.16% Java 99.80% Shell 0.03% Batchfile 0.01%
java reverse-engineering

severed-chains's People

Contributors

angcl avatar avionanx avatar croway avatar djcarvey avatar dragoonsouls avatar illeprih avatar ink230 avatar keinengott avatar latchgamedev avatar lordmonoxide avatar theflyingzamboni avatar zack37 avatar zychronix 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  avatar

Watchers

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

severed-chains's Issues

Main menu lock-up

  1. Entered first save point.
  2. Opened main menu
  3. Navigated to Save
  4. Opened save menu
  5. Exited save menu without doing anything
  6. Controls stopped working

Allow multiple status effects and restrict cure items to cure one at a time

Note - I don't think it's actually possible to have multiple negative status effects at once.

If a player is afflicted with both a mind and body status at the same time, a single status-healing item cures all negative status effects, not just the ones they're supposed to.

Maybe we should fix this and add an option to enable multiple status effects for increased difficulty?

List of bit hacks used in assembly

n * 0x8080_8081 >>> 39 ~= n/255
n * 0x8888_8889 >>> 37 ~= n/60
n * 0x8888_8889 >>> 32 ~= n*15/8
n * 0x6666_6667 >>> 35 ~= n/20
n * 0x8102_0409 >>> 38 ~= n/127
n * 0xcccc_cccd >>> 35 ~= n/10
n * 0xd1b7_1759 >>> 45 ~= n/10_000
n * 0x431b_de83 >>> 50 ~= n/1_000_000
n * 0x0a7c_5ac5 >>> 39 ~= n/3_125
n * 0x00ff_f001 >>> 36 ~= n/4_097
n * 0xff80_3fe1 >>> 39 ~= n/513
n * 0x0fe0_3f81 >>> 35 ~= n/129
n * 0x1a1f_58d1 ~= n/49

Background edge pixel fill

When the camera in the crossroads fades in, it is slightly past the edge of the background texture. Instead of being black-filled, it repeats the edge textures to the edge of the "screen".

Dart started at D'lvl 5

This may have been a fluke in my playthrough (possibly even something I did manually and forgot about) but Dart started at D'lvl 5. Someone needs to play through up until Dart gets his Dragoon spirit and see if it happens again.

Collision issues

Collision is probably about 90%, but not quite accurate. For example, rubbing against some collision barriers can cause you to teleport into the abyss.

Addition text is off by one

When you complete an addition, the text that pops up on the right side of the screen has each letter incremented by one (Harpoon -> Ibsqppo)

Memory leak

If you leave the game running for long enough it'll run out of memory

What's up with these padded TMDs?

Some (all?) TMD (and other?) files inside of MRG files have an extra header before they start that looks like this:

0h (4 bytes) - offset to actual start of file
4h (4 bytes) - optional relative pointer (may be 0) - appears to be a relative pointer to an array of 4 relative pointers. If present, a 30h-byte struct is allocated on the memory management linked list and the array of relative pointers is resolved to absolute pointers and copied to the 30h-byte struct at +20h (see SMAP function 800de004).
8h (4 bytes) - optional pointer offset (may be 0) - I think this is a relative pointer to an array of 7 relative pointers. If present, the relative pointers are resolved to absolute pointers and stored in BigStruct at +d0. Note that there are several other 7-element arrays in BigStruct that are related.
... (Do some of these files have more data here? +0h is an offset to the start of the actual file. The only value I've seen so far is 0xc, but there could be others)
?h - The start of the actual file - actual offset is the value at +0h

The loader code is also reading the upper 16 bits of the TMD ID (i.e. the value that should always be 00000041, unless we're missing something that isn't in the file format docs.

It appears these padded files aren't always in MRG files. There's one at 800103d0 in the main executable of the game.

All of the the extended TMDs I've seen so far are followed by another file with the same extra header and a file ID of 0x01 (assuming they follow the same file ID convention as many other PS1 files)

Invalid CDROM sync code when booting

There's a very common exception when booting, probably about 5-10% of the time, especially on slower hardware. The solution will probably be to just rewrite the code reading these files so that it doesn't have to rely on the hardware translation layer.

java.lang.ArrayIndexOutOfBoundsException: Index 7 out of bounds for length 7
	at legend.core.cdrom.SyncCode.fromLong(SyncCode.java:14)
	at legend.game.Scus94491BpeSegment_8003.processCdromInterrupt(Scus94491BpeSegment_8003.java:789)
	at legend.game.Scus94491BpeSegment_8003.FUN_800321c4(Scus94491BpeSegment_8003.java:1065)
	at legend.game.Scus94491BpeSegment_8003.FUN_80036e50(Scus94491BpeSegment_8003.java:3444)
	at legend.game.Scus94491BpeSegment_8003.FUN_8003429c(Scus94491BpeSegment_8003.java:2027)
	at legend.game.SInit.FUN_800fbb9c(SInit.java:219)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at legend.core.memory.Memory$MemoryValue.call(Memory.java:362)
	at legend.core.memory.types.SupplierRef.run(SupplierRef.java:25)
	at legend.game.SInit.executeSInitLoadingStage(SInit.java:94)
	at legend.game.Scus94491BpeSegment_800e.executeSInitLoadingStages(Scus94491BpeSegment_800e.java:1053)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at legend.core.memory.Memory$MemoryValue.call(Memory.java:362)
	at legend.core.memory.types.RunnableRef.run(RunnableRef.java:17)
	at legend.game.Scus94491BpeSegment_800e.executePregameLoadingStage(Scus94491BpeSegment_800e.java:934)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at legend.core.memory.Memory$MemoryValue.call(Memory.java:362)
	at legend.core.memory.types.RunnableRef.run(RunnableRef.java:17)
	at legend.game.Scus94491BpeSegment.executeLoadersAndScripts(Scus94491BpeSegment.java:388)
	at legend.game.Scus94491BpeSegment.lambda$gameLoop$0(Scus94491BpeSegment.java:354)
	at legend.core.gpu.Gpu.lambda$run$11(Gpu.java:451)
	at legend.core.opengl.Context.draw(Context.java:96)
	at legend.core.opengl.Window$Events.onDraw(Window.java:336)
	at legend.core.opengl.Window.run(Window.java:217)
	at legend.core.gpu.Gpu.run(Gpu.java:458)
	at java.base/java.lang.Thread.run(Thread.java:833)

Combat camera

The combat camera is very glitchy. It jumps around a lot and the angles aren't quite right.

Add load game feature

Add load game to the inv menu. Can probably look into the game over logic for a good way to reset back to the main menu.

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.