News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Gideon Zhi

Pages: [1] 2 3
Help Wanted Ads / [Art] [Title Screen] [SNES] SRW Logo Help
« on: October 16, 2018, 12:46:41 am »
Hey everyone, I'm looking for some help adapting the latest official Super Robot Wars logo for use in the SNES primary canon titles, starting with EX, then 3, then 4.

Here's the original SRW EX title screen:

Here's what I've managed to hack together with some Paint Shop Pro filtering and waifu2x de-noise. It's okay, but I'd really prefer something with clean lines and that blue bevel effect applied.

And here are the original tiles, with the necessary palette applied.

I've decompressed the data and can freely edit the image in-game. We're a bit more than halfway through editing the main script, and just about all the remaining technical issues have been solved. The title screen is one of the final touches that needs to be put on the project.

Hi everyone,

I'm hoping for a hand with the Super Robot Wars Gaiden ~ Masoukishin The Lord of Elemental music persistence hack. For an idea of what I'm trying to accomplish, here's the same hack implemented in SRW2: I've been working on this for at least a week and I've made a lot of progress, but I'm sort of stuck.

Generally, the flow looks like this:
Map view, map music playing -> Combat scene initiated: character theme loads -> Combat scene ends, map music restarts [-> Character gains a level, level jingle plays, map music restarts again]

There are three scenarios which need patching:
1) The basic scenario, where the music needs to stay playing after a battle sequence ends. I've hacked this already.
2) A more complicated scenario, where the theme is already playing after #1 and needs to continue to play when the next scene starts (either two characters have the same theme, or it's the enemy turn and a character's been attacked twice in a row)
3) The third scenario is restarting the character theme after the level-up jingle plays.

#1 involved two things: preventing the current theme from stopping, and preventing the map theme from starting. I've accomplished this, but I've been banging my head against #2 for a while now. Hoping to get a fresh pair of eyes on the issue.

I've determined that code 1A is a parameterized music changer, and I *think* 27 is a parameterized wait command. (Feel free to challenging this assumption.)
Special parameters I've identified for 1A:
F4 plays the appropriate character theme
F8/F9 seem to be "stop current track." This is another assumption I'd be fine seeing challenged.

Some further points:
* The game's main instruction loop happens at $00/F10B.
* There's a jump table for each instruction at $00/F558. Each entry is 32 bits; the first 24 are an address, and I think the last 8 are how many parameters it takes.
* Current command gets written to $B6. Parameter(s) get(s) written to $B8+.
* Music load (1A) code is at $01/B90A.
* Wait(?) (27) code is at $01/BAE0.

To accomplish #1 (to help test #2), make the following changes:
Code: [Select]
;eliminate silence track from post-combat music load
org $ECF03B:
  ;db $1A,$F8
  db $27,$00
;elimiate map theme load from post-combat music load
org $ECE852:
  ;db $1A,$FC
  db $27,$00

(Before I go any further with this, note that the game mixes lorom and hirom addressing in execution; all the addresses I'm using in org commands are hirom but map correctly in lorom.)

The approach I've taken is as follows:
--When combat starts, write the current character theme to unused memory.
--When combat next starts and the game goes to stop the currently-playing theme, check next character theme against above-written track. If they're equal, do a <wait 0> (27 00) instead.
--When a track is queued to start, check it against currently playing track. If they're equivalent, do a <wait 0> instead.

There's a 1AF9 at hirom EC:EFE2 that I THOUGHT was the command to stop whatever music is playing on the map screen whenever a combat sequence begins, but overwriting it with 2700 causes incredible slowdown in the oncoming fade-out animation. 2701 does basically nothing; the music stops anyway. If I replace it with another music command (say, F191 to play one of the character themes) the music STILL stops but the specified theme plays for a very brief split second before itself stopping. This is where I'm stuck. If I can get the currently-playing music to not stop consistently before the character theme is scheduled to start playing, I'm pretty sure I'll be in a good position to handle the rest of the work.

In summary:
Does 1AF9 in fact stop whatever music is currently playing?
Does anything *else* stop whatever music is currently playing?
Does 27xx behave as a <wait xx> command, or do I have that wrong?

I think I've included enough info in this post; if I'm missing anything please let me know. Thanks, and thanks in advance for any aid!

ROM Hacking Discussion / Amiga graphics formats?
« on: May 26, 2016, 05:42:34 am »
Hi everyone,

I'm trying to pull some data out of an Amiga game (specifically, Where In Time Is Carmen Sandiego?.) The data on most platforms appears to be compressed in some fashion (I've checked the NES, SNES, and DOS versions of the game) but pretty much all of the text, at least, is right out in the open in the Amiga version. There's a TimeGraphics.Rsrc file on disk 2 that I'd love to have a poke through, but I don't know the first thing about Amiga graphics. It does seem to be an archive of multiple files (because of course it is) but other than figuring out where each file starts and ends I'm really not sure where to start. Anyone have any input?

