diff --git a/hyperpoint.cpp b/hyperpoint.cpp index e361873b..6c8f8e2e 100644 --- a/hyperpoint.cpp +++ b/hyperpoint.cpp @@ -1838,7 +1838,8 @@ EX void apply_shift_object(transmatrix& Position, const transmatrix orientation, } EX void rotate_object(transmatrix& Position, transmatrix& orientation, transmatrix R) { - if(gproduct && WDIM == 3) orientation = orientation * R; + if(geom3::euc_in_product()) orientation = orientation * R; + else if(gproduct && WDIM == 3) orientation = orientation * R; else Position = Position * R; } diff --git a/hypgraph.cpp b/hypgraph.cpp index 895dd923..78a7f378 100644 --- a/hypgraph.cpp +++ b/hypgraph.cpp @@ -2078,7 +2078,10 @@ EX void centerpc(ld aspd) { if(gproduct) NLP = ortho_inverse(pc->ori); if(WDIM == 2) { if(vid.wall_height < 0) rotate_view(cspin180(2, 1)); - rotate_view( cspin(2, 1, -90._deg - shmup::playerturny[id]) * default_spin()); + if(gproduct) + rotate_view( cspin(2, 1, -90._deg - shmup::playerturny[id]) * cspin90(0, 1)); + else + rotate_view( cspin(2, 1, -90._deg - shmup::playerturny[id]) * default_spin()); } return; } diff --git a/shmup.cpp b/shmup.cpp index e6d31334..bf0b017a 100644 --- a/shmup.cpp +++ b/shmup.cpp @@ -69,6 +69,7 @@ struct monster { stunoff = 0; blowoff = 0; fragoff = 0; footphase = 0; inertia = Hypc; ori = Id; vel = 0; swordangle = 0; + if(geom3::euc_in_product()) ori = cgi.intermediate_to_logical_scaled; } monster() { @@ -939,7 +940,10 @@ void movePlayer(monster *m, int delta) { if(playerturn[cpid] && canmove && !blown && WDIM == 2) { m->swordangle -= playerturn[cpid]; - rotate_object(nat.T, m->ori, spin(playerturn[cpid])); + if(geom3::euc_in_product()) + rotate_object(nat.T, m->ori, cspin(0, 1, playerturn[cpid])); + else + rotate_object(nat.T, m->ori, spin(playerturn[cpid])); if(inertia_based) m->inertia = spin(-playerturn[cpid]) * m->inertia; } shiftmatrix nat0 = nat;