Recent Posts

Pages: 1 ... 4 5 [6] 7 8 ... 10
51
Research & Development / Re: Viper GTS for GBA
« Last post by Moge on December 17, 2024, 01:32:57 pm »
For the GBA?! That's crazy :o

Impressive work either way.
52
Research & Development / Re: Viper GTS for GBA
« Last post by 黒い灯影 on December 16, 2024, 03:52:26 pm »
 :carreraface :carreraface :carreraface
That's amazing, great work!
53
Research & Development / Viper GTS for GBA
« Last post by akkera102 on December 16, 2024, 02:47:01 pm »
(I'm sorry I can't speak English, but I'm using Google Translate. Sorry if the sentences are strange.)

After about three months of development, I ported the Windows version of Viper GTS to GBA (GameBoy Advance). Game data is not included, and only the converter tool is distributed. A separate SGS.DAT file for GTS is required.
https://github.com/akkera102/gbadev-ja-test/tree/main/127_viper_gts_gba

The analysis data was based on the DecomposeSGS source code provided by Notequalsoft. Specifically, archive unpacking, image data, and audio data decoding. I was especially grateful for the command and parameter information for the script instructions. All the code is available on github. Please refer to it or play around with it if you like.

In terms of technology, the GBA is basically very slow. It can only have one screen buffer and cannot perform composition processing. GTS has 4 screen buffers, and for example, number 3 can display the window frame, number 0 can display a vertically long scrolling image, and numbers 1 and 2 can display images such as the mouth and arms. On the other hand, the GBA cannot do this, and as I said before, it only has one screen.

What I do is to use Python to composite all the images into a single image. Naturally, the capacity increases significantly, but that can't be helped. Basically, a single image is displayed at high speed, and then images of parts such as the mouth and arms are overwritten and displayed.

In the scene where Carrera* looks up at the appearance of the angel, composite and scrolling are performed, but since this is not possible, a single image is displayed as a simple scrolling image.

This project was only possible with the help of Notequalsoft and JG, the forum administrator. Thank you very much.


* EDIT: Changed "Carla" to "Carrera" to remove confusion between VIPER-GTS and VIPER-RSR.
54
Research & Development / Re: Something on my free time
« Last post by 黒い灯影 on December 09, 2024, 01:04:56 pm »
im gonna use chapter 5 for reference, when you control Elan for the rest of the game.

Code: (EV05.WIN - this code runs after the opening dialogue.. and loads you into the town map) [Select]

@JUMP061
0x22D9: 0x34_OP WRITE_TO_MEM(17,5)
0x22DD: 0x03_OP LOAD_ANM(0,"ANM\505")
0x22E7: 0x07_OP LOAD_PALETTE_FROM_ANM(0)
0x22E9: 0x10_OP CLEAR_SCROLL_PROPERTIES(1)
0x22EB: 0x12_OP SET_BASIC_SCROLL_PROPERTIES(0,20,1,0,0)
0x22F3: 0x34_OP WRITE_TO_MEM(250,11)
0x22F7: 0x25_OP GO_SUB_JUMP(@JUMP131)
0x22FA: 0x4E_OP ENABLE_BUFFER_PROPERTIES_SYNC()
0x22FB: 0x0A_OP SET_BUFFER_PROPERTIES(0,0,0,0,128,1,0,[{1:3}{1:3}{1:3}{1:3}{1:3}])
0x2310: 0x0A_OP SET_BUFFER_PROPERTIES(1,0,0,2,128,0,12,[{1:3}{2:3}{3:3}{4:3}{5:3}])
0x2325: 0x4D_OP DISABLE_BUFFER_PROPERTIES_SYNC()
0x2326: 0x05_OP FADE_IN_VIEWPORT_GRAYSCALE(0,1)
0x232A: 0x0C_OP UPDATE_BUFFER_PROPERTY_0C(0)
0x232C: 0x0A_OP SET_BUFFER_PROPERTIES(0,0,0,2,128,0,12,[{17:3}{18:2}{19:2}{16:3}{17:3}{18:2}{19:2}{16:10}])
0x2347: 0x0C_OP UPDATE_BUFFER_PROPERTY_0C(0)
0x2349: 0x4E_OP ENABLE_BUFFER_PROPERTIES_SYNC()
0x234A: 0x0A_OP SET_BUFFER_PROPERTIES(0,0,0,0,128,1,0,[{1:3}{1:3}{1:3}{1:3}{1:3}{1:3}{1:3}{1:3}{1:3}{1:3}{1:3}])
0x236B: 0x0A_OP SET_BUFFER_PROPERTIES(1,0,0,2,128,0,12,[{6:3}{7:3}{8:3}{9:3}{10:3}{11:3}{12:3}{13:3}{14:3}{15:3}])
0x238A: 0x4D_OP DISABLE_BUFFER_PROPERTIES_SYNC()
0x238B: 0x0C_OP UPDATE_BUFFER_PROPERTY_0C(0)
0x238D: 0x5E_OP FADE_OUT_MIDI(12)
0x2390: 0x06_OP FADE_OUT_VIEWPORT_GRAYSCALE(0,12)
0x2394: 0x25_OP GO_SUB_JUMP(@JUMP162)
0x2397: 0x0D_OP RESET_EACH_ANM_PROPERTY()
0x2398: 0x34_OP WRITE_TO_MEM(17,1)
0x239C: 0x34_OP WRITE_TO_MEM(18,1)
0x23A0: 0x34_OP WRITE_TO_MEM(20,0)
0x23A4: 0x34_OP WRITE_TO_MEM(24,736)  <---  sets x and y position upon loading map (i forget which is which)
0x23A8: 0x34_OP WRITE_TO_MEM(25,1360) <---  sets x and y position upon loading map
0x23AC: 0x34_OP WRITE_TO_MEM(26,10)
0x23B0: 0x34_OP WRITE_TO_MEM(27,2)
0x23B4: 0x34_OP WRITE_TO_MEM(28,0)
0x23B8: 0x34_OP WRITE_TO_MEM(29,1)
0x23BC: 0x34_OP WRITE_TO_MEM(30,0)
0x23C0: 0x34_OP WRITE_TO_MEM(31,0)
0x23C4: 0x34_OP WRITE_TO_MEM(32,1)
0x23C8: 0x34_OP WRITE_TO_MEM(33,12)
0x23CC: 0x34_OP WRITE_TO_MEM(34,0)
0x23D0: 0x34_OP WRITE_TO_MEM(35,0)
0x23D4: 0x34_OP WRITE_TO_MEM(38,0)
0x23D8: 0x34_OP WRITE_TO_MEM(50,1)
0x23DC: 0x34_OP WRITE_TO_MEM(60,2)
0x23E0: 0x34_OP WRITE_TO_MEM(70,0)
0x23E4: 0x34_OP WRITE_TO_MEM(80,0)
0x23E8: 0x34_OP WRITE_TO_MEM(47,0)
0x23EC: 0x34_OP WRITE_TO_MEM(49,0)
0x23F0: 0x58_OP COPY_REG_TO_FROM(53,100)   <--  copy from Register 100 to 53,  the game saves Elan's level to Reg100 before controlling Alfa or Cala.
0x23F3: 0x34_OP WRITE_TO_MEM(63,4)
0x23F7: 0x34_OP WRITE_TO_MEM(73,0)
0x23FB: 0x34_OP WRITE_TO_MEM(83,0)
0x23FF: 0x4A_OP LOAD_WIN("MAP5")

There is no other reference to Register 53, in the EV05.WIN script,
MAP05.WIN has no reference to 53 (level), or 48 (battle count)

Here's the game's op codes if you want to go through them, work out the logic.
BATTLE5.WIN
EV05.WIN
MAP5.WIN

55
Research & Development / Re: Something on my free time
« Last post by Rai on December 09, 2024, 02:18:22 am »
Maybe that's what my note about missing levels meant, though I can't imagine I ever thought someone would actually grind to 580 battles in chapter 1. I sort of remember testing out the theory by getting the battle counter past 40 early and seeing if the next levelup in a later chapter put Elan at Level 4 or 5. It was long enough ago that I'm not sure what the actual result was.

Though my notes also say that setting the battle counter back to, say, 19, and getting into one more battle repeatedly would continue to raise Elan's level, so I would think that means it's just incrementing the level whenever a levelup is set to occur and not tying the battle counter value to a specific level. Or does it just do that between chapters? I also have a note that says "the game resets the level to where it's supposed to be" sometimes, but can't recall the details of that statement.
56
Research & Development / Re: Something on my free time
« Last post by 黒い灯影 on December 07, 2024, 08:02:41 pm »
i think when you miss levels, it sets you to the next tier, because the battle script just check how many battles you'd had, and if it reaches one of the numbers on the chart, it sets it to that level.


Code: (BattleCount check) [Select]
@JUMP014
0x01A9: 0x0D_OP RESET_EACH_ANM_PROPERTY()
0x01AA: 0x04_OP UNLOAD_ANM(0)
0x01AC: 0x04_OP UNLOAD_ANM(1)
0x01AE: 0x04_OP UNLOAD_ANM(2)
0x01B0: 0x04_OP UNLOAD_ANM(3)
0x01B2: 0x04_OP UNLOAD_ANM(4)
0x01B4: 0x04_OP UNLOAD_ANM(5)
0x01B6: 0x04_OP UNLOAD_ANM(6)
0x01B8: 0x04_OP UNLOAD_ANM(7)
0x01BA: 0x1F_OP STOP_PCM_ON_NEXT_REFRESH()
0x01BB: 0x32_OP READ_REGISTER(50)
0x01BD: 0x33_OP JUMP_IF_LAST_READ_NOT_EQUAL(1,@JUMP022)
0x01C2: 0x35_OP INC_REGISTER(48)              <--- Increase Battle count
0x01C4: 0x32_OP READ_REGISTER(48)            <--- Then read battle count
0x01C6: 0x33_OP JUMP_IF_LAST_READ_NOT_EQUAL(20,@JUMP015)   <-- jump, if not equals 20
0x01CB: 0x25_OP GO_SUB_JUMP(@JUMP567)   <-- only goes here if battle count==20
0x01CE: 0x34_OP WRITE_TO_MEM(53,3)            <--- write 3 to level register
0x01D2: 0x14_OP JUMP_TO(@JUMP022)
 @JUMP015
0x01D5: 0x33_OP JUMP_IF_LAST_READ_NOT_EQUAL(40,@JUMP016)
0x01DA: 0x25_OP GO_SUB_JUMP(@JUMP567)
0x01DD: 0x34_OP WRITE_TO_MEM(53,4)
0x01E1: 0x14_OP JUMP_TO(@JUMP022)
 @JUMP016
0x01E4: 0x33_OP JUMP_IF_LAST_READ_NOT_EQUAL(80,@JUMP017)
0x01E9: 0x25_OP GO_SUB_JUMP(@JUMP567)
0x01EC: 0x34_OP WRITE_TO_MEM(53,5)
0x01F0: 0x14_OP JUMP_TO(@JUMP022)
 @JUMP017
0x01F3: 0x33_OP JUMP_IF_LAST_READ_NOT_EQUAL(140,@JUMP018)
0x01F8: 0x25_OP GO_SUB_JUMP(@JUMP567)
0x01FB: 0x34_OP WRITE_TO_MEM(53,6)
0x01FF: 0x14_OP JUMP_TO(@JUMP022)
 @JUMP018
0x0202: 0x33_OP JUMP_IF_LAST_READ_NOT_EQUAL(220,@JUMP019)
0x0207: 0x25_OP GO_SUB_JUMP(@JUMP567)
0x020A: 0x34_OP WRITE_TO_MEM(53,7)
0x020E: 0x14_OP JUMP_TO(@JUMP022)
 @JUMP019
0x0211: 0x33_OP JUMP_IF_LAST_READ_NOT_EQUAL(320,@JUMP020)
0x0216: 0x25_OP GO_SUB_JUMP(@JUMP567)
0x0219: 0x34_OP WRITE_TO_MEM(53,8)
0x021D: 0x14_OP JUMP_TO(@JUMP022)
 @JUMP020
0x0220: 0x33_OP JUMP_IF_LAST_READ_NOT_EQUAL(440,@JUMP021)
0x0225: 0x25_OP GO_SUB_JUMP(@JUMP567)
0x0228: 0x34_OP WRITE_TO_MEM(53,9)
0x022C: 0x14_OP JUMP_TO(@JUMP022)
 @JUMP021
0x022F: 0x33_OP JUMP_IF_LAST_READ_NOT_EQUAL(580,@JUMP022)
0x0234: 0x25_OP GO_SUB_JUMP(@JUMP567)
0x0237: 0x34_OP WRITE_TO_MEM(53,10)

Code: (Level up animation) [Select]
@JUMP567
0x53D1: 0x03_OP LOAD_ANM(0,"ANM\LVUP")
0x53DC: 0x07_OP LOAD_PALETTE_FROM_ANM(0)
0x53DE: 0x0A_OP SET_BUFFER_PROPERTIES(0,0,0,0,128,0,0,[{1:1}])
0x53EB: 0x0C_OP UPDATE_BUFFER_PROPERTY_0C(0)
0x53ED: 0x1D_OP PLAY_PCM(0,"PCMSE\RSR202")
0x53FC: 0x05_OP FADE_IN_VIEWPORT_GRAYSCALE(255,12)
0x5400: 0x13_OP SLEEP_MILLISECONDS(200)
0x5403: 0x06_OP FADE_OUT_VIEWPORT_GRAYSCALE(255,12)
0x5407: 0x1F_OP STOP_PCM_ON_NEXT_REFRESH()
0x5408: 0x26_OP RETURN()

it specifically writes the level number when it reaches a certain threshold. with "WRITE_TO_MEM"

yeah, chapter 2 saves Elan's level elsewhere, Register 100, and then in Chapter 3, it moves it back from Register 100 to 53.
I can see you can screw yourself if you manage to rack up over 580 battles in ch 2 or ch 4, it will not trigger any of the WRITE_TO_MEM opcodes.
57
Research & Development / Re: Something on my free time
« Last post by Rai on December 07, 2024, 04:17:22 pm »
Yeah, I remember figuring out all those intricacies with the level system when messing around with save editing. It seems like for a minute they had something more ambitious in mind with the game design, enough to record voice lines for all those spells Alfa and Cala never get to learn normally. Even though Elan could get all the way up to Explosion, the grind to 580 is ridiculous. When I figured out how, I would just manipulate the battle counter and level indicators in the save registry to get everyone to max by the last chapter. Or ultimately I would just make all four character slots Lvl.10 Jota because without the voice lines, her attacks go so much faster than everyone else's.

Another quirk about the leveling I see in my old notes is that if you do intend to grind, make sure you wait until Chapter 3. Level 4 and onward is locked out in Chapter 1, but the battle counter keeps going, so it's possible to miss levels for Elan if you do 40 fights or more that early.
58
Research & Development / Re: Something on my free time
« Last post by 黒い灯影 on December 07, 2024, 01:07:30 pm »
Things i've learned since going through Viper RSR's scripts:
-The game starts you off at level 2...  even though there's resources that shows the menu at lv1.
-In chapter 2, the game sets Alfa's level to 3, but you can level up as normal.
-chapter 4, sets your level to level 4, but you can't level up. (so you never see all of Cala's moves set, even though there are resources for them, all the way to level 10, graphical and audio)
rest of game is normal, you can level up to level 10.
But to get to level 10, you have to complete 580 battles.  I made a chart for the level requirements.  i think 580 battles is really high for a game like this.
59
Tools / Re: Viper Games/SGS.DAT Tools
« Last post by JG on December 04, 2024, 11:10:42 am »
I'm not sure how to explain that, unless its a situation where width+horizontaloffset would exceed overall width.
if you can identify the cause and duplicate it enough to explain it to me, I can fix it.
60
Tools / Re: Viper Games/SGS.DAT Tools
« Last post by 黒い灯影 on December 03, 2024, 10:18:27 pm »
that's awesome,
i could probably just enter the offsets manually,
there seems to be an issue where some of the elements get a different offset, i dont know when exactly it happens,
but sometimes when im editing/inserting a frame, i'll have to narrow down when exactly it happens..
but sometimes the vertical offset goes from 109 to 162 (or something)
i have to manually fix it back to 109.
Pages: 1 ... 4 5 [6] 7 8 ... 10