Forums

Sega Master System / Mark III / Game Gear
SG-1000 / SC-3000 / SF-7000 / OMV
Home - Forums - Games - Scans - Maps - Cheats - Credits
Music - Videos - Development - Hacks - Translations - Homebrew

View topic - Few questions from a newbey / WingWarriors

Reply to topic Goto page 1, 2  Next
Author Message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Few questions from a newbey / WingWarriors
Post Posted: Mon May 02, 2016 6:56 am
Hi,

I'm new in Master System development. I have some experience in z80 assembly and I have done a MSX game, that I would like to port to Master System.

https://www.msx.org/es/news/challenges/es/msxdev15-wing-warriors

I have followed the Maxims tutorial and advance quite a bit. But now is pretty clear that my rom will take more than 48 Kb and the memory layout that you can find in the tutorial will not fit to my requirements.

.memorymap
defaultslot 0
slotsize $c000   ; $80000=512, $40000=256, $20000=128, $10000=64Kb, $c000=48Kb, $8000=32Kb, $4000=16Kb
slot 0 $0000
slotsize $2000
slot 1 $c000   ; The RAM is a single slot starting at $C000 and is $2000 bytes big
.endme

.rombankmap
bankstotal 1
banksize $c000
banks 1
.endro


I have searched a little bit on the net, how to do the bank switch, but I didn't find any tutorial or post that clarifies this. I don't understand very well the concepts "bank" and "section". Can anybody explain to me in a way that even a child could understand? How do you make a bank switch?

Also, when I compile with my current code I find some suspicius lines.

WingWarriors.asm: INTERNAL_PASS_2: Section "data_gfx_select_1" doesn't fit into the specified 1 bytes. Enlarging to 2652 bytes.
WingWarriors.asm: INTERNAL_PASS_2: Section "data_gfx_select_2" doesn't fit into the specified 2 bytes. Enlarging to 4750 bytes.
WingWarriors.asm: INTERNAL_PASS_2: Section "data_gfx_select_3" doesn't fit into the specified 3 bytes. Enlarging to 101 bytes.
WingWarriors.asm: INTERNAL_PASS_2: Section "data_gfx_stg_1" doesn't fit into the specified 1 bytes. Enlarging to 2686 bytes.
WingWarriors.asm: INTERNAL_PASS_2: Section "data_gfx_stg_2"

......
 
object.o: MEM_INSERT: Overwrite at $7ffa (old $3f new $55).
object.o: MEM_INSERT: Overwrite at $7ffb (old $15 new $d9).
object.o: MEM_INSERT: Overwrite at $7fff (old $08 new $4c).
Free space at $0064-$0065.
Free space at $7fdd-$7fdf.
Free space at $9845-$bfff.
Bank 00 has 10176 bytes (20.70%) free.
10176 unused bytes of total 49152.
Presione una tecla para continuar . . .


Everytime I got those MEM_INSERT something in my code is not working right. Why does that happens?

Find attached to this post the code in case you want to check.
Thank you in advance!
WingWarriors.asm (151.58 KB)

  View user's profile Send private message
  • Joined: 23 Mar 2013
  • Posts: 611
  • Location: Copenhagen, Denmark
Reply with quote
Post Posted: Mon May 02, 2016 7:18 am
Maybe sverx' post on banking and related issues can help? (http://www.smspower.org/forums/15794-AFewHintsOnCodingAMediumLargeSizedGameUsingWLADX).
  View user's profile Send private message Visit poster's website
  • Site Admin
  • Joined: 19 Oct 1999
  • Posts: 14685
  • Location: London
Reply with quote
Post Posted: Mon May 02, 2016 9:12 am
There's a standard mapper memory map bundled with WLA DX, you just pick the bank counts.

WLA DX assigns meaning to sections with _<number> at the end of the name, it's warning you that you're exceeding the number.

Memory overwriting is very bad, it suggests something has gone much more wrong but may be a side effect of the broken banking. If you have everything in sections then it shouldn't happen (you get "no room for section" instead).
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Mon May 02, 2016 8:30 pm
Than you hang-on & Maxim.