For the record, this is intended for an open-source rewrite of Where In Time's engine for Android, which I'm doing as a personal pet project to keep my high-level skills sharp.

Script Help and Language Discussion / Translation checks
« on: February 28, 2016, 11:33:53 am »
This is a Baby Baron monster that's blocking the entrance to a hedge maze.
//<Speaker>「ちょっきん ちょきちょき<line>
//ちょっきん ちょきちょき<end>
<Speaker>!: SFX1 - check on screen.<end>

Have not encountered this.
//<Speaker>「べろべろ ばあ けけけけ<line>
//あばばばあ うけけけっ<end>
<Speaker>!: SFX2 - check on screen.<end>

Not sure what's going on with this one. There doesn't seem to be anything in the text that might be a follow-up. I've had full health when I've talked to the guy, and at this point in the game you don't have any party members that use SP (which, I'm assuming, is the game's equivalent of MP.)
//<Speaker>「いいことを おしえてやろう!<line>
//とにかく 体力だ!<line>
//体力を まんたんにしとけ!<end>
*: I'll teach you something nice!<line>
But first, stamina!<line>
Replenish your stamina!<end>

にんぎょのまもり - Doll Charm
せんしゅぞう - Figurehead
ジグルト - "Jigult" (pretty sure this is wrong); it's a psychic ability, flanked by Longinus and Elixir.



What I'm interested in are the following two strings. They appear when you pick the second option on the left and the third option on the right, respectively. I'm also interested in what the second option on the is.

Second from left gives:

Third on right gives:

Thanks in advance!

Script Help and Language Discussion / SMT if... Sprite Text
« on: May 27, 2015, 03:58:39 pm »
So this happens when you get knocked out in combat for the first time. You get this guardian spirit thing (I have to doublecheck on the exact terminology) which behaves similarly to a Persona in the eponymous series, but the only way to change it afaik is to get yourself killed again. Here's the message that displays the first time (and only the first time, I think):

Screenshots because the text is sprites and all you'd get from RAM is a graphic dump, which might as well be a screenshot.




ROM Hacking Discussion / Open call for bugs.
« on: May 08, 2015, 11:37:13 pm »
Hey folks, I'm in the process of loading up my bug tracker with all manner of tasks, current and future. This includes bugs in past projects that have gone unresolved. So far I've logged a bug for Ys V and a bug for Rudra, and I'm aware of (and have fixed nearly all of, privately) SMT1's issues. I have some tasks logged for current projects, which I'm using to help keep me on track, and some bugs logged for Dark Half which is undergoing testing. But I know there are more out there. A handful of fixes that need to be made to Rockman & Forte, for instance - but I don't have an immediate handy record of which ones.

So, this is an open call. Anyone have an issue they'd like to report? Screenshots and savestates are handy - I can attach them to my bugtracker - but if you do submit a save be sure to specify what emulator it's for!



Script Help and Language Discussion / Untranslated SMT if... Bits
« on: October 16, 2014, 02:27:16 am »
言ってるのが わからないの!<line>
早く 出ておいき!<pause><clear>
アキラ:どうした <demon1>?<hold><hold><line>
やはり様子が おかしい……<pause><clear>
どうしても 出ていかないのね……<hold><hold><line>
だったら こうしてやるから<end>




Plus "another terrible untranslatable pun" according to Ian. Anyone want to take a crack at it? :)
すもうぶに いれてもらったよ<line>
うれしいな ヒーホー!<pause><clear>
ただしい こーこーせーは<line>
ぶかつどー しないといけないんだろ<line>
ヒーホー でも すもうってなに?<pause><end>

The credits are also unfortunately completely untranslated, but those will go in a different post.

Combo hints:
りゅうしと ガンマ―の がったいは
きゅうきょくの コロナのほのおを

はくねつと ちょうでんの がったいは
かでんしの エネルギ―を

コロイドと クりスタルの がったいは
ぜったい0どの エネルギ―を

Related strings:
かがくいいんかい ト―ゴかいちょうだ
ここには きょうりょくな ぶきがある
バイオぐんとたたかう ゆうきのあるものは
サテライトべ―スまで きてくれ

