Previous 15994 Revisions Next

r15946 Saturday 18th August, 2012 at 02:19:32 UTC by Angelo Salese
Improved Affine Mode, now zooming is more or less correct (rotation isn't)
[src/mess/drivers]vboy.c

src/mess/drivers/vboy.c
r15945r15946
88    and http://www.vr32.de/modules/dokuwiki/doku.php?
99
1010    TODO:
11    - fix graphics (many things to add!)
11    - fix Affine rotation
12    - galactic: ball isn't shown?
13    - galactic: on the rotation layer, half of it isn't shown;
14    - innsmout: arrow OBJ graphics are misplaced;
15   - spaceinv: Taito logo only if you press the button, framebuffer?
16   - spaceinv: missing shots
17   - ssquash: misplaced map;
18   - ssquash: gameplay seems busted;
1219   - vleague / vproyak: keeps going into auto pause with 100 usec timer?
20   - wariolnd: brightness gets suddently darker during intro, CPU bug?
1321
1422****************************************************************************/
1523
r15945r15946
243251   if(def & 0x40) // END flag
244252      return 1;
245253
246   if (mode < 2)
254   if (mode < 2) // Normal / Hbias Mode
247255   {
248256      fill_bg_map(state, bg_map_num);
249257      if (lon && (!right))
r15945r15946
293301      }
294302   }
295303   else
296   if (mode==2)
304   if (mode==2) // Affine Mode
297305   {
298306      fill_bg_map(state, bg_map_num);
299307
r15945r15946
302310         // Left screen
303311         for(y=0;y<=h;y++)
304312         {
305            float h_skw = vboy_paramtab[y*8+0];
313            float h_skw = vboy_paramtab[y*8+0] / 8.0;
306314            int prlx = vboy_paramtab[y*8+1];
307            float v_skw = vboy_paramtab[y*8+2];
308            float h_scl = vboy_paramtab[y*8+3];
309            float v_scl = vboy_paramtab[y*8+4];
315            float v_skw = vboy_paramtab[y*8+2] / 8.0;
316            float h_scl = vboy_paramtab[y*8+3] / 512.0;
317            float v_scl = vboy_paramtab[y*8+4] / 512.0;
310318
311            INT32 mx = (INT32)h_skw / 8;
312            INT32 my = (INT32)v_skw / 8;
313            INT32 dx = (INT32)h_scl / 512;
314            INT32 dy = (INT32)v_scl / 512;
315
316319            for(x=0;x<=w;x++)
317320            {
318321               int src_x,src_y;
r15945r15946
320323               INT16 x1 = (x+gx-gp);
321324               int pix = 0;
322325
323               src_x = (mx + prlx) + (dx * x);
324               src_y = (my) + (dy * y);
326               src_x = (INT32)((h_skw + prlx) + (h_scl * x));
327               src_y = (INT32)((v_skw) + (v_scl * y));
325328
326329               pix = state->m_bg_map[((src_y) & 0x1ff)*0x200+((src_x) & 0x1ff)];
327330
r15945r15946
338341         // Right screen
339342         for(y=0;y<=h;y++)
340343         {
341            float h_skw = vboy_paramtab[y*8+0];
344            float h_skw = vboy_paramtab[y*8+0] / 8.0;
342345            int prlx = vboy_paramtab[y*8+1];
343            float v_skw = vboy_paramtab[y*8+2];
344            float h_scl = vboy_paramtab[y*8+3];
345            float v_scl = vboy_paramtab[y*8+4];
346            float v_skw = vboy_paramtab[y*8+2] / 8.0;
347            float h_scl = vboy_paramtab[y*8+3] / 512.0;
348            float v_scl = vboy_paramtab[y*8+4] / 512.0;
346349
347            INT32 mx = (INT32)h_skw / 8;
348            INT32 my = (INT32)v_skw / 8;
349            INT32 dx = (INT32)h_scl / 512;
350            INT32 dy = (INT32)v_scl / 512;
351
352350            for(x=0;x<=w;x++)
353351            {
354352               int src_x,src_y;
r15945r15946
356354               INT16 x1 = (x+gx+gp);
357355               int pix = 0;
358356
359               src_x = (mx - prlx) + (dx * x);
360               src_y = (my) + (dy * y);
357               src_x = (INT32)((h_skw - prlx) + (h_scl * x));
358               src_y = (INT32)((v_skw) + (v_scl * y));
361359
362360               pix = state->m_bg_map[((src_y) & 0x1ff)*0x200+((src_x) & 0x1ff)];
363361
r15945r15946
370368      }
371369   }
372370   else
373   if (mode==3)
371   if (mode==3) // OBJ Mode
374372   {
375373      int start_offs, end_offs;
376374

Previous 15994 Revisions Next


© 1998-2018 The MESS Team