From 3ab35e884f4924db56749a0afafa6b60a4686ca8 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 23 Nov 2022 16:22:03 +0100 Subject: namcos22: window clip doesn't need to be float --- src/devices/cpu/tms32025/32025dsm.cpp | 2 +- src/devices/cpu/tms32025/32025dsm.h | 2 +- src/devices/cpu/tms32025/tms32025.cpp | 70 +++++++++-------- src/devices/cpu/tms32025/tms32025.h | 2 +- src/mame/namco/namcos22.cpp | 14 ++-- src/mame/namco/namcos22.h | 40 +++++----- src/mame/namco/namcos22_v.cpp | 144 ++++++++++++++++++---------------- 7 files changed, 141 insertions(+), 133 deletions(-) diff --git a/src/devices/cpu/tms32025/32025dsm.cpp b/src/devices/cpu/tms32025/32025dsm.cpp index 09a0e4bfd4a..e379d3e23b2 100644 --- a/src/devices/cpu/tms32025/32025dsm.cpp +++ b/src/devices/cpu/tms32025/32025dsm.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Tony La Porta, hap +// copyright-holders:Tony La Porta /**************************************************************************\ * Texas Instruments TMS320x25 DSP Disassembler * * * diff --git a/src/devices/cpu/tms32025/32025dsm.h b/src/devices/cpu/tms32025/32025dsm.h index 187628b09de..5293ab21574 100644 --- a/src/devices/cpu/tms32025/32025dsm.h +++ b/src/devices/cpu/tms32025/32025dsm.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Tony La Porta, hap +// copyright-holders:Tony La Porta /**************************************************************************\ * Texas Instruments TMS320x25 DSP Disassembler * * * diff --git a/src/devices/cpu/tms32025/tms32025.cpp b/src/devices/cpu/tms32025/tms32025.cpp index 304280555a1..756ffb7b776 100644 --- a/src/devices/cpu/tms32025/tms32025.cpp +++ b/src/devices/cpu/tms32025/tms32025.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Tony La Porta, hap +// copyright-holders:Tony La Porta /**************************************************************************\ * Texas Instruments TMS320x25 DSP Emulator * * * @@ -410,11 +410,11 @@ void tms32025_device::MODIFY_AR_ARP() break; case 0x10: /* 001 *- */ - m_AR[ARP] -- ; + m_AR[ARP]--; break; case 0x20: /* 010 *+ */ - m_AR[ARP] ++ ; + m_AR[ARP]++; break; case 0x30: /* 011 reserved */ @@ -606,7 +606,7 @@ void tms32025_device::abst() m_ACC.d = -m_ACC.d; if (m_ACC.d == 0x80000000) { SET0(OV_FLAG); - if (OVM) m_ACC.d-- ; + if (OVM) m_ACC.d--; } } CLR1(C_FLAG); @@ -714,43 +714,43 @@ void tms32025_device::bacc() void tms32025_device::banz() { if (m_AR[ARP]) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bbnz() { if (TC) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bbz() { if (TC == 0) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bc() { if (CARRY) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bgez() { if ( (int32_t)(m_ACC.d) >= 0 ) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bgz() { if ( (int32_t)(m_ACC.d) > 0 ) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bioz() { if (m_bio_in() != CLEAR_LINE) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bit() @@ -768,7 +768,7 @@ void tms32025_device::bitt() void tms32025_device::blez() { if ( (int32_t)(m_ACC.d) <= 0 ) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::blkd() @@ -795,21 +795,21 @@ void tms32025_device::blkp() } void tms32025_device::blz() { - if ( (int32_t)(m_ACC.d) < 0 ) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + if ( (int32_t)(m_ACC.d) < 0 ) m_PC = m_cache.read_word(m_PC); + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bnc() { if (CARRY == 0) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bnv() { if (OV == 0) m_PC = m_cache.read_word(m_PC); else { - m_PC++ ; + m_PC++; CLR0(OV_FLAG); } MODIFY_AR_ARP(); @@ -817,7 +817,7 @@ void tms32025_device::bnv() void tms32025_device::bnz() { if (m_ACC.d != 0) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bv() @@ -826,13 +826,13 @@ void tms32025_device::bv() m_PC = m_cache.read_word(m_PC); CLR0(OV_FLAG); } - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::bz() { if (m_ACC.d == 0) m_PC = m_cache.read_word(m_PC); - else m_PC++ ; + else m_PC++; MODIFY_AR_ARP(); } void tms32025_device::cala() @@ -842,7 +842,7 @@ void tms32025_device::cala() } void tms32025_device::call() { - m_PC++ ; + m_PC++; PUSH_STACK(m_PC); m_PC = m_cache.read_word(m_PC - 1); MODIFY_AR_ARP(); @@ -855,18 +855,22 @@ void tms32025_device::cmpr() { switch (m_opcode.b.l & 3) { - case 00: if ( (uint16_t)(m_AR[ARP]) == (uint16_t)(m_AR[0]) ) SET1(TC_FLAG); - else CLR1(TC_FLAG); - break; - case 01: if ( (uint16_t)(m_AR[ARP]) < (uint16_t)(m_AR[0]) ) SET1(TC_FLAG); - else CLR1(TC_FLAG); - break; - case 02: if ( (uint16_t)(m_AR[ARP]) > (uint16_t)(m_AR[0]) ) SET1(TC_FLAG); - else CLR1(TC_FLAG); - break; - case 03: if ( (uint16_t)(m_AR[ARP]) != (uint16_t)(m_AR[0]) ) SET1(TC_FLAG); - else CLR1(TC_FLAG); - break; + case 0: + if ( (uint16_t)(m_AR[ARP]) == (uint16_t)(m_AR[0]) ) SET1(TC_FLAG); + else CLR1(TC_FLAG); + break; + case 1: + if ( (uint16_t)(m_AR[ARP]) < (uint16_t)(m_AR[0]) ) SET1(TC_FLAG); + else CLR1(TC_FLAG); + break; + case 2: + if ( (uint16_t)(m_AR[ARP]) > (uint16_t)(m_AR[0]) ) SET1(TC_FLAG); + else CLR1(TC_FLAG); + break; + case 3: + if ( (uint16_t)(m_AR[ARP]) != (uint16_t)(m_AR[0]) ) SET1(TC_FLAG); + else CLR1(TC_FLAG); + break; } } void tms32025_device::cnfd() /** next two fetches need to use previous CNF value ! **/ @@ -2057,7 +2061,7 @@ void tms32025_device::execute_run() (this->*s_opcode_main[m_opcode.b.h].function)(); } m_init_load_addr = 0; - m_RPTC-- ; + m_RPTC--; } while ((int8_t)(m_RPTC) != -1); m_RPTC = 0; m_PFC = m_PC; diff --git a/src/devices/cpu/tms32025/tms32025.h b/src/devices/cpu/tms32025/tms32025.h index de8b4442c08..c234d2127ac 100644 --- a/src/devices/cpu/tms32025/tms32025.h +++ b/src/devices/cpu/tms32025/tms32025.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Tony La Porta, hap +// copyright-holders:Tony La Porta /**************************************************************************\ * Texas Instruments TMS320x25 DSP Emulator * * * diff --git a/src/mame/namco/namcos22.cpp b/src/mame/namco/namcos22.cpp index 21addc0414c..0015e22336b 100644 --- a/src/mame/namco/namcos22.cpp +++ b/src/mame/namco/namcos22.cpp @@ -23,10 +23,10 @@ TODO: to HLE I/O board emulation? - where is the steering wheel motor torque output for dirtdash? Answer: The data comes from the Serial Port on the MOTHER PCB at J2 Pin 7 /TXD -- texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures. The glitch may be in MAME core: - it used to be much worse with the legacy_poly_manager - tokyowar garbage tile at right edge in attract mode. It's part of the cabinet link message, maybe BTANB? -- global offset is wrong in non-super22 testmode video test, and above that, it flickers in acedrive, victlap +- texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures +- global offset is wrong in non-super22 testmode video test +- acedrive/victlap testmode video test flickers - ss22 testmode video test screen#04 translucent polygon should be higher priority than sprite - ss22 testmode video test screen#13 geometry should not be lopsided (uses draw_direct_poly) - find out how/where vics num_sprites is determined exactly, currently a workaround is needed for airco22b and dirtdash @@ -37,7 +37,7 @@ TODO: + timecris stage 1-2 start, beam appears through platform + timecris stage 2-1 final section, steel beam appears through plank + cybrcycc speed dial should be more to the left - + plenty more, but need clearly visible cases with PCB evidence + + most of it is zsort related, there's plenty more, but need clearly visible cases with PCB evidence - improve ss22 lighting: + acedrive/victlap sparks + adillor title logo @@ -2990,10 +2990,10 @@ static INPUT_PORTS_START( ridgera ) PORT_BIT( 0xfff, 0x800, IPT_PADDLE ) PORT_MINMAX(0x280, 0xd80) PORT_SENSITIVITY(100) PORT_KEYDELTA(160) PORT_NAME("Steering Wheel") PORT_START("ADC.1") // 1552 - PORT_BIT( 0xfff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000, 0x610) PORT_SENSITIVITY(100) PORT_KEYDELTA(80) PORT_NAME("Gas Pedal") + PORT_BIT( 0xfff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000, 0x610) PORT_SENSITIVITY(100) PORT_KEYDELTA(160) PORT_NAME("Gas Pedal") PORT_START("ADC.2") // 1552 - PORT_BIT( 0xfff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x610) PORT_SENSITIVITY(100) PORT_KEYDELTA(80) PORT_NAME("Brake Pedal") + PORT_BIT( 0xfff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x610) PORT_SENSITIVITY(100) PORT_KEYDELTA(160) PORT_NAME("Brake Pedal") PORT_START("DSW") PORT_DIPNAME( 0x00010000, 0x00010000, "Test Mode" ) PORT_DIPLOCATION("SW2:1") @@ -3151,7 +3151,7 @@ static INPUT_PORTS_START( acedrive ) PORT_BIT( 0xfff, 0x800, IPT_PADDLE ) PORT_MINMAX(0x200, 0xe00) PORT_SENSITIVITY(100) PORT_KEYDELTA(160) PORT_NAME("Steering Wheel") PORT_START("ADC.1") // 1152 - PORT_BIT( 0xfff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000, 0x480) PORT_SENSITIVITY(100) PORT_KEYDELTA(80) PORT_NAME("Gas Pedal") + PORT_BIT( 0xfff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000, 0x480) PORT_SENSITIVITY(100) PORT_KEYDELTA(120) PORT_NAME("Gas Pedal") PORT_START("ADC.2") // 576 PORT_BIT( 0xfff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x240) PORT_SENSITIVITY(100) PORT_KEYDELTA(80) PORT_NAME("Brake Pedal") diff --git a/src/mame/namco/namcos22.h b/src/mame/namco/namcos22.h index 4c035396ae3..deb3be2f336 100644 --- a/src/mame/namco/namcos22.h +++ b/src/mame/namco/namcos22.h @@ -23,6 +23,9 @@ #include "screen.h" #include "tilemap.h" +class namcos22_state; + + enum { NAMCOS22_AIR_COMBAT22, @@ -44,14 +47,6 @@ enum NAMCOS22_ARMADILLO_RACING }; - -struct namcos22_polyvertex -{ - float x, y, z; - int u, v; // 0..0xfff - int bri; // 0..0xff -}; - enum namcos22_scenenode_type { NAMCOS22_SCENENODE_NONLEAF, @@ -63,6 +58,14 @@ enum namcos22_scenenode_type #define NAMCOS22_RADIX_BUCKETS (1 << NAMCOS22_RADIX_BITS) #define NAMCOS22_RADIX_MASK (NAMCOS22_RADIX_BUCKETS - 1) + +struct namcos22_polyvertex +{ + float x, y, z; + int u, v; // 0..0xfff + int bri; // 0..0xff +}; + struct namcos22_scenenode { namcos22_scenenode_type type; @@ -76,8 +79,8 @@ struct namcos22_scenenode struct { - float vx, vy; - float vu, vd, vl, vr; + int vx, vy; + int vu, vd, vl, vr; int texturebank; int color; int cmode; @@ -141,8 +144,6 @@ struct namcos22_object_data }; -class namcos22_state; - class namcos22_renderer : public poly_manager { public: @@ -159,9 +160,6 @@ private: struct namcos22_scenenode m_scenenode_root; struct namcos22_scenenode *m_scenenode_cur; std::list m_scenenode_alloc; - - float m_clipx = 0.0; - float m_clipy = 0.0; rectangle m_cliprect; static u8 nthbyte(const u32 *src, int n) { return util::big_endian_cast(src)[n]; } @@ -492,13 +490,13 @@ protected: int m_text_palbase = 0; int m_bg_palbase = 0; + int m_camera_vx = 0; + int m_camera_vy = 0; + int m_camera_vu = 0; + int m_camera_vd = 0; + int m_camera_vl = 0; + int m_camera_vr = 0; float m_camera_zoom = 0.0f; - float m_camera_vx = 0.0f; - float m_camera_vy = 0.0f; - float m_camera_vu = 0.0f; - float m_camera_vd = 0.0f; - float m_camera_vl = 0.0f; - float m_camera_vr = 0.0f; float m_camera_lx = 0.0f; // unit vector for light direction float m_camera_ly = 0.0f; // " float m_camera_lz = 0.0f; // " diff --git a/src/mame/namco/namcos22_v.cpp b/src/mame/namco/namcos22_v.cpp index 7f90299defd..d966a81f36e 100644 --- a/src/mame/namco/namcos22_v.cpp +++ b/src/mame/namco/namcos22_v.cpp @@ -295,11 +295,9 @@ void namcos22_renderer::poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bit int direct = node->data.quad.direct; // scene clip - float cx = 320.0f + node->data.quad.vx; - float cy = 240.0f + node->data.quad.vy; - m_clipx = cx; - m_clipy = cy; - m_cliprect.set(cx + node->data.quad.vl, cx - node->data.quad.vr, cy + node->data.quad.vu, cy - node->data.quad.vd); + int cx = 320 + node->data.quad.vx; + int cy = 240 + node->data.quad.vy; + m_cliprect.set(cx + node->data.quad.vl, cx - node->data.quad.vr - 1, cy + node->data.quad.vu, cy - node->data.quad.vd - 1); m_cliprect &= screen.visible_area(); // non-direct case: project and z-clip @@ -323,8 +321,8 @@ void namcos22_renderer::poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bit for (vertnum = 0; vertnum < clipverts; vertnum++) { float ooz = 1.0f / clipv[vertnum].p[0]; - clipv[vertnum].x = m_clipx + clipv[vertnum].x * ooz; - clipv[vertnum].y = m_clipy - clipv[vertnum].y * ooz; + clipv[vertnum].x = cx + clipv[vertnum].x * ooz; + clipv[vertnum].y = cy - clipv[vertnum].y * ooz; clipv[vertnum].p[0] = ooz; clipv[vertnum].p[1] = (clipv[vertnum].p[1] + 0.5f) * ooz; // u clipv[vertnum].p[2] = (clipv[vertnum].p[2] + 0.5f) * ooz; // v @@ -339,8 +337,8 @@ void namcos22_renderer::poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bit for (vertnum = 0; vertnum < 4; vertnum++) { float ooz = node->data.quad.v[vertnum].z; - clipv[vertnum].x = m_clipx + node->data.quad.v[vertnum].x; - clipv[vertnum].y = m_clipy - node->data.quad.v[vertnum].y; + clipv[vertnum].x = cx + node->data.quad.v[vertnum].x; + clipv[vertnum].y = cy - node->data.quad.v[vertnum].y; clipv[vertnum].p[0] = ooz; clipv[vertnum].p[1] = (node->data.quad.v[vertnum].u + 0.5f) * ooz; clipv[vertnum].p[2] = (node->data.quad.v[vertnum].v + 0.5f) * ooz; @@ -940,13 +938,9 @@ void namcos22_state::draw_direct_poly(const u16 *src) */ void namcos22_state::blit_single_quad(u32 color, u32 addr, float m[4][4], int polyshift, int flags, int packetformat) { - int zsort; - float zmin = 0.0f; - float zmax = 0.0f; namcos22_polyvertex v[4]; - int i; - for (i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) { namcos22_polyvertex *pv = &v[i]; pv->x = point_read(0x8 + i * 3 + addr); @@ -955,6 +949,19 @@ void namcos22_state::blit_single_quad(u32 color, u32 addr, float m[4][4], int po transform_point(&pv->x, &pv->y, &pv->z, m); } + float zmin = 0.0f; + float zmax = 0.0f; + + for (int i = 0; i < 4; i++) + { + if (i == 0 || v[i].z > zmax) zmax = v[i].z; + if (i == 0 || v[i].z < zmin) zmin = v[i].z; + } + + // fully behind camera + if (zmax < 0.0f) + return; + // backface cull one-sided polygons if (flags & 0x0020) { @@ -971,66 +978,25 @@ void namcos22_state::blit_single_quad(u32 color, u32 addr, float m[4][4], int po return; } - for (i = 0; i < 4; i++) - { - namcos22_polyvertex *pv = &v[i]; - int bri; - - pv->u = point_read(0 + i * 2 + addr); - pv->v = point_read(1 + i * 2 + addr); - - if (i == 0 || pv->z > zmax) zmax = pv->z; - if (i == 0 || pv->z < zmin) zmin = pv->z; - - if (m_LitSurfaceCount) - { - // lighting (prelim) - bri = m_LitSurfaceInfo[m_LitSurfaceIndex % m_LitSurfaceCount]; - - if (m_SurfaceNormalFormat == 0x6666) - { - if (i == 3) - m_LitSurfaceIndex++; - } - else if (m_SurfaceNormalFormat == 0x4000) - { - m_LitSurfaceIndex++; - } - else - logerror("blit_single_quad:unknown normal format: 0x%x\n", m_SurfaceNormalFormat); - } - else if (packetformat & 0x40) - { - // gourad shading - bri = (point_read(i + addr) >> 16) & 0xff; - } - else - { - // flat shading - bri = color >> 16 & 0xff; - } - - pv->bri = bri; - } - - zmin = std::clamp(zmin, 0.0f, (float)0x1fffff) + 0.5f; - zmax = std::clamp(zmax, 0.0f, (float)0x1fffff) + 0.5f; + int zsort = 0; + if (zmin < 0.0f) zmin = 0.0f; switch (flags & 0x300) { case 0x000: - zsort = zmin; + zsort = zmin + 0.5f; break; case 0x100: - zsort = zmax; + zsort = zmax + 0.5f; break; default: - zsort = (zmin + zmax) / 2.0f; + zsort = (zmin + zmax) / 2.0f + 0.5f; break; } + if (zsort > 0x1fffff) zsort = 0x1fffff; int absolute_priority = m_absolute_priority & 7; /* relative: representative z + shift values @@ -1058,7 +1024,47 @@ void namcos22_state::blit_single_quad(u32 color, u32 addr, float m[4][4], int po absolute_priority &= 7; zsort |= (absolute_priority << 21); - int cz_value = (int)zmax; // not from zsort + zmax = std::clamp(zmax, 0.0f, (float)0x1fffff); + int cz_value = zmax + 0.5f; // not from zsort + + // u, v, bri + for (int i = 0; i < 4; i++) + { + int bri; + + v[i].u = point_read(0 + i * 2 + addr); + v[i].v = point_read(1 + i * 2 + addr); + + if (m_LitSurfaceCount) + { + // lighting (prelim) + bri = m_LitSurfaceInfo[m_LitSurfaceIndex % m_LitSurfaceCount]; + + if (m_SurfaceNormalFormat == 0x6666) + { + if (i == 3) + m_LitSurfaceIndex++; + } + else if (m_SurfaceNormalFormat == 0x4000) + { + m_LitSurfaceIndex++; + } + else + logerror("blit_single_quad:unknown normal format: 0x%x\n", m_SurfaceNormalFormat); + } + else if (packetformat & 0x40) + { + // gourad shading + bri = (point_read(i + addr) >> 16) & 0xff; + } + else + { + // flat shading + bri = color >> 16 & 0xff; + } + + v[i].bri = bri; + } // allocate quad struct namcos22_scenenode *node = m_poly->new_scenenode(machine(), zsort, NAMCOS22_SCENENODE_QUAD); @@ -1070,7 +1076,7 @@ void namcos22_state::blit_single_quad(u32 color, u32 addr, float m[4][4], int po node->data.quad.cz_adjust = m_cz_adjust; node->data.quad.objectflags = m_objectflags; - for (i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) { namcos22_polyvertex *p = &node->data.quad.v[i]; p->x = v[i].x * m_camera_zoom; @@ -1286,23 +1292,23 @@ void namcos22_state::slavesim_handle_bb0003(const s32 *src) m_camera_vx = signed12(src[0x5] >> 16); m_camera_vy = signed12(src[0x5] & 0xffff); m_camera_zoom = dspfloat_to_nativefloat(src[0x6]); - m_camera_vr = dspfloat_to_nativefloat(src[0x7]) * m_camera_zoom + 0.5f; - m_camera_vl = dspfloat_to_nativefloat(src[0x8]) * m_camera_zoom + 0.5f; - m_camera_vu = dspfloat_to_nativefloat(src[0x9]) * m_camera_zoom + 0.5f; - m_camera_vd = dspfloat_to_nativefloat(src[0xa]) * m_camera_zoom + 0.5f; + m_camera_vr = dspfloat_to_nativefloat(src[0x7]) * m_camera_zoom - 0.5f; + m_camera_vl = dspfloat_to_nativefloat(src[0x8]) * m_camera_zoom - 0.5f; + m_camera_vu = dspfloat_to_nativefloat(src[0x9]) * m_camera_zoom - 0.5f; + m_camera_vd = dspfloat_to_nativefloat(src[0xa]) * m_camera_zoom - 0.5f; m_reflection = src[0x2] >> 16 & 0x30; // z too? m_cullflip = (m_reflection == 0x10 || m_reflection == 0x20); if (m_reflection & 0x10) { - float vl = m_camera_vl; + int vl = m_camera_vl; m_camera_vl = m_camera_vr; m_camera_vr = vl; } if (m_reflection & 0x20) { - float vu = m_camera_vu; + int vu = m_camera_vu; m_camera_vu = m_camera_vd; m_camera_vd = vu; } -- cgit v1.2.3