サテライトべ―スからきた エンジニア?
ああ モりタさんと マツシタさんのことか
けんきゅうじょなら そこだぜ

かがくいいんかい ト―ゴかいちょうだ
ファクトり―では ついに
ぶきがったいで ランク6の ぶきを
つくるシステムを かんせいさせた


Script Help and Language Discussion / A few strings
« on: September 12, 2014, 12:46:52 am »
A couple of strings:

Context: You've just been told by a medical specialist to lie down to be worked on/healed/fixed/etc. I have this translated as "Here we go!" for now.



ドアロックの かいじょは
システムセンタ―810の たんまつで


Script Help and Language Discussion / Kanji ID
« on: August 25, 2014, 02:07:52 am »
It's a bit much (612 by my count, not including regular kana) but necessary. Thanks in advance!

Gaming Discussion / So Shovel Knight is out!
« on: June 27, 2014, 02:25:27 pm »
I've played the first stage, and it's pretty fun. But I'm perhaps most impressed by the music, which not only sounds like authentic NES music but IS actual authentic NES music. Virt's made an NSF of the soundtrack available.

I'll have more impressions of the game when I have more time to sink into it, but for now, do listen to that glorious 2a03 music.

Programming / Soul Blazer input lag
« on: June 20, 2014, 04:35:13 pm »
Hi guys, I had a few minutes during lunch today and I figured I'd look into why Soul Blazer has some very noticeable input lag. It's especially noticeable if you try to use the sword strafe while also walking (L/R) and infects just about all aspects of the game's control. Brief examination of the game's code yielded this as being unique to the sword strafe on L:

Code: [Select]
$00/9D7C: 20 9D 9F     JSR $9F9D [$00:9F9D]      A:0002 X:0800 Y:0800 D:0000 DB:01 S:1FF1 P:envmxdIzc HC:138 VC:253
$00/9D7F: 02 80        COP #$80                  A:0000 X:0800 Y:0A00 D:0000 DB:01 S:1FF1 P:envmxdIZc HC:876 VC:253
$00/9D82: 02 82        COP #$82                  A:9D82 X:0800 Y:0800 D:0000 DB:01 S:1FF1 P:envmxdIZc HC:696 VC:254

A quick glance at 65816info.txt yields COP as "Coprocessor Empowerement." Loads a hardware vector from the cart header. Wait, what? Soul Blazer doesn't have any extra hardware - no DSP or SA-1 or anything like that. What the hell is going on here?

ROM Hacking Discussion / Constructing a TIM/TIM2/GIM file header
« on: May 27, 2014, 03:18:31 am »
Hey all, I'm posting this right now because it's after midnight, I'm tired, and I've already put in a healthy amount of work locating the data in question... so.

I'm taking apart a PSP game at the moment. I've found the font, but the problem is that it (and its accompanying CLUT) are stored raw, with no header data. Here's the load information from ppsspp:

b8000909: Texture size 0: 000909, width : 512, height : 512
cb000000: TexFlush
c2000001: TexMode 000001 (swizzle, 0 levels, shared clut)
c3000004: TexFormat 000004 (CLUT4)
cb000000: TexFlush
c5000f03: Clut format: 000f03 (ABGR 8888)
b1080000: CLUT addr upper 00080000
b0e293c0: CLUT base addr: e293c0
c4000002: Clut load: 000002

Can anyone help construct a header for this thing so I can actually look at the font, get the kanji identified, and start extracting the script? I'd appreciate it!

Gaming Discussion / Re: Victoly!
« on: February 11, 2014, 01:47:27 pm »
I got 100% in LEGO Marvel the other night. It was fun, and funny, and charming, but the open-world stuff got old and by the end I didn't really feel like running the stages again in freeplay for the last collectibles. In other words, it's a LEGO game. Solid though.

Although I have to admit that while the character flourishes in combat were neat to watch (like Spiderman wrapping up a foe in webs, or Wolverine doing flips) it slowed things down quite a bit. This wasn't a good thing.

Edit: Beat Ballpoint Universe last night. Tip for anyone playing with a gamepad: find the sensitivity slider in the pause menu and turn it all the way down! Game's much more playable with it like that. The shmup stages were generally fun and the enemy designs interesting, though towards the end there were a few too many enemies that just tried to ram the player. Upgrades also cost way too much; I'd unlocked maybe a quarter of them (and mostly the cheaper ones) by the time I'd finished, and feel no desire to go back and collect more. And good lord but the platforming is awful.

