News:

11 March 2016 - Forum Rules

Main Menu

Wolfenstein3D - SNES Uncut hack

Started by Fire-WSP, March 19, 2018, 10:19:14 PM

Previous topic - Next topic

Fire-WSP

#100
@DarkSamus993
very exciting stuff as usual.
Since you posted the picture with the HUD content and the font, I made the Umlauts really quick.
GFX for it is here:
https://www.dropbox.com/s/xpaoanc6xfb60bz/Umlauts.png?dl=0
I also did a unlimited sign, for the knife in case it can be implemented.

Also I wonder, what GFX artifacts is the stuff you can see between Item and the Mouse cursor?

@SCD well technicially you dont need to redraw any sprites.
In the SNES version and in the PC version the sprites are 64x64.
The SNES PAL is a little different than the PC PAL.
So before anything can be done on the SNES/PC conversation version, you need to adjust the PAL.
Then you can directly copy and paste the PC sprites.
The PC version has more sprites for the characters so that needs to be reduced.
But all in all, once we can touch the sprites and if somebody can adjust the PAL for you,
it is just a copy and paste job. (assuming to work with Tilemolester for example)

ShadowOne333

Damn this is looking so good.
I can't wait to give the final product a try :D

One thing I noticed is that Wolfensnes has some changes from the original DOS one, most importantly, level layouts.
How much does it vary from the original in terms of level layout?
Is it an entirely different version of the original when it comes to the levels? Or does it have some in common with the DOS one?

Shadowhazard

#102
Snes BJ Zombie: if possible, this has to be the dead face when bj gets killed by Dr.Schabbs only.

Orginal Id Mac/Snes Version
https://ibb.co/huRYmc


Snes BJ Angry Face: Use rapid fire and he gets angry^^
https://ibb.co/kXgUsH

Snes BJ Angry Face and half dead:
https://ibb.co/ettnwc

Snes BJ Smile but half dead:
https://ibb.co/jjApsH

Snes God Mode:
https://ibb.co/cmDaXH
https://ibb.co/nnDnex

When Bj gets hit/hurt hard:
https://ibb.co/cxLWpx

Ok there are all Sprites and they fit to each other.

the two mac sprites(hurt hard and zombie) i just scaled them down 50% an i got the perfect snes quality.
So it would be possible to get the middle position when he looks directly to the player.
But the question is its possible to build them in and that they work like they supposed to be.
Would be a huge + to the game because you have maximum interaction with BJ.


The Console Levels are different mostly smaller but i like them more. They mixed wolf3d and spear levels and made some changes on it.
For some reason the snes version has more atmospere for me. This brown floor looks so much better than on pc/mac that light grey.

SCD

#103
@Fire-WSP

Alright, because I remember that adding new sprites is a little tough, because you got to make sure they will work correctly with the right color palettes.

@Shadowhazard

Those are cool custom sprites that you made, they came out great.

I'm not going to be able to make the optional PC color patch, because the sprites that I want to change their colors on share colors with other sprites, sorry about this.

So the only way to make this work is we have to give certain sprites their own set of palettes, I don't know if it's possible or not.

I might go back and change the locations of the music tracks again.

Shadowhazard

#104
custom is not really correct^^. i did nothing special, mostly copy and paste between snes,jaguar,mac sprites and a little bit PC. But converting the PC stuff is a mess.
And converting/scaling the mac sprites was the same thing that the ID Artist did i found out. The side face sprites and the functionality are exclusive to Snes so the ID Artist had to draw these extra from the mac sprites as base. The Mac version has only the three basic movements eye left, right and middle. Also the mac version has the animation when BJ gets hurt hard and the ZombieBJ.

The jaguar version has ALL Faces they exist even the snes faces(altered with theet) but the color palette is the same as PC so its hard to work with and you can clearly see they tried to give the jaguar version everything what other versions lacked.

Hope we can give the snes version a similar treatment when it comes to the faces. Iam fine with it when we dont implement the middle eye position just try to put the extra faces in and that they work like they supposed to be :)
@DarkSamus993 hope you like the idea and that its possible to do :) FireWSP has no Problem with my Idea.

Ok here is BJ half dead and hurt hard
https://ibb.co/eQQkhH

this Stuff when he gets a critical hit^^

last picture :)

at moment i test wolf3d on snes mini and i found out that when Bj is below 30% his face is injured but he dosent move his eyes anymore but the sprites are orginal there for. instead the game chooses one of them when you get down below 30% and then you die and get the dead pic or you get health...could it be that they forgot something in the code that the eye movement is corrupted in the bloody faces?

When he gets hit from the side he also looks very long in that direction before he continues his eye routine. In this time it could happen anything specialy in hard mode which i test/play :)

About the Idea with the weapons, and give them more power. I think its not necessary but increase the fire rate for the machine gun so that it fires two bullets when you press one time on the button and the chain gun 3 bullets....if possible.

Fire-WSP

#105
Quote from: Shadowhazard on April 07, 2018, 04:17:53 AM
@DarkSamus993 hope you like the idea and that its possible to do :) FireWSP has no Problem with my Idea.

