News:

Printed Amstrad Addict magazine announced, check it out here!

Main Menu

Code hack needed for Shinobi Remaster for more detailed graphics

Started by Fmtrx, 22:23, 11 March 20

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Fmtrx

Hello all,

I have been working on doing enhanced graphics for shinobi since January and have released a first version which has updated textures in mission backgrounds.

The reason i am posting here is because i am searching for an experienced coder in ASM that could perform a hack in order to give me more space to work and create more accurate arcade like graphics on the CPC.
How this could be done?

I will describe how the game works now, and then what would be the modification:
The game has 4 missions, and each mission consists of 3-4 stages.
The map of each stage has the naming: <XX>.bin, where <XX> stands for <mission number><stage number>
The game has one tileset per mission. naming is : CHITES<X>.bin  where <X> stands for mission number.

The game allocates 64 tiles for each mission. All  graphics for the stages of a mission share these 64 tiles.

Currently the flow in code is something like this:

1. mission 1 start
2. load CHITES1.BIN
3. load 11.BIN
player finishes stage 1
4. load 12.BIN
player finishes stage 2:
5. load 13.BIN
player finishes mission 1 and bonus stage:

1. mission 2 start
2. load CHITES2.BIN
3. load 21.BIN
and so on.

The idea here is to load a different tileset before each STAGE, at the same address location as the original game did, overwriting previous stage tileset contents. Thus no additional RAM is required.
With this mod, we will be able to have 64 tiles per STAGE, which are enough to produce closer to arcade graphics.

So from my side i will create 19  CHITES<XX>.bin, where <XX> stands for <mission number><stage number>

The hack in the code would be so that this flow will be implemented, marked with red font:

1. mission 1 start
2. load CHITES11.BIN   (rename CHITES1 to CHITES11.BIN)
3. load 11.BIN
player finishes stage 1
  mod addition: load CHITES12.BIN     (addition of a new loader here)

4. load 12.BIN
player finishes stage 2:
   mod addition: load CHITES13.BIN (addition of a new loader here)   
5. load 13.BIN
player finishes mission 1 and bonus stage:

1. mission 2 start
2. load CHITES21.BIN (rename CHITES2 to CHITES21.BIN)
3. load 21.BIN

etc

The advantages of utilizing 64 tiles per stage are more than visible. Take as an example the attached screenshot:
For the red wall and the window, in order to match the arcade style, i had to use 27 tiles.
This can not be done if we have 64 tiles for the whole mission!

What do you think about the this hack? Does anyone know if this is feasible ?

regards,
Faidon

Targhan

There is no reason this couldn't be doable. If you need FDC code to load AMSDOS file without the system, check the Arkos website in my signature and check the FDC Tools I did. The sources are in a DSK (old school...) but if you have trouble extracting them, contact me and I'll send you the Winape compatible sources.
Targhan/Arkos

Arkos Tracker 2.0.1 now released! - Follow the news on Twitter!
Disark - A cross-platform Z80 disassembler/source converter
FDC Tool 1.1 - Read Amsdos files without the system

Imperial Mahjong
Orion Prime

Fmtrx

Thanks Targhan, i will check this out.
I need to load specific files at specific conditions are met \
e.g. if player finishes stage 2 and goes to stage 3 of mission 4, then load chites43.bin


i will check this but in the meantime if anyone with more knowledge is available please communicate with me!

Targhan

Shouldn't be too hard, I guess the "mission 1/2/3..." intermission screen is the ideal place to load your new tile. Sorry I can't help you on this, I'm already working on something that requires my full attention!
Targhan/Arkos

Arkos Tracker 2.0.1 now released! - Follow the news on Twitter!
Disark - A cross-platform Z80 disassembler/source converter
FDC Tool 1.1 - Read Amsdos files without the system

Imperial Mahjong
Orion Prime

Targhan

Oh sorry I didn't notice the game was already loading the files (I though all was in memory already). So you shouldn't need my FDC tools :).
Targhan/Arkos

Arkos Tracker 2.0.1 now released! - Follow the news on Twitter!
Disark - A cross-platform Z80 disassembler/source converter
FDC Tool 1.1 - Read Amsdos files without the system

Imperial Mahjong
Orion Prime

Fmtrx

i need to find a place large enough to write a command to load chites.bin before each stage - more precisely in stages 2 3 and 4 on each mission - , This load will be done exactly the same way it is already done on each mission start , in the first stage of every mission start.
Thia may sound easy for experiences coders in ASM but i cannot do it.

Targhan

One possibility is to include some code IN one of the loaded file (at the end for example!)
Targhan/Arkos

Arkos Tracker 2.0.1 now released! - Follow the news on Twitter!
Disark - A cross-platform Z80 disassembler/source converter
FDC Tool 1.1 - Read Amsdos files without the system

Imperial Mahjong
Orion Prime

Fessor

maybe it is enough to change the pointer to the file name and instead of taking the value from register a, the value from register hl as with the xx.map files (?) so that chitesx.bin becomes chitesxx.bin

However, since the number in the file name is checked at various points, it may be necessary to move the pointer one byte forward to 0xb783 resulting in file name of chitexx.bin.
As the Filenames are altered here, from:
                LAB_ram_1702                                                     XREF[1]:     ram:16ef(j) 
    ram:1702 f3                 DI
    ram:1703 cd8b18             CALL      SUB_ram_188b
    ram:1706 3284b7             LD        (DAT_ram_b784),A                            ; = 58h   X    -> Number in CHITESX  .BIN
    ram:1709 2289b7             LD        (DAT_ram_b789),HL                           ; = 58h   X    -> Number of .MAP
    ram:170c c35212             JP        LAB_ram_1252

  To:                LAB_ram_1702                                                     XREF[1]:     ram:16ef(j) 
    ram:1702 f3                 DI
    ram:1703 cd8b18             CALL      SUB_ram_188b
    ram:1706 2284b7             LD        (DAT_ram_b784),HL                           ; = 58h    X
    ram:1709 2289b7             LD        (DAT_ram_b789),HL                           ; = 58h    X
    ram:170c c35212             JP        LAB_ram_1252

Maybe                LAB_ram_1702                                                     XREF[1]:     ram:16ef(j) 
    ram:1702 f3                 DI
    ram:1703 cd8b18             CALL      SUB_ram_188b
    ram:1706 2283b7             LD        (DAT_ram_b783),HL                           ; = 58h    X
    ram:1709 2289b7             LD        (DAT_ram_b789),HL                           ; = 58h    X
    ram:170c c35212             JP        LAB_ram_1252


    ram:b77e 43                 ??        43h    C    ram:b77f 48                 ??        48h    H
    ram:b780 49                 ??        49h    I
    ram:b781 54                 ??        54h    T
    ram:b782 45                 ??        45h    E
    ram:b783 53                 ??        53h    S
                DAT_ram_b784                                                     XREF[2]:     ram:1153(*), ram:1706(W) 
    ram:b784 58                 ??        58h    X
    ram:b785 20                 ??        20h     
    ram:b786 42                 ??        42h    B
    ram:b787 49                 ??        49h    I
    ram:b788 4e                 ??        4Eh    N
                DAT_ram_b789                                                     XREF[1]:     ram:1709(W) 
    ram:b789 58                 ??        58h    X
                DAT_ram_b78a                                                     XREF[1]:     ram:112c(*) 
    ram:b78a 58                 ??        58h    X
    ram:b78b 20                 ??        20h     
    ram:b78c 20                 ??        20h     
    ram:b78d 20                 ??        20h     
    ram:b78e 20                 ??        20h     
    ram:b78f 20                 ??        20h     
    ram:b790 20                 ??        20h     
    ram:b791 4d                 ??        4Dh    M
    ram:b792 41                 ??        41h    A
    ram:b793 50                 ??        50h    P

Fmtrx

Very nice Fessor, thank you!
This is the most elegant way as you proposed: just copy bin number to chites and overwrite letter 'S' and <x>
from CHITES<X>.bin

Which program did you use for the dissasembly that creates these useful ref labels (DAT_ram_b784 )[size=78%]? [/size]
I just hit pause on winape, which has no labels are generated.

A new person joins the credits section :) 

Fessor

Quote from: Fmtrx on 09:48, 14 March 20

Which program did you use for the dissasembly that creates these useful ref labels (DAT_ram_b784 )[size=78%]? [/size]
I just hit pause on winape, which has no labels are generated.
I'm using ghidra. https://ghidra-sre.org/

Fmtrx


gerald

And if you fear installing a 1GB java NSA developed application, you can have a go at  yazd  ;)
https://github.com/toptensoftware/yazd

Fmtrx

Quote from: gerald on 12:56, 14 March 20
And if you fear installing a 1GB java NSA developed application, you can have a go at  yazd  ;)
https://github.com/toptensoftware/yazd


:laugh:


I imagine the following hair rising dialogue..

NSA security officer: Boss we have an alert from this IP, this guy named Fmtrx, seems a notorious hacker, and is up to something.
Chief of NSA: alright, may i have your attention all of you, i want a full report, we must prepare ourselves for an incoming security breach!
tell us, is he hacking social security numbers?
NSA security officer: no Sir.

Chief of NSA: Is he trying to manipulate missiles and cause a world war?
NSA security officer: no Sir

Chief of NSA: Is he hacking white office secrets?
NSA security officer: again No Sir

Chief of NSA: Will you bloody tell me what is he doing ?
NSA security officer: he is ... he is doing a remaster of shinobi game Sir!


Chief of NSA: OH GOD! This is more serious than i thought! ALERT ALERT! CODE 5 RED! Everybody out of this room! Get yourself a day off and download shinobi remaster and leeeeet's play! I want your reports by tomorrow morning. :D


gerald

Quote from: Fmtrx on 13:30, 14 March 20

:laugh:


I imagine the following hair rising dialogue..

NSA security officer: Boss we have an alert from this IP, this guy named Fmtrx, seems a notorious hacker, and is up to something.
Chief of NSA: alright, may i have your attention all of you, i want a full report, we must prepare ourselves for an incoming security breach!
tell us, is he hacking social security numbers?
NSA security officer: no Sir.

Chief of NSA:Is he trying to manipulate missiles and cause a world war?
NSA security officer: no Sir

Chief of NSA:Is he hacking white office secrets?
NSA security officer: again No Sir

Chief of NSA:Will you bloody tell me what is he doing ?
NSA security officer: he is ... he is doing a remaster of shinobi game Sir!


Chief of NSA:OH GOD! This is more serious than i thought! ALERT ALERT! CODE 5 RED! Everybody out of this room! Get yourself a day off and download shinobi remaster and leeeeet's play! I want your reports by tomorrow morning. :D
I would more worried of Oracle layers army once they found out you've used Java for doing the remaster  ;D

Fmtrx

 :D
jokes aside, this ghidra tool from what i saw after a quick view is very powerful and one has to read the manual to explore all of its features.
Great tool.

Powered by SMFPacks Menu Editor Mod