Programming / 8 vs 16 bit addition in z80
« on: December 02, 2013, 10:30:01 pm »
So I'm hacking on Royal Stone's new/load/etc menu, and I'm getting screwed by an 8-bit adder.

Code: [Select]
6926  3E LD A, 40h                                 AF:0000 BC:0202 DE:3BD0 HL:C7E3 IX:CAE5 IY:C7B2 SP:C744 Cy:35517106   
6928  83 ADD A, E                                  AF:4000 BC:0202 DE:3BD0 HL:C7E3 IX:CAE5 IY:C7B2 SP:C744 Cy:35517113   
6929  5F LD E, A                                   AF:1001 BC:0202 DE:3BD0 HL:C7E3 IX:CAE5 IY:C7B2 SP:C744 Cy:35517117   
692A  E7 RST $20                                   AF:1001 BC:0202 DE:3B10 HL:C7E3 IX:CAE5 IY:C7B2 SP:C744 Cy:35517121   

DE contains a VRAM address, and 3BD0+40 is obviously not 3B10. Is there an elegant way to fix this? And a reasonably good assembler, while I'm at it? I've never done any actual z80 outside of a hex editor before.

Programming / SNES architecture quirk?
« on: October 24, 2013, 04:45:23 am »
So one of the games I'm working on has compressed code, which is unpacked and executed from RAM. Most of this is text pointers, but I've uncovered a much more complex bit of code that needs some major retooling - in this case, tilemapping code. Rather than have to rebuild the compressed binary into the game every time I change the code, stuck the code at DBFA00 (lorom addr) in the game binary, and a JML $DBFA00 in the compressed binary. The JML gets loaded into RAM at $7E8D4C.

The issue is that while the code works in SNES9X, it's crashing the game in ZSNES and I don't have immediate access to that area of the game in BSNES.

Here's the code I wrote, with the original code commented out above it. Note that if I remove the comments at the top of the file, essentially replicating the original functionality just with the JML hooks, the code STILL crashes ZSNES, so it's not necessarily any of my actual code. My guess is that it's an architecture quirk with JMLs out of and back into RAM.

(Just as a bit of background, the text was originally 16-bit. My version is 8-bit with DTE support at A>=0x50. The adjustments to the tilemapping reflect that.)