It is not on me to approve something or not.
We collect ideas and material for possible extra stuff which could be cool to have.
But this all depends on what is possible in the end and what not.
Right now the main focus lies on the clean Uncut version hack.
I am very happy with what was archived already.
Everything what was done openend the way for general modding of he game.
So all in good time.
DarkSamus993 has to spend the most work on it right now.
ASM is not an easy task and the reverse engineering of the routines and so on aswell.
So lets focus on the main goal for now. Then we can go from there.

@Shadowhazard
The heads are cool. That could be a nice addition to the game.
The qustion is, if this is possible.
DarkSamus993 showed in an earlier post two pictures. The PAL and what is technicially on screen.
This is HUD GFX and the faces. Therefore this has to be loaded in ram (vram?) at any time.
If you want to add more faces, you need more memory somewhere.
If the memory is already very tight, there is maybe no chance to fit that in.
If it is just a matter of more cartridge space, it is more likely possible.


DarkSamus993

Small update: I pretty much understand how the old sprite routine operates now. I just need to finish working out the logic for loading as uncompressed, then I can actually start programming it.

Quote from: Fire-WSP on April 07, 2018, 01:29:05 PM
The heads are cool. That could be a nice addition to the game. The qustion is, if this is possible.
If there is not enough room in VRAM to have all the faces loaded at once, then what would have to be done is load them dynamically either from ROM or RAM (in other words, they'd have to be swapped into VRAM as needed). Since the game expects the face graphics to already be loaded, the routine for switching faces would have to be modified to also upload new data to VRAM. It should technically be possible, it just means more time spent disassembling the old routines and coding new ones. I'm willing to look into it though.

Shadowhazard

Maybe a new mission screen.
https://ibb.co/kQsq1c

Idea is to use the old one as introduction screen as normal when you start a game and as end screen when you killed Hitler like in Spear of destiny after killing angel of death.
The new one is for killing a boss an go to the next mission.

DarkSamus993

It just occurred to me, we totally could make the wall textures 64x64 now that I know how that routine functions as well (pretty much the same as the sprite routine, just with half the writes).

If someone wants to provide the 64x64 wall textures (or I could just make temporary replacements), I can code them into the game with the uncompressed sprites. The only concern is possible slowdown from the bigger workload, though I'm sure having the wall textures be 32x32 was intended more as a space saving measure than a lag reduction method. I guess we'll find out...

Fire-WSP

I can make a texture pak to try that out. When do you need this?
I am open to try this out. Curious how it would look and if it works good.
But if it impacts the game in a negative way or changes the total athmosphere of the game,
I would not use it in the uncut. However, a bit more detail for the walls could be good.
Lets try and see. ^^



ShadowOne333

#110
Quote from: DarkSamus993 on April 08, 2018, 10:59:09 AM
It just occurred to me, we totally could make the wall textures 64x64 now that I know how that routine functions as well (pretty much the same as the sprite routine, just with half the writes).

If someone wants to provide the 64x64 wall textures (or I could just make temporary replacements), I can code them into the game with the uncompressed sprites. The only concern is possible slowdown from the bigger workload, though I'm sure having the wall textures be 32x32 was intended more as a space saving measure than a lag reduction method. I guess we'll find out...

How's this for the wall textures?





They're all 64x64, and I think these should pretty much cover the whole wall textures. Let me know if you still need more.

Fire-WSP

Yes I also will use the PC version Textures and also Mac Verison textures but the SNES PAL is a little different so I want to convert them nice and clean.

Shadowhazard

Would be cool but i think this will produce frame problems in later levels. the death knight level for example is on some places low on frames already.

Fire-WSP

#113
Okay guys, since there is a general interest in modding the game, I have converted all available sprites from the PC (including Spear) and also from the Mac version, so that they all share the SNES palette now.
On many sprites and walls you won't notice a change but it is there.
Mostly the textures got a bit darker on the Snes but there are also entire colors missing.

@DarkSamus993
the PNGs are indexed with the SNES pal.
You just need to copy whatever wall or sprite you need for testing.

here are the links:

https://www.dropbox.com/s/ulwto9l2ojni5nm/Wolf3DPCSprites_SNESPAL.png?dl=0
https://www.dropbox.com/s/253ao4tecbwrukw/Wolf3DMAC_SNESPAL.png?dl=0



releasethedogs

just so you know the Mac version is based on the Jaguar version and has sprites from that version. There is an editor that is freeware now called wolfedit.

Fire-WSP

Quote from: DarkSamus993 on April 07, 2018, 06:32:10 PM
If there is not enough room in VRAM to have all the faces loaded at once, then what would have to be done is load them dynamically either from ROM or RAM (in other words, they'd have to be swapped into VRAM as needed). Since the game expects the face graphics to already be loaded, the routine for switching faces would have to be modified to also upload new data to VRAM. It should technically be possible, it just means more time spent disassembling the old routines and coding new ones. I'm willing to look into it though.

Dynamic loading, nice. It would make sense.
I mean, we have the material for a few more face expressions, and they are in the same style as the ones on the SNES.
Also that Zombi face when hit by Schabbs is cool i think and it also make sense. That is something I would put in the pure uncut.
He uses needles as a weapon. Since needles are also used for using drugs, it could have been cut by Nintendo guidlines.
Also the game has a button combo to use the god mode. There is also a face for that.
Could be a fun thing.

Regarding he 64x64 wall textures, I was playing the first level a bit yesterday and watched the soldiers a bit. This sprites are also 64x64 but the still look quite rough compared to the pc version. I think that could be because the SNES mode7 is quite rough and the snes resolution for this game is very low. I think the 64x64 textures will give us more deatil but still will look quite blocky. Maybe the Cartridge costs outwighted the a bit better looking textures, if it is not a performance thing afterall. But the cool thing is, it seems we are abaout to find out  :thumbsup:




Squall_FF8

Hi guys!
I was away last couple of days because it was the Easter season and we had long holiday :)
I'm glad things are going well and there are plenty of artist willing to help!

Quote from: DarkSamus993 on April 07, 2018, 06:32:10 PM
Small update: I pretty much understand how the old sprite routine operates now. I just need to finish
It is interesting to me how you handle the transparency. With 'compressed' Sprites the transparency was side effect. Now you will have to dedicate a color that will be considered a transparent. SNES hardware uses color 0 for that, but PC extraction tool uses color 255
Welcome to the FF5 Den: https://discord.gg/AUqDF85

DarkSamus993

Quote from: Squall_FF8 on April 10, 2018, 03:50:48 AM
It is interesting to me how you handle the transparency. With 'compressed' Sprites the transparency was side effect. Now you will have to dedicate a color that will be considered a transparent. SNES hardware uses color 0 for that, but PC extraction tool uses color 255
There are 85 different write subroutines that are used to scale the sprites (yes, that's really how they programmed it). They tell the game how many times to print the same pixel and then the main routine checks to see if it needs to print the same column of pixels again, which results in all the different sprite sizes.

Here's one example:

Scale_71:
    lda $0013,y
    jsr WritePixel_02
    lda $0014,y
    jsr WritePixel_03
    lda $0015,y
    jsr WritePixel_03
    lda $0016,y
    jsr WritePixel_03
    lda $0017,y
    jsr WritePixel_04
    lda $0018,y
    jsr WritePixel_03
    lda $0019,y
    jsr WritePixel_03
    lda $001A,y
    jsr WritePixel_03
    lda $001B,y
    jsr WritePixel_03
    lda $001C,y
    jsr WritePixel_03
    lda $001D,y
    jsr WritePixel_04
    lda $001E,y
    jsr WritePixel_03
    lda $001F,y
    jsr WritePixel_03
    lda $0020,y
    jsr WritePixel_03
    lda $0021,y
    jsr WritePixel_03
    lda $0022,y
    jsr WritePixel_04
    lda $0023,y
    jsr WritePixel_03
    lda $0024,y
    jsr WritePixel_03
    lda $0025,y
    jsr WritePixel_03
    lda $0026,y
    jsr WritePixel_03
    lda $0027,y
    jsr WritePixel_03
    lda $0028,y
    jsr WritePixel_04
    lda $0029,y
    jsr WritePixel_03
    lda $002A,y
    jsr WritePixel_03
    lda $002B,y
    jsr WritePixel_03
    lda $002C,y
    jsr WritePixel_02
    rts

The game used to store pixels directly since it didn't need to handle transparency (it just fetched the correct coordinates), so I made 4 subroutines to handle the writes so transparency can be checked for.

They use very simple logic: if opaque write to frame buffer; if transparent don't write to frame buffer and increase the write address. $2180 = WRAM Data Register, $2181 = WRAM Address Register.

WritePixel_01:
cmp $FF
beq .Transparent
.Opaque:
sta $80
rts
.Transparent:
inc $81
rts


WritePixel_02:
cmp $FF
beq .Transparent
.Opaque:
sta $80
sta $80
rts
.Transparent:
inc $81
inc $81
rts


WritePixel_03:
cmp $FF
beq .Transparent
.Opaque:
sta $80
sta $80
sta $80
rts
.Transparent:
inc $81
inc $81
inc $81
rts


WritePixel_04:
cmp $FF
beq .Transparent
.Opaque:
sta $80
sta $80
sta $80
sta $80
rts
.Transparent:
inc $81
inc $81
inc $81
inc $81
rts


Now I just need to finish coding the main routine which tells the game which graphics and scaling code to use. It's coming along nicely, I might even be able to finish it today. There's still pointers to update and bug testing to do, but maybe I'll have something to release soon.

Fire-WSP


Squall_FF8

cmp $FF
OK so 255 is the transparent color, as it was in the export.
At first I wondered why you need "inc $81", but then I remembered - it is Mode 7 :)

QuoteThere are 85 different write subroutines that are used to scale the sprites (yes, that's really how they programmed it).
Only 85?  :laugh:
But seriously, that is for sure the biggest 'loop enrolling' that I have ever seen used. Respect for Wolf3d developers! :thumbsup:
Welcome to the FF5 Den: https://discord.gg/AUqDF85