void mouse_draw( INSTANCE * i, REGION * clip ) { int r ; REGION region; r = GLOINT32( libmouse, MOUSEREGION ) ; if ( r < 0 || r > 31 ) r = 0 ; region = regions[r]; if ( clip ) region_union( ®ion, clip ); if ( GLOINT32( libmouse, MOUSEANGLE ) || GLOINT32( libmouse, MOUSESIZE ) != 100 ) gr_rotated_blit( 0, ®ion, GLOINT32( libmouse, MOUSEX ), GLOINT32( libmouse, MOUSEY ), GLODWORD( libmouse, MOUSEFLAGS ), GLOINT32( libmouse, MOUSEANGLE ), GLOINT32( libmouse, MOUSESIZE ), GLOINT32( libmouse, MOUSESIZE ), mouse_map ) ; else gr_blit( 0, ®ion, GLOINT32( libmouse, MOUSEX ), GLOINT32( libmouse, MOUSEY ), GLODWORD( libmouse, MOUSEFLAGS ), mouse_map ) ; mouse_map->modified = 0; }
void draw_instance_at( INSTANCE * i, REGION * region, int x, int y, GRAPH * dest ) { GRAPH * map ; int16_t * blend_table = NULL ; int flags ; int scalex, scaley ; int alpha ; int blendop; PALETTE * palette = NULL; int paletteid; map = instance_graph( i ) ; if ( !map ) return ; flags = ( LOCDWORD( librender, i, FLAGS ) ^ LOCDWORD( librender, i, XGRAPH_FLAGS ) ); if (( alpha = LOCDWORD( librender, i, ALPHA ) ) != 255 ) { if ( alpha <= 0 ) return ; else if ( alpha < 255 ) flags |= B_ALPHA | ( alpha << B_ALPHA_SHIFT ); } scalex = LOCINT32( librender, i, GRAPHSIZEX ); scaley = LOCINT32( librender, i, GRAPHSIZEY ); if ( scalex == 100 && scaley == 100 ) scalex = scaley = LOCINT32( librender, i, GRAPHSIZE ); if (( blendop = LOCDWORD( librender, i, BLENDOP ) ) ) { blend_table = map->blend_table; map->blend_table = ( int16_t * ) blendop; } if (( paletteid = LOCDWORD( librender, i, PALETTEID ) ) ) { palette = map->format->palette ; map->format->palette = ( PALETTE * ) paletteid; } /* XGRAPH does not rotate destination graphic. WARNING: don't remove "scalex != 100 || scaley != 100 ||" from begin the next condition */ if ( scalex != 100 || scaley != 100 || ( LOCINT32( librender, i, ANGLE ) && !LOCDWORD( librender, i, XGRAPH ) ) ) { gr_rotated_blit( dest, region, x, y, flags, LOCDWORD( librender, i, XGRAPH ) ? 0 : LOCINT32( librender, i, ANGLE ), scalex, scaley, map ) ; } else { gr_blit( dest, region, x, y, flags, map ) ; } if ( paletteid ) map->format->palette = palette; if ( blendop ) map->blend_table = blend_table; }
static void draw_at( GRAPH * dest, int x, int y, REGION * r, INSTANCE * i ) { GRAPH * map ; int scalex, scaley; scalex = LOCINT32( mod_grproc, i, GRAPHSIZEX ); scaley = LOCINT32( mod_grproc, i, GRAPHSIZEY ); if ( scalex == 100 && scaley == 100 ) scalex = scaley = LOCINT32( mod_grproc, i, GRAPHSIZE ); map = instance_graph( i ) ; if ( !map ) return ; // PATCH - XGRAPH DOES NOT ROTATE DESTINATION GRAPHIC if ( LOCINT32( mod_grproc, i, ANGLE ) || scaley != 100 || scalex != 100 ) { if ( LOCDWORD( mod_grproc, i, XGRAPH ) && scalex == 100 && scaley == 100 ) { gr_blit( dest, r, x, y, LOCDWORD( mod_grproc, i, FLAGS ) & ( B_HMIRROR | B_VMIRROR ), map ) ; } else { if ( LOCDWORD( mod_grproc, i, XGRAPH ) ) { gr_rotated_blit( dest, r, x, y, LOCDWORD( mod_grproc, i, FLAGS ) & ( B_HMIRROR | B_VMIRROR ), 0, scalex, scaley, map ) ; } else { gr_rotated_blit( dest, r, x, y, LOCDWORD( mod_grproc, i, FLAGS ) & ( B_HMIRROR | B_VMIRROR ), LOCINT32( mod_grproc, i, ANGLE ), scalex, scaley, map ) ; } } } else { gr_blit( dest, r, x, y, LOCDWORD( mod_grproc, i, FLAGS ) & ( B_HMIRROR | B_VMIRROR ), map ) ; } }
void draw_instance( INSTANCE * i, REGION * clip ) { GRAPH * map ; int16_t * blend_table = NULL ; int flags; int scalex, scaley; REGION region; int alpha ; int blendop = 0 ; PALETTE * palette = NULL ; int paletteid; /* Difference with draw_instance_at from here */ int x, y, r ; /* Difference with draw_instance_at to here */ // map = instance_graph( i ) ; map = ( GRAPH * ) LOCDWORD( librender, i, GRAPHPTR ); if ( !map ) return ; flags = ( LOCDWORD( librender, i, FLAGS ) ^ LOCDWORD( librender, i, XGRAPH_FLAGS ) ); if (( alpha = LOCDWORD( librender, i, ALPHA ) ) != 255 ) { if ( alpha <= 0 ) return ; else if ( alpha < 255 ) flags |= B_ALPHA | ( alpha << B_ALPHA_SHIFT ); } scalex = LOCINT32( librender, i, GRAPHSIZEX ); scaley = LOCINT32( librender, i, GRAPHSIZEY ); if ( scalex == 100 && scaley == 100 ) scalex = scaley = LOCINT32( librender, i, GRAPHSIZE ); if (( blendop = LOCDWORD( librender, i, BLENDOP ) ) ) { blend_table = map->blend_table; map->blend_table = ( int16_t * ) blendop; } if (( paletteid = LOCDWORD( librender, i, PALETTEID ) ) ) { palette = map->format->palette ; map->format->palette = ( PALETTE * ) paletteid; } /* Difference with draw_instance_at from here */ x = LOCINT32( librender, i, COORDX ) ; y = LOCINT32( librender, i, COORDY ) ; RESOLXY( librender, i, x, y ); r = LOCINT32( librender, i, REGIONID ) ; if ( r > 0 && r < 32 ) region = regions[ r ] ; else region = regions[ 0 ]; if ( clip ) region_union( ®ion, clip ); /* Difference with draw_instance_at to here */ /* XGRAPH does not rotate destination graphic. WARNING: don't remove "scalex != 100 || scaley != 100 ||" from begin the next condition */ if ( scalex != 100 || scaley != 100 || ( LOCINT32( librender, i, ANGLE ) && !LOCDWORD( librender, i, XGRAPH ) ) ) gr_rotated_blit( 0, ®ion, x, y, flags, LOCDWORD( librender, i, XGRAPH ) ? 0 : LOCINT32( librender, i, ANGLE ), scalex, scaley, map ) ; else gr_blit( 0, ®ion, x, y, flags, map ) ; if ( paletteid ) map->format->palette = palette; if ( blendop ) map->blend_table = blend_table; if ( map->modified ) map->modified = 0; }