Code: [Select]
;$7E/8D4C: B7 A0        LDA [$A0],Y [$7E:7A86]    A:75BE X:004B Y:0006 D:0200 DB:00 S:01FA P:envMXdizc HC:776 VC:239
;$7E/8D4E: C9 20        CMP #$20                  A:755D X:004B Y:0006 D:0200 DB:00 S:01FA P:envMXdizc HC:864 VC:239
;$7E/8D50: F0 31        BEQ $31 [$8D83]           A:755D X:004B Y:0006 D:0200 DB:00 S:01FA P:envMXdizC HC:920 VC:239
;$7E/8D52: 5A           PHY                       A:755D X:004B Y:0006 D:0200 DB:00 S:01FA P:envMXdizC HC:976 VC:239
;$7E/8D53: AD F2 0F     LDA $0FF2 [$00:0FF2]      A:755D X:004B Y:0006 D:0200 DB:00 S:01F9 P:envMXdizC HC:1038 VC:239
;$7E/8D56: EB           XBA                       A:7521 X:004B Y:0006 D:0200 DB:00 S:01F9 P:envMXdizC HC:1110 VC:239
;$7E/8D57: AD F9 0F     LDA $0FF9 [$00:0FF9]      A:2175 X:004B Y:0006 D:0200 DB:00 S:01F9 P:envMXdizC HC:1170 VC:239
;$7E/8D5A: C2 20        REP #$20                  A:2100 X:004B Y:0006 D:0200 DB:00 S:01F9 P:envMXdiZC HC:1242 VC:239
;$7E/8D5C: 87 3D        STA [$3D] [$7F:75BE]      A:2100 X:004B Y:0006 D:0200 DB:00 S:01F9 P:envmXdiZC HC:1328 VC:239
;$7E/8D5E: 1A           INC A                     A:2100 X:004B Y:0006 D:0200 DB:00 S:01F9 P:envmXdiZC HC:056 VC:240
;$7E/8D5F: A0 02        LDY #$02                  A:2101 X:004B Y:0006 D:0200 DB:00 S:01F9 P:envmXdizC HC:110 VC:240
;$7E/8D61: 97 3D        STA [$3D],Y [$7F:75C0]    A:2101 X:004B Y:0002 D:0200 DB:00 S:01F9 P:envmXdizC HC:190 VC:240
;$7E/8D63: 1A           INC A                     A:2101 X:004B Y:0002 D:0200 DB:00 S:01F9 P:envmXdizC HC:286 VC:240
;$7E/8D64: A0 40        LDY #$40                  A:2102 X:004B Y:0002 D:0200 DB:00 S:01F9 P:envmXdizC HC:340 VC:240
;$7E/8D66: 97 3D        STA [$3D],Y [$7F:75FE]    A:2102 X:004B Y:0040 D:0200 DB:00 S:01F9 P:envmXdizC HC:420 VC:240
;$7E/8D68: 1A           INC A                     A:2102 X:004B Y:0040 D:0200 DB:00 S:01F9 P:envmXdizC HC:516 VC:240
;$7E/8D69: A0 42        LDY #$42                  A:2103 X:004B Y:0040 D:0200 DB:00 S:01F9 P:envmXdizC HC:570 VC:240
;$7E/8D6B: 97 3D        STA [$3D],Y [$7F:7600]    A:2103 X:004B Y:0042 D:0200 DB:00 S:01F9 P:envmXdizC HC:650 VC:240
;$7E/8D6D: E2 20        SEP #$20                  A:2103 X:004B Y:0042 D:0200 DB:00 S:01F9 P:envmXdizC HC:746 VC:240
;$7E/8D6F: 1A           INC A                     A:2103 X:004B Y:0042 D:0200 DB:00 S:01F9 P:envMXdizC HC:808 VC:240
;$7E/8D70: 8D F9 0F     STA $0FF9 [$00:0FF9]      A:2104 X:004B Y:0042 D:0200 DB:00 S:01F9 P:envMXdizC HC:862 VC:240
;$7E/8D73: A5 3D        LDA $3D [$00:023D]        A:2104 X:004B Y:0042 D:0200 DB:00 S:01F9 P:envMXdizC HC:934 VC:240
;$7E/8D75: 18           CLC                       A:21BE X:004B Y:0042 D:0200 DB:00 S:01F9 P:eNvMXdizC HC:998 VC:240
;$7E/8D76: 69 04        ADC #$04                  A:21BE X:004B Y:0042 D:0200 DB:00 S:01F9 P:eNvMXdizc HC:1052 VC:240
;$7E/8D78: 90 02        BCC $02 [$8D7C]           A:21C2 X:004B Y:0042 D:0200 DB:00 S:01F9 P:eNvMXdizc HC:1108 VC:240
;$7E/8D7A: E6 3E        INC $3E [$00:023E]        A:2100 X:003F Y:0042 D:0200 DB:00 S:01F9 P:envMXdiZC HC:940 VC:244
;$7E/8D7C: 85 3D        STA $3D [$00:023D]        A:21C2 X:004B Y:0042 D:0200 DB:00 S:01F9 P:eNvMXdizc HC:1170 VC:240
;$7E/8D7E: 7A           PLY                       A:21C2 X:004B Y:0042 D:0200 DB:00 S:01F9 P:eNvMXdizc HC:1234 VC:240
;$7E/8D7F: C8           INY                       A:21C2 X:004B Y:0006 D:0200 DB:00 S:01FA P:envMXdizc HC:1302 VC:240
;$7E/8D80: C8           INY                       A:21C2 X:004B Y:0007 D:0200 DB:00 S:01FA P:envMXdizc HC:1356 VC:240
;$7E/8D81: 80 C9        BRA $C9 [$8D4C]           A:21C2 X:004B Y:0008 D:0200 DB:00 S:01FA P:envMXdizc HC:042 VC:241

org $DBFA00
  ;LDA [$A0],Y
  ;CMP #$20
  ;JMP $7E8D50

  LDA [$A0],Y
  CMP #$50
  BCS TilemapDTE
  CMP #$20
  BNE TilemapRegular
  BRL Exit
  LDA $0FF2
  LDA $0FF9
  REP #$20
  STA [$3D]
  LDY #$40
  STA [$3D],Y
  LDY #$02
  STA [$3D],Y
  LDY #$42
  STA [$3D],Y
  SEP #$20
  STA $0FF9
  LDA $3D
  ADC #$04
  BCC $02
  INC $3D
  STA $3D
  BRA RomAddr
  LDA $0FF2
  LDA $0FF9
  REP #$20
  STA [$3D]
  LDY #$40
  STA [$3D],Y
  SEP #$20
  STA $0FF9
  LDA $3D
  ADC #$02
  BCC $02
  INC $3D
  STA $3D
  BRA RomAddr

  JMP $7E8D83

Pages: [1] 2 3