mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	2d3d:: fixed the placement of monsters (including PC view) on rock levels etc.
This commit is contained in:
		
							
								
								
									
										16
									
								
								graph.cpp
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								graph.cpp
									
									
									
									
									
								
							| @@ -4470,11 +4470,12 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { | ||||
|      | ||||
|     transmatrix Vd0, Vboat0; | ||||
|     const transmatrix *Vdp = | ||||
|       (!wmspatial) ? &V :  | ||||
|       sl ? &(Vd0= mscale(V, geom3::SLEV[sl])) :  | ||||
|       highwall(c) ? &(Vd0= mscale(V, (1+geom3::WALL)/2)) : | ||||
|       WDIM == 3 ? &V: | ||||
|       !wmspatial ? &V :  | ||||
|       sl ? &(Vd0= mscale(V, geom3::SLEV[sl] - geom3::FLOOR)) :  | ||||
|       (highwall(c) && GDIM == 2) ? &(Vd0= mscale(V, (1+geom3::WALL)/2)) : | ||||
| #if CAP_SHAPES | ||||
|       (chasmg==1) ? &(Vd0 = mscale(V, geom3::LAKE)) : | ||||
|       (chasmg==1) ? &(Vd0 = mscale(V, geom3::LAKE - geom3::FLOOR)) : | ||||
| #endif | ||||
|       &V; | ||||
|      | ||||
| @@ -5502,9 +5503,12 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { | ||||
|       #endif | ||||
|       error |= drawMonster(V, ctype, c, moncol);  | ||||
|       #if CAP_SHAPES | ||||
|       if(Vboat != &V && Vboat != &Vboat0 && q != isize(ptds))  | ||||
|         pushdown(c, q, V, -geom3::factor_to_lev(zlevel(tC0((*Vboat)))), | ||||
|       if(Vboat != &V && Vboat != &Vboat0 && q != isize(ptds)) { | ||||
|         if(WDIM == 2) | ||||
|           pushdown(c, q, V, geom3::SLEV[sl] - geom3::FLOOR, false, false); | ||||
|         else pushdown(c, q, V, -geom3::factor_to_lev(zlevel(tC0((*Vboat)))), | ||||
|           !isMultitile(c->monst), false); | ||||
|         } | ||||
|       #endif | ||||
|       } | ||||
|        | ||||
|   | ||||
							
								
								
									
										13
									
								
								hypgraph.cpp
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								hypgraph.cpp
									
									
									
									
									
								
							| @@ -1094,10 +1094,10 @@ void centerpc(ld aspd) { | ||||
|   if(shmup::on && vid.sspeed > -5 && DIM == 3) { | ||||
|     int id = subscreens::in ? subscreens::current_player : 0; | ||||
|     viewctr = shmup::pc[id]->base->master; | ||||
|     transmatrix& T = shmup::pc[id]->at; | ||||
|     if(WDIM == 2) | ||||
|       View = inverse(master_relative(shmup::pc[id]->base) * T); | ||||
|     else  | ||||
|     transmatrix T = shmup::pc[id]->at; | ||||
|     if(WDIM == 2) T = master_relative(shmup::pc[id]->base) * T; | ||||
|     int sl = snakelevel(cwt.at); | ||||
|     if(sl) T = T * zpush(geom3::SLEV[sl] - geom3::FLOOR); | ||||
|     View = inverse(T); | ||||
|     if(vid.yshift) View = cpush(2, wall_radar(viewctr.at->c7, T)) * View; | ||||
|     if(WDIM == 2) View = cspin(0, 1, M_PI) * cspin(2, 1, M_PI/2 + shmup::playerturny[id]) * spin(-M_PI/2) * View; | ||||
| @@ -1121,7 +1121,10 @@ void centerpc(ld aspd) { | ||||
|    | ||||
|   ors::unrotate(cwtV); ors::unrotate(View); | ||||
|    | ||||
|   hyperpoint H = inverse(actual_view_transform) * tC0(cwtV); | ||||
|   transmatrix T = cwtV; | ||||
|   int sl = snakelevel(cwt.at); | ||||
|   if(sl) T = T * zpush(geom3::SLEV[sl] - geom3::FLOOR); | ||||
|   hyperpoint H = inverse(actual_view_transform) * tC0(T); | ||||
|   ld R = zero_d(DIM, H) ? 0 : hdist0(H); | ||||
|   if(R < 1e-9) { | ||||
|     // either already centered or direction unknown | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue