@@ -534,7 +534,7 @@ void func_218D3(void)
534534 }
535535}
536536
537- void lvdraw_compute_lights (int prc_z_beg , int * smrang_x , struct ShEnginePoint * p_unknarrD )
537+ void lvdraw_compute_lights (int prc_z_beg , int ranges_len , struct Range * smrang_x , struct ShEnginePoint * p_unknarrD )
538538{
539539 short v31 ;
540540 short v32 ;
@@ -543,20 +543,10 @@ void lvdraw_compute_lights(int prc_z_beg, int *smrang_x, struct ShEnginePoint *p
543543 int v36 ;
544544 int v37 ;
545545 int v38 ;
546- int v39 ;
547- int v40 ;
548- int v41 ;
549- ushort qlght ;
550- struct QuickLight * p_qlght1 ;
551- int v44 ;
552- ubyte Flags ;
553546 int v46 ;
554- int v118 ;
555- int v119 ;
556547 int v120 ;
557548 int v121 ;
558549 int v122 ;
559- ubyte flags_A ;
560550 int v144 ;
561551 int v150 ;
562552 int v158 ;
@@ -569,105 +559,108 @@ void lvdraw_compute_lights(int prc_z_beg, int *smrang_x, struct ShEnginePoint *p
569559 v32 = engn_zc & 0xFF00 ;
570560 word_19CC66 = v32 - (render_area_b << 7 );
571561 v172 = prc_z_beg ;
572- p_mapel9 = & game_my_big_map [128 * (prc_z_beg >> 8 ) + (smrang_x [0 ] >> 8 )];
573- v35 = & p_unknarrD [2 * (smrang_x [0 ] >> 8 )];
562+ p_mapel9 = & game_my_big_map [128 * (prc_z_beg >> 8 ) + (smrang_x [0 ]. beg >> 8 )];
563+ v35 = & p_unknarrD [2 * (smrang_x [0 ]. beg >> 8 )];
574564 v159 = prc_z_beg >> 8 ;
575- v150 = smrang_x [2 * 0 + 0 ] ;
576- v36 = smrang_x [2 * 0 + 1 ] ;
565+ v150 = smrang_x [0 ]. beg ;
566+ v36 = smrang_x [0 ]. fin ;
577567 v144 = prc_z_beg >> 7 ;
578- v37 = smrang_x [2 * 0 + 0 ] ;
568+ v37 = smrang_x [0 ]. beg ;
579569 v158 = 0 ;
580570 while ( v37 <= v36 )
581571 {
582- v120 = v150 - engn_xc ;
583- if (game_perspective == 1 )
584- {
585- v121 = 0 ;
586- LABEL_55 :
587- v35 -> field_9 = 0 ;
588- goto LABEL_56 ;
589- }
590- v121 = 8 * p_mapel9 -> Alt ;
591- Flags = p_mapel9 -> Flags ;
592- if ((Flags & 0x10 ) == 0 )
593- {
594- if ((Flags & 0x40 ) != 0 )
595- v121 += waft_table [gameturn & 0x1F ];
596- goto LABEL_55 ;
597- }
598- v46 = ((* (int * )(& deep_radar_surface_col + 2 * (((ubyte )gameturn + (ubyte )(v150 >> 7 )) & 0x1F )) >> 16 )
599- + (* (int * )(& deep_radar_surface_col + 2 * (((ubyte )gameturn + (ubyte )v144 ) & 0x1F )) >> 16 )
600- + (* (int * )(& deep_radar_surface_col + 2 * ((32 * gameturn
601- / ((((ubyte )bw_rotl32 (0x5D3BA6C3 , v159 ) ^ (ubyte )bw_rotr32 (0xA7B4D8AC , (sbyte )(v150 >> 8 ))) & 0x7Fu )
602- + 140 )) & 0x1F )) >> 16 )) >> 3 ;
603- v121 += 8 * (short )v46 ;
604- v35 -> field_9 = ((ushort )v46 + 32 ) << 9 ;
605- LABEL_56 :
606- v121 -= 8 * engn_yc ;
607- v160 = (dword_176D14 * v120 - dword_176D10 * (v172 - engn_zc )) >> 16 ;
608- v38 = (dword_176D10 * v120 + dword_176D14 * (v172 - engn_zc )) >> 16 ;
609- v122 = (dword_176D18 * v121 + dword_176D1C * v38 ) >> 16 ;
610- flags_A = 0 ;
611- v121 = (((dword_176D1C * v121 - v38 * dword_176D18 ) >> 16 ) * overall_scale ) >> 8 ;
612- v120 = (overall_scale * v160 ) >> 8 ;
613- if ( v122 >= -500 )
614- {
615- v39 = ((1500 * ((overall_scale * v160 ) >> 8 ) / ((v122 >> 2 ) + 500 )) >> 1 ) + dword_176D3C ;
616- v118 = v39 ;
617- if (v39 < 0 ) {
618- if (v39 < -2000 )
619- v118 = -2000 ;
620- flags_A = 0x01 ;
621- } else if (v39 >= vec_window_width ) {
622- if (v39 > 2000 )
623- v118 = 2000 ;
624- flags_A |= 0x02 ;
572+ int scr_x , scr_y ;
573+ uint shade ;
574+ ubyte flags ;
575+
576+ v120 = v150 - engn_xc ;
577+ if (game_perspective == 1 )
578+ {
579+ v121 = 0 ;
580+ v35 -> field_9 = 0 ;
625581 }
626- v40 = dword_176D40 + (- (1500 * v121 / ((v122 >> 2 ) + 500 )) >> 1 );
627- v119 = v40 ;
628- if (v40 < 0 ) {
629- if (v119 < -2000 )
630- v119 = -2000 ;
631- flags_A |= 0x04 ;
632- } else if (v40 >= vec_window_height ) {
633- if (v119 > 2000 )
634- v119 = 2000 ;
635- flags_A |= 0x08 ;
582+ else if ((p_mapel9 -> Flags & 0x10 ) == 0 )
583+ {
584+ v121 = 8 * p_mapel9 -> Alt ;
585+ if ((p_mapel9 -> Flags & 0x40 ) != 0 )
586+ v121 += waft_table [gameturn & 0x1F ];
587+ v35 -> field_9 = 0 ;
636588 }
637- flags_A |= 0x40 ;
638- v122 /= (ushort )render_area_a / 20 + 1 ;
639- }
640- else
641- {
642- flags_A = 32 ;
643- }
644-
645- v35 -> Flags = flags_A ;
646- v35 -> X = v118 ;
647- v35 -> Y = v119 ;
648- v35 -> field_4 = v122 ;
649- v41 = ((ushort )p_mapel9 -> Ambient << 7 ) + v35 -> field_9 + 256 ;
650- for (qlght = p_mapel9 -> Shade ; qlght ; qlght = p_qlght1 -> NextQuick )
651- {
652- p_qlght1 = & game_quick_lights [qlght ];
653- v44 = p_qlght1 -> Ratio * game_full_lights [p_qlght1 -> Light ].Intensity ;
654- v41 += v44 ;
655- }
656- if ( v122 > 3000 )
657- {
658- if ( 3512 - v122 > 0 )
659- v41 = ((3512 - v122 ) * v41 ) >> 9 ;
660589 else
661- v41 = 0 ;
662- }
663- if (v41 > 0x7E00 )
664- v41 = 0x7F00 ;
665- v35 -> Shade = v41 ;
666- v150 += 256 ;
667- v37 = v150 ;
668- v35 += 2 ;
669- v36 = smrang_x [v158 /4 + 1 ];
670- ++ p_mapel9 ;
590+ {
591+ v121 = 8 * p_mapel9 -> Alt ;
592+ v46 = ((* (int * )(& deep_radar_surface_col + 2 * (((ubyte )gameturn + (ubyte )(v150 >> 7 )) & 0x1F )) >> 16 )
593+ + (* (int * )(& deep_radar_surface_col + 2 * (((ubyte )gameturn + (ubyte )v144 ) & 0x1F )) >> 16 )
594+ + (* (int * )(& deep_radar_surface_col + 2 * ((32 * gameturn
595+ / ((((ubyte )bw_rotl32 (0x5D3BA6C3 , v159 ) ^ (ubyte )bw_rotr32 (0xA7B4D8AC , (sbyte )(v150 >> 8 ))) & 0x7Fu )
596+ + 140 )) & 0x1F )) >> 16 )) >> 3 ;
597+ v121 += 8 * (short )v46 ;
598+ v35 -> field_9 = ((ushort )v46 + 32 ) << 9 ;
599+ }
600+ v121 -= 8 * engn_yc ;
601+ v160 = (dword_176D14 * v120 - dword_176D10 * (v172 - engn_zc )) >> 16 ;
602+ v38 = (dword_176D10 * v120 + dword_176D14 * (v172 - engn_zc )) >> 16 ;
603+ v122 = (dword_176D18 * v121 + dword_176D1C * v38 ) >> 16 ;
604+ v121 = (((dword_176D1C * v121 - v38 * dword_176D18 ) >> 16 ) * overall_scale ) >> 8 ;
605+ v120 = (overall_scale * v160 ) >> 8 ;
606+
607+ flags = 0 ;
608+ if (v122 >= -500 )
609+ {
610+ int scr_dx , scr_dy ;
611+
612+ scr_dx = (1500 * ((overall_scale * v160 ) >> 8 ) / ((v122 >> 2 ) + 500 )) >> 1 ;
613+ scr_x = dword_176D3C + scr_dx ;
614+ if (scr_x < 0 ) {
615+ if (scr_x < -2000 )
616+ scr_x = -2000 ;
617+ flags = 0x01 ;
618+ } else if (scr_x >= vec_window_width ) {
619+ if (scr_x > 2000 )
620+ scr_x = 2000 ;
621+ flags |= 0x02 ;
622+ }
623+ scr_dy = - (1500 * v121 / ((v122 >> 2 ) + 500 )) >> 1 ;
624+ scr_y = dword_176D40 + scr_dy ;
625+ if (scr_y < 0 ) {
626+ if (scr_y < -2000 )
627+ scr_y = -2000 ;
628+ flags |= 0x04 ;
629+ } else if (scr_y >= vec_window_height ) {
630+ if (scr_y > 2000 )
631+ scr_y = 2000 ;
632+ flags |= 0x08 ;
633+ }
634+ flags |= 0x40 ;
635+ v122 /= (ushort )render_area_a / 20 + 1 ;
636+ }
637+ else
638+ {
639+ flags = 0x20 ;
640+ }
641+
642+ shade = ((ushort )p_mapel9 -> Ambient << 7 ) + v35 -> field_9 + 256 ;
643+ shade += cummulate_shade_from_quick_lights (p_mapel9 -> Shade );
644+ if (v122 > 3000 ) {
645+ if (3512 - v122 > 0 )
646+ shade = ((3512 - v122 ) * shade ) >> 9 ;
647+ else
648+ shade = 0 ;
649+ }
650+ if (shade > 0x7E00 )
651+ shade = 0x7F00 ;
652+
653+ v35 -> Flags = flags ;
654+ v35 -> X = scr_x ;
655+ v35 -> Y = scr_y ;
656+ v35 -> field_4 = v122 ;
657+ v35 -> Shade = shade ;
658+
659+ v150 += 256 ;
660+ v35 += 2 ;
661+ v37 = v150 ;
662+ v36 = smrang_x [v158 /8 ].fin ;
663+ ++ p_mapel9 ;
671664 }
672665}
673666
@@ -1128,9 +1121,9 @@ void func_2e440(void)
11281121
11291122 lvdraw_do_objects (prc_z_beg , ranges_x_len , ranges_x );
11301123
1131- lvdraw_compute_lights (prc_z_beg , smrang_x , loc_unknarrD );
1124+ lvdraw_compute_lights (prc_z_beg , ranges_x_len , smrang_x , loc_unknarrD );
11321125
1133- func_2e440_fill_drawlist (prc_z_beg , ranges_x_len , smrang_x , ranges_x , loc_unknarrD );
1126+ func_2e440_fill_drawlist (prc_z_beg , ranges_x_len , ( int * ) smrang_x , ranges_x , loc_unknarrD );
11341127
11351128 vec_map = vec_tmap [1 ];
11361129
0 commit comments