I have read the "AFewHints..." thread, but still there's something very elemental that I don't understand.

The .superfree and .free keywords. In witch context do they allocate in memory? In any part of the ROM memory? In bank that has been previously defined in the code?

I have changed the memory map to this...:
.memorymap
       defaultslot 0
       slotsize $4000
       slot 0 $0000        ; rom bank 0 (0-16 kb).
       slot 1 $4000        ; rom bank 1 (16-32 kb).
       slotsize $2000
       slot 2 $c000        ; ram.
.endme

.rombankmap
       bankstotal 3
       banksize $4000
       banks 3
.endro


...but now the graphics are corrupted. How do I control the bank that the graphics are allocated and how do I swich between those banks to load them correctly?
  View user's profile Send private message
  • Site Admin
  • Joined: 19 Oct 1999
  • Posts: 14685
  • Location: London
Reply with quote
Post Posted: Mon May 02, 2016 8:54 pm
You need a third slot at $8000. Free sections go anywhere in the current bank, so your bank directives are important. Superfree sections go anywhere they want, so you always need to page them in (:label) before accessing the data.

I'll take a closer look at your code tomorrow, I didn't get to a real computer yet...
  View user's profile Send private message Visit poster's website
  • Joined: 14 Apr 2013
  • Posts: 623
Reply with quote
Post Posted: Mon May 02, 2016 9:10 pm
Hi and welcome Fran Matsusaka,

Fran Matsusaka wrote
...but now the graphics are corrupted. How do I control the bank that the graphics are allocated and how do I swich between those banks to load them correctly?

you switch to a bank by writing to the mapper register corresponding to the slot you want your bank to be mapped into.

If you want to map your bank into slot 2 ($8000 - $bfff) you just write the desired bank number to $ffff. (As Maxim said you should additionally have slot 2 starting from $8000.)

If you know what bank you want to map in, e.g., bank 3 then you can just do
ld a, 3
ld ($ffff), a


If you don't know the bank or don't want to hardcode the bank you can also use a label to retrieve the bank it is stored in by doing the following:
ld a, :theLabel
ld ($ffff), a

The colon (:) prefixing theLabel tells the assembler to put the bank of the label here.

To provide more detailed help it'd be helpful to have a compiled binary to test.
  View user's profile Send private message Visit poster's website
  • Joined: 05 Sep 2013
  • Posts: 3758
  • Location: Stockholm, Sweden
Reply with quote
Post Posted: Tue May 03, 2016 7:58 am
Fran Matsusaka wrote
I have read the "AFewHints..." thread, but still there's something very elemental that I don't understand.


That thread assumes you already know what's paging and how it works, and develops from there. You're probably still learning what is paging and how to use it so you might be still too much a newbie for that topic, but you'll probably find it useful as soon as you learn how to page...

BTW the basic concept is that the Z80 processor 'sees' the memory addresses from $0000 to $bfff 'through' 3 'holes', called 'slots'. The first slot starts at $0000, the second at $4000 and the third at $8000, and they're all 16KB in size.

Your ROM instead is made up of 16KB chunks, called 'banks', numbered from 0 onward.

In the simpler approach you will map bank 0 onto slot 0, bank 1 onto slot 1 and all the other banks, when you need to access data into them, on slot 2. To select which bank got mapped into slot 2... well, Calindro is already explaining :)
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Tue May 03, 2016 7:24 pm
Calindro wrote
If you want to map your bank into slot 2 ($8000 - $bfff) you just write the desired bank number to $ffff. (As Maxim said you should additionally have slot 2 starting from $8000.)

If you know what bank you want to map in, e.g., bank 3 then you can just do
ld a, 3
ld ($ffff), a



Thank you Calindro! That's exactly what I was missing! Now the program works prefectly with 4 banks. Now I feel confident to be able to add more banks in case I need them.

Also, thanks to sverx for you explanation. I think I undestand it now. It may be simple, but is a little bit abstract at first.

By the way, I have a small problem in a given screen. For a unknown reasson a misterious tile appears on the top left part of the screen.



I have yet not started with sprites. Maybe I override a part of the VRAM for sprite-only use with the tile info???
Sin_t_tulo_1.png (26.4 KB)
Attachment fairy
Sin_t_tulo_1.png

  View user's profile Send private message
  • Joined: 23 Mar 2013
  • Posts: 611
  • Location: Copenhagen, Denmark
Reply with quote
Post Posted: Tue May 03, 2016 8:10 pm
You can turn off all the sprites: Output $d0 to vram address $3f00 (the first sprite's vertical position). $d0 is a special character - all sprites that occur after the $d0 entry are disabled. Judging by your screenshot, I think this will fix your mysterious tile issue.
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Wed May 04, 2016 8:57 pm
That was exactly the problem. Thank you very much!
  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Line interruptions
Post Posted: Mon Jan 23, 2017 9:49 am
Hi again,
Recently I continued the game, and I have found few new problems. I have studied the documentation about line interruptions, but at this point I'm don't know what I'm doing wrong.

I have a vertical scroll, and I want to add two lines of tiles with a message (from pixel 64 to 72 and 128-136) that should not be affected by scroll.

I think a image is worth it than one thousand words...


So i want the scroll to move but not the couple of messages.
So far I have writen a peace of code to trigger the lines 64, 72, 128 and 136. I think everything is right, but is not working and the whole screen is scrolling. I guess I may be missing something very elemental...

Here's the code

Vblank/HBlank handler:
;==============================================================
; Vblank/HBlank handler
;==============================================================
.org $0038
.section "Interrupt handler" force

   ex   af,af'         ; save accumulator in its shadow reg.
   in   a,$bf         ; get vdp status / satisfy interrupt.
   ld   (PORT_VDPStatus),a   ; save vdp status in ram.

   ld   a,[m_iInterruptState]
   cp   ST_BOSS_COMING
   jr   z,hBlankHandler_BossComming

   vBlankHandler:
   jp   interruptEnd

   hBlankHandler_BossComming:
   call   INTERRUPT_BOSS_COMMING

   interruptEnd:
   ex   af,af'         ; restore accumulator.
   ei            ; enable interrupts.
   ret            ; return from interrupt.
.ends


State initialization and line interruption switch on:
;==============================================================
; GAME_BOSS_COMING
;==============================================================
INIT_BOSS_COMING:

   ld   a,ST_BOSS_COMING
   ld   [m_iInterruptState],a
   xor   a
   ld   [m_iInterruptIndex],a

   add   a,255
   out     ($bf),a
   ld      a, $8a         
   out     ($bf),a

   ; Enable h interrutions hBlank
   ld      a, %10010100
;          ||||||||
;          |||||||`- Synch enable
;          ||||||`-- Extra height enable/TMS9918 mode select
;          |||||`--- Mode 4 enable
;          ||||`---- Shift sprites left 8 pixels
;          |||`----- Enable line interrupts
;          ||`------ Hide leftmost 8 pixels
;          |`------- Horizontal scroll lock
;          `-------- Vertical scroll lock

   out   ($bf),a
   ld   a,$80
   out   ($bf),a

   call   myhalt
     ....


State update:
REPAINT_BOSS_COMING:

   ld   a,1
   ld   [m_iInterruptIndex],a

   ; frame control
   call   myhalt_pmusic
   call   myhalt
   call   myhalt

   ; lines between 64 & 128
   call   DRAW_SPRITES   ; draw sprites

   call   myhalt
   call   myhalt


   ; Check frame
   call   DRAW_SCROLL

     ...


Funtion to handle line interruption:
INTERRUPT_BOSS_COMMING:

   in   a,($7e)         ; V counter for debug purpouses

   ld   a,[m_iInterruptIndex]
   inc   a
   ld   [m_iInterruptIndex],a

   cp   1
   jr   z,INTBOSS_VBLANK
   cp   2
   jr   z,INTBOSS_LINE31
   cp   3
   jr   z,INTBOSS_LINE63
   cp   4
   jr   z,INTBOSS_LINE64
   cp   5
   jr   z,INTBOSS_LINE72
   cp   6
   jr   z,INTBOSS_LINE128
   cp   7
   jr   z,INTBOSS_VBLANK

   ret

    ;==============================================================
    ; Vblank
    ;==============================================================
   INTBOSS_VBLANK:
   ; Restore scroll
   ld   a,[m_iDrawScrollY]
   ld   b,8
   add   a,b
   out     ($BF), a
   ld      a, $89         ; Register $09 - Background Y Scroll
   out     ($BF), a

   ; next interruption
   ld   a,30
   out   ($bf),a
   ld   a,$8a
   out   ($bf),a

   ret

    ;==============================================================
    ; Line 31
    ;==============================================================
   INTBOSS_LINE31:
   ; next interruption
   ld   a,2
   out   ($bf),a
   ld   a,$8a
   out   ($bf),a

   ret

    ;==============================================================
    ; Line 63
    ;==============================================================
   INTBOSS_LINE63:
   ; next interruption
   ld   a,7
   out   ($bf),a
   ld   a,$8a
   out   ($bf),a

   ret

    ;==============================================================
    ; Line 64
    ;==============================================================
   INTBOSS_LINE64:

   ; next interruption
   ld   a,55
   out   ($bf),a
   ld   a,$8a
   out   ($bf),a

   ; Reset scroll
   ld   a,[m_iTxtBossCommingScroll1]
   out   ($bf),a
   ld   a,$89
   out   ($bf),a

   ret

    ;==============================================================
    ; Line 72
    ;==============================================================
   INTBOSS_LINE72:

   ; next interruption
   ld   a,7
   out   ($bf),a
   ld   a,$8a
   out   ($bf),a

   ; Restore scroll
   ld   a,[m_iDrawScrollY]
   ld   b,8
   add   a,b
   out     ($BF), a
   ld      a, $89         ; Register $09 - Background Y Scroll
   out     ($BF), a

   ret

    ;==============================================================
    ; Line 128
    ;==============================================================
   INTBOSS_LINE128:
   ; next interruption
   ld   a,255
   out   ($bf),a
   ld   a,$8a
   out   ($bf),a

   ; Reset scroll
   ld   a,[m_iTxtBossCommingScroll2]
   out   ($bf),a
   ld   a,$89
   out   ($bf),a

   ret


I may provide source code in private if somebody whan to check it
Thanks in advance!
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 3758
  • Location: Stockholm, Sweden
Reply with quote
Post Posted: Mon Jan 23, 2017 9:54 am
well, it's only that unfortunately you can't change the vertical scroll value mid-frame - when the screen is already in the "vDraw" phase :|
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Mon Jan 23, 2017 10:57 am
So, that means that what I whant to do is not possible? Or that I need to find a new aproach to achieve it? I have seen other threads that do similar things

http://www.smspower.org/forums/8333-PartScreenScroll

Edit: it's possible to change the horizontal scroll in line interrupt but not the vertical scroll?

Edit2: having reading the thread again from top to bottom is pretty clear that vscroll can not be changed. That sucks...
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 3758
  • Location: Stockholm, Sweden
Reply with quote
Post Posted: Mon Jan 23, 2017 1:06 pm
you can anyway update the tiles on screen (on a adequate row) and let the text scroll with the background...
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Mon Jan 23, 2017 2:45 pm
Yep, that's what I'm working on now. Thanks
  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Mon Feb 20, 2017 10:09 pm
Hi again,

I have done the music and I'm starting to implement the sound FX's to the game. I'm having small problems mixing both at the same time.

In the MSX version of the game the sound FX uses the channel 3, muting the music while it's playing and recovering the music sound as soon as the FX is over. The trick is done very well, so it doesn't break the music rythm very much.

It can not be said the same thing with PSGLib... after the FX is over the third channel keeps muted for a few frames, and sometimes I have the feeling that all channels has been muted! This happens with a sound FX that is played when you move the cursor. Strangely the other sound FX (selecting a option) doesn't seems to have that problem.

So I don't know if can be fixed in the library or if is a limitation of the sound chip, neither if ts there any workaround to the problem, but any suggestion would be really apreciated.

You can find the msx game to see how well the music and the fx plays together, and also the master system demo to hear the problem.

MSX: https://drive.google.com/open?id=0B-6vVXEeG1u3N2RNZmNjUUZ2UzQ

Master System: https://drive.google.com/open?id=0B-6vVXEeG1u3aTVTcU8xb3FuN3c
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 3758
  • Location: Stockholm, Sweden
Reply with quote
Post Posted: Tue Feb 21, 2017 9:12 am
Fran Matsusaka wrote
after the FX is over the third channel keeps muted for a few frames


That's what happens when the FX has some silence at the end. Trim that silence from the FX, if that's unwanted.

edit: I tried your ROM, it seems to me you're using wrong channels for SFX. The SFX can only use channel 2 and/or 3(noise) and when you convert the VGM to PSG format, you should use the filter option if you're going to use that PSG for SFXs (I mean you need to specify -2 or -3 or -23 as the last parameter according to the channels you want to retain)
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Thu Feb 23, 2017 6:23 am
Hi sverx, thanks as always.
Yes, it was indeed a problem with the conver from vgm to psg. About your first sentence, if I trim the silence from the effect file, would not the effect sound keep sounding until a music note overwrites it?
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 3758
  • Location: Stockholm, Sweden
Reply with quote
Post Posted: Thu Feb 23, 2017 9:05 am
No, as soon as the SFX is over the channel will be 'reallocated' to the tune and its frequency and volume will be restored to what the tune commanded. So there's really no use of leaving silence at the end of the SFX, unless you really want a trailing silence...
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Fri Apr 07, 2017 6:09 pm
Hi again,

I have tested my game on a Megadrive. By using a Master System pad everything works perfect, but if I use a Megadrive pad the controls are screwed up. I have searched a little bit about this matter, but is pretty confusing... is possible to support Megadrive pads using the game in Power Base Converter?
  View user's profile Send private message
  • Joined: 28 Feb 2016
  • Posts: 502
  • Location: Barcelona
Reply with quote
Post Posted: Fri Apr 07, 2017 9:15 pm
Hello Fran,

If your game only use 2 standard master system buttons, you may set megadrive pad select always high before reading port.

You can read about it in:

http://www.smspower.org/Development/PeripheralPorts

  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Mon Apr 10, 2017 6:56 pm
Thanks for your response. I readed the documentation and I fixed it!
  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Mon Oct 01, 2018 12:00 pm
Hi again.

After having a snap of more than one year I returned to the game, as it's pretty advanced and few task remains to be completed.

The thing is that I have bought a Game Gear recently, with an everdrive, and I felt the impulse to make a port to this console in GG mode. The original SMS game has the "Disable vertical scrolling for colums 24-32" flag on. In GameGear this is completelly useless, as it only locks the last two colums of the visible screen and The UI can not be drawed in such small area.

Anybody knows a way to disable more colums in the GG? Or is a completelly lost case?

Thanks in advance
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 3758
  • Location: Stockholm, Sweden
Reply with quote
Post Posted: Mon Oct 01, 2018 12:19 pm
short answer: no, you can't disable scroll on more columns.

anyway if you're porting your game to GG you should probably re-think some other stuff too... or make it an SMS game in a GG cart (which will resize your SMS screen to fit the GG one, the outcome is pretty bad IMHO)
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Mon Oct 01, 2018 1:57 pm
sverx wrote
short answer: no, you can't disable scroll on more columns.

anyway if you're porting your game to GG you should probably re-think some other stuff too... or make it an SMS game in a GG cart (which will resize your SMS screen to fit the GG one, the outcome is pretty bad IMHO)


Yes. I guess the only way should to add score information in a pause screen, excepting remaining lifes, that could be done by sprites. Thank for the information!
  View user's profile Send private message
  • Joined: 08 Sep 2018
  • Posts: 270
Reply with quote
Post Posted: Mon Oct 01, 2018 4:58 pm
I attempted to disable scrolling for a UI on mine as well and tried many tricks to see if I could get it but never could. I ended up using a pause menu that just redraws whats currently on screen in vram then places sprites to represent score, health, and any extras. Most of this was also because using priority tiles and GSL which got in the way of on screen UI sprites. However I manage to get it in my battle scenes since I dont use priority tiles, Ive yet to reposition it for GG screen size though.
output000.png (900.74 KB)
Ignore the FPS counter
output000.png

  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Sat Mar 02, 2019 9:07 pm
Hi again!

I've almost finished the game. All bugs fixed and all features implemented... excepting the sound FX. I'm using some Alexx kid sounds as placeholders. I would like to have the same sound fx from the original MSX version, but I cannot understand very well the format, no matter how long I check the hexadecimal data.

Is there any expert in vgm sound that could replicate the MSX sound fx's just listening them? I need 4 sounds. I may pay a few bucks (50 $) for the job.

Thanks in advance!
  View user's profile Send private message
  • Site Admin
  • Joined: 19 Oct 1999
  • Posts: 14685
  • Location: London
Reply with quote
Post Posted: Sun Mar 03, 2019 12:10 am
Use VGMTool to write VGMs to text to understand the format. SFX are usually fairly simple.
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Mon Mar 04, 2019 7:34 pm
Maxim wrote
Use VGMTool to write VGMs to text to understand the format. SFX are usually fairly simple.


Thanks. The problem is with the MSX format, not with the VGM. Anyway, I was able to understand it and now happily I have finished the game!
  View user's profile Send private message
  • Joined: 29 Mar 2012
  • Posts: 879
  • Location: Spain
Reply with quote
Post Posted: Mon Mar 04, 2019 8:10 pm
Show us the thing! :-D
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 3758
  • Location: Stockholm, Sweden
Reply with quote
Post Posted: Tue Mar 05, 2019 8:45 am
Coding compo is due in a few days - I hope we'll see the game then :)
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Sun Apr 07, 2019 3:51 pm
sverx wrote
Coding compo is due in a few days - I hope we'll see the game then :)


Nooooooooooo!!!!! It seems I the deadline was a few days ago... I wish I readed this message earlier... Thanks anyway
  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Sun Apr 07, 2019 3:53 pm
kusfo wrote
Show us the thing! :-D


Here you have it:

Game gear:
https://drive.google.com/open?id=1C30SFT6eMFAd_c6zAnA0cDEMBbSeFZ3-

Master System:
https://drive.google.com/open?id=1Wv5_Pf66EAzmegp0Ix7eJvohAyYnGmBS
  View user's profile Send private message
  • Site Admin
  • Joined: 08 Jul 2001
  • Posts: 8644
  • Location: Paris, France
Reply with quote
Post Posted: Sun Apr 07, 2019 4:23 pm
Wow, this is amazing!
I like how the game is balanced, it's not too difficult and very pleasant to play. (Although I have to admit I did use savestate on the later bosses).

Attached the SMS/GG roms (prefer using attachment rather than GoogleDrive links, they will disappear).
WingWarriors.zip (112.97 KB)

  View user's profile Send private message Visit poster's website
  • Joined: 29 Mar 2012
  • Posts: 879
  • Location: Spain
Reply with quote
Post Posted: Sun Apr 07, 2019 4:51 pm
Wow! only tried a fast play, but it looks really, really promising!

You should have entered the contest!
  View user's profile Send private message
  • Joined: 09 Sep 2001
  • Posts: 236
  • Location: Umeå, Sweden
Reply with quote
Post Posted: Tue Apr 09, 2019 11:23 am
I found a bug (I think, unless it was my emulator), I died at the same time as completing the first level, got shot after I had lost control of the player - and this totally messed up the graphics on the second level. When I tried playing it again and didn't die everything looked fine.
  View user's profile Send private message Visit poster's website
  • Joined: 21 Oct 2015
  • Posts: 303
Reply with quote
Post Posted: Tue Apr 09, 2019 5:20 pm
Really nice game.

I miss a special attack with the second button and some sound effects.

A video of my first gameplay:

  View user's profile Send private message
  • Joined: 28 Feb 2016
  • Posts: 502
  • Location: Barcelona
Reply with quote
Post Posted: Tue Apr 09, 2019 7:22 pm
Congratulations Fran !!!!!

It makes me up for create new games. Looks really like Phelios style in 8 bit system
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 3758
  • Location: Stockholm, Sweden
Reply with quote
Post Posted: Wed Apr 10, 2019 7:40 am
fx wrote
totally messed up the graphics on the second level


the same here, not sure what caused it, though.
I'm going to test it on hardware ASAP.
  View user's profile Send private message Visit poster's website
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Wed Apr 10, 2019 4:41 pm
law81 wrote
Really nice game.

I miss a special attack with the second button and some sound effects.

A video of my first gameplay:



Hey, thanks for your video!
Yes, I miss the second button also. From my point of view, that's what would make this a decent Master System game, but I couldn't find any good idea to implement easily and cheap (I don't have to many tile/sprites memory free). Also would be nice to have something like a secondary shot, that differs depending on the character. But that means a lot of extra sprites (and code).

Fx and sverx, thanks for the bug report. I will work on a fix this weekend.
  View user's profile Send private message
  • Joined: 01 Feb 2014
  • Posts: 844
Reply with quote
Post Posted: Wed Apr 10, 2019 6:47 pm
Finally got a chance to play this. I played on real hardware, on the Mega Sg to be precise.

Master System version is heavily glitched. There‘s a weird doubling of tile rows, and tile rows are refreshed in the middle of the screen. Music seems to run a whole lot faster than on the Game Gear.

Game Gear version seems to run fine, but the smaller screen gets very cramped and you can get easily swarmed without a chance to escape if enemies come from front and back. I very much like the little radar thing that shows your position in the level.

Both versions have slowdown if many bullets are on screen, even the music slows down.

Apart from that, I think the game is great. There are some really nice bullet patterns, especially at the bosses. Beautiful graphics, too, even though it seems you less simultaneous colors than the system offers, but that‘s probably because the visuals have been ported from the MSX.
  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Wed Apr 10, 2019 8:52 pm
Kagesan wrote
Finally got a chance to play this. I played on real hardware, on the Mega Sg to be precise.

Master System version is heavily glitched. There‘s a weird doubling of tile rows, and tile rows are refreshed in the middle of the screen. Music seems to run a whole lot faster than on the Game Gear.


I've just tried in a Megadrive II and besides the music speed problem I didn't found anything strange with the graphics. Could you post a photo of that doubling of tile rows glitch?

Kagesan wrote
Both versions have slowdown if many bullets are on screen, even the music slows down.

Yeah. I spend a lot of effort reducing the slowdowns, but my knowledge on the system and in z80 has its own limits.

Thanks for the comments!

And a small question: is possible to use the megadrive pause button?
  View user's profile Send private message
  • Joined: 21 Oct 2015
  • Posts: 303
Reply with quote
Post Posted: Wed Apr 10, 2019 9:54 pm
Fran Matsusaka wrote
law81 wrote
Really nice game.

I miss a special attack with the second button and some sound effects.


Yes, I miss the second button also. From my point of view, that's what would make this a decent Master System game, but I couldn't find any good idea to implement easily and cheap (I don't have to many tile/sprites memory free). Also would be nice to have something like a secondary shot, that differs depending on the character. But that means a lot of extra sprites (and code).

Fx and sverx, thanks for the bug report. I will work on a fix this weekend.


Good idea about a different shot.
Another idea:Maybe you can add different types and choose the type with the second button.
  View user's profile Send private message
  • Joined: 01 Feb 2014
  • Posts: 844
Reply with quote
Post Posted: Thu Apr 11, 2019 6:53 am
Fran Matsusaka wrote
I've just tried in a Megadrive II and besides the music speed problem I didn't found anything strange with the graphics. Could you post a photo of that doubling of tile rows glitch?

And a small question: is possible to use the megadrive pause button?

I think the Mega Sg might act like an SMS1 VDP, and you have probably switched off bit 0 in VDP register 2.

http://www.smspower.org/Development/TilemapMirroring
This describes exactly what I‘m seeing.

At which speed is the music supposed to play? Have you tried updating the PSG channels at the start if vblank? That way the music would keep playing at normal speed even if the game slows down.

I can‘t test pause button behaviour, unfortunately, because the Mega Sg maps the MD start button to SMS pause button automatically when in SMS mode.
  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Fri Apr 12, 2019 4:41 pm
Last edited by Fran Matsusaka on Sat Apr 13, 2019 8:02 am; edited 2 times in total
Kagesan wrote

I think the Mega Sg might act like an SMS1 VDP, and you have probably switched off bit 0 in VDP register 2.


That's very interesting indeed. And very anoying too lol
So I have to understand that your Mega Sg is implementing the SMS1 VDP in Master System mode, and my Megadrive 2 is probably implementing the SMS2 VDP, so for that reasson I don't see the bug?

Could you check if the bug is now fixed when you have time? Thanks in advance!
WingWarriors.rar (56.8 KB)

  View user's profile Send private message
  • Joined: 01 Feb 2014
  • Posts: 844
Reply with quote
Post Posted: Sat Apr 13, 2019 5:54 am
Thanks for updating. I‘ll test it as soon as I can. Might not be before tomorrow, though.

I think it‘s interesting that the Mega SG acts like an SMS1 VDP, as I think the later revision would actually make more sense for compatibility‘s sake.

I‘d like to test on my real SMS, too, but my original Everdrive has died and I haven‘t yet found an SD card my replacement X7 works with.
  View user's profile Send private message
  • Joined: 01 Feb 2014
  • Posts: 844
Reply with quote
Post Posted: Sat Apr 13, 2019 8:38 am
I had the chance to do a quick test run. The tilemap mirroring is fixed now, but two new bugs have surfaced:

1. The screen border flashes when an enemy is destroyed.

2. A short way into the first level, the screen freezes for a second. After that the body of the player sprite is missing, just the wings remain. You can still move around, but no enemies appear anymore.
  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Sat Apr 13, 2019 8:50 am
I fixed few bugs, and now the music is in the correct speed in all versions and regions
WingWarriors.rar (108.94 KB)
MS+GG roms

  View user's profile Send private message
  • Joined: 31 Jan 2014
  • Posts: 32
  • Location: Palma de Mallorca
Reply with quote
Post Posted: Sat Apr 13, 2019 8:55 am
Glad to hear it is fixed.

Kagesan wrote

1. The screen border flashes when an enemy is destroyed.

Hehehe, that's done at purpouse. But few people sees it as a bug :p

Kagesan wrote
2. A short way into the first level, the screen freezes for a second. After that the body of the player sprite is missing, just the wings remain. You can still move around, but no enemies appear anymore.

Yeah, that's a consecuence of moving the music from the main loop to the vblank handler. The music is at the correct speed always, but sometimes destroys registers. I added a couple push/pop and that made the trick. The fixed version is already in my previous link.

Thanks for the testing!
  View user's profile Send private message
  • Joined: 01 Feb 2014
  • Posts: 844
Reply with quote
Post Posted: Sun Apr 14, 2019 9:12 am
The latest version works flawlessly, at least up until the stage 6 boss. That‘s as far as I got so far.

One minor thing: In the dialogue boxes before the boss fights everything in the eight rightmost columns text is one pixel up compared to the rest. I guess scrolling of the level should stop one pixel earlier?

I still find the flashing borders a tad annoying, but of course I respect your artistic choice.

Could you tell me where exactly the player‘s hitbox is and how big it is? I could have sworn I got hit by some bullets that should have missed the player‘s legs just barely.
  View user's profile Send private message
Reply to topic Goto page 1, 2  Next



Back to the top of this page

Back to SMS Power!