/**
 * Draw the amount of squares a structure would take. The X and Y coordinates are the top
 * left coordinates of an icon.
 *
 * @param structureId
 * @param x
 * @param y
 */
void cBuildingListDrawer::drawStructureSize(int structureId, int x, int y) {
	// figure out size
	int iW=structures[structureId].bmp_width/32;
	int iH=structures[structureId].bmp_height/32;
	int iTile = GRID_1X1;

	if (iW == 2 && iH == 2) {
		iTile = GRID_2X2;
	}

	if (iW == 3 && iH == 2) {
		iTile = GRID_3X2;
	}

	if (iW == 3 && iH == 3) {
		iTile = GRID_3X3;
	}

	BITMAP *temp=create_bitmap(19,19);
	clear_bitmap(temp);
	set_trans_blender(0, 0, 0, 192);

	draw_trans_sprite(temp, bmp_screen, x + 43, y + 20);

	draw_sprite(temp, (BITMAP *)gfxinter[GRID_0X0].dat, 0, 0);

	draw_trans_sprite(bmp_screen, temp, x + 43, y + 20);

	draw_sprite(bmp_screen, (BITMAP *)gfxinter[iTile].dat, x + 43, y + 20);

	destroy_bitmap(temp);

}
void PlaceItDrawer::drawStructureIdAtCell(cBuildingListItem *itemToPlace, int cell) {
	assert(itemToPlace);
	assert(cell >= 0);

	int structureId = itemToPlace->getBuildId();

	int iDrawX = map->mouse_draw_x();
	int iDrawY = map->mouse_draw_y();

	if (structureId == SLAB1) {
		draw_trans_sprite(bmp_screen, (BITMAP *) gfxdata[PLACE_SLAB1].dat, iDrawX, iDrawY);
	} else if (structureId == SLAB4) {
		draw_trans_sprite(bmp_screen, (BITMAP *) gfxdata[PLACE_SLAB4].dat, iDrawX, iDrawY);
	} else if (structureId == WALL) {
		draw_trans_sprite(bmp_screen, (BITMAP *) gfxdata[PLACE_WALL].dat, iDrawX, iDrawY);
	} else {
		BITMAP *temp;
		temp = create_bitmap(structures[structureId].bmp_width, structures[structureId].bmp_height);
		clear_bitmap(temp);

		blit(structures[structureId].bmp, temp, 0, 0, 0, 0, structures[structureId].bmp_width, structures[structureId].bmp_height);

		draw_trans_sprite(bmp_screen, temp, iDrawX, iDrawY);

		destroy_bitmap(temp);
	}

}
Exemple #3
0
void draw_pickup_message(void)
{
	if(pickup.ready)
	{
		if(pickup.alpha==255)
		{
			if(pickup.pic!=NULL){
				set_trans_blender(0,0,0,158);
				draw_trans_sprite(virt, pickup.pic, 240-pickup.pic->w/2,240-120);}

			draw_sprite(virt, pickup.buffer, 0, 145);
						
		}
		else
		{
			if(pickup.pic!=NULL){
				set_trans_blender(0,0,0,((float)pickup.alpha/200)*158);
				draw_trans_sprite(virt, pickup.pic, 240-pickup.pic->w/2,240-120);}
			
			set_trans_blender(0,0,0,pickup.alpha);
			draw_trans_sprite(virt, pickup.buffer, 0, 145);
			
		}
	}
}
Exemple #4
0
/* Desenha o botão */
void ClassButton::DrawButton(BITMAP *GameBuffer)
{
 set_trans_blender(0, 0, 0, 180);
 if(clicked)
  draw_trans_sprite(GameBuffer, ButtonSelect, x, y);
 else
  draw_trans_sprite(GameBuffer, ButtonNull, x, y);
}
Exemple #5
0
// desenha o fundo
// TODO: fazer esta funcao de verdade
void desenha_fundo( TipoCenario *cenario, BITMAP *fundo, BITMAP *fundo2 ) {
	set_alpha_blender();
	//--cenario obsoleto-----------------------------------------------
	clear_to_color(fundo2, makecol(70,255,255));
	draw_trans_sprite(fundo2, cenario->nuvem, HRES-350-cenario->posicao, VRES-430);
	clear_to_color(fundo, makecol(255,0,255));
	draw_trans_sprite(fundo, cenario->coco, HRES-200-cenario->posicao, VRES-370);
	draw_trans_sprite(fundo, cenario->sol, 40-cenario->posicao, 20);
	//-----------------------------------------------------------------
}
void Check_Point::draw(bool editor){
    if(!occupied){
        draw_trans_sprite(BUFFER,CHECK_POINT_SPRITE_VACANT,x,y);
    }else{
        draw_trans_sprite(BUFFER,CHECK_POINT_SPRITE_OCCUPIED,x,y);
    }
    if(editor)
        rect(BUFFER,x,y,
             x+CHECK_POINT_LENG_X,
             y+CHECK_POINT_LENG_Y,
             HIGHLIGHT_COLOR);
}
Exemple #7
0
void Menu::draw()
{
  // Draw background to screen
  rectfill( buffer, 0, 0, SCREEN_W, SCREEN_H, makecol( 255,255,255));

  // Draw live background
  tile_map -> draw_map(buffer);

  // Overlay
  draw_trans_sprite(buffer, credits, 0, 0);
  draw_trans_sprite(buffer, menu, 0, SCREEN_H-461);
  draw_trans_sprite(buffer, menuselect, selectorX, selectorY);

  // Level selection
  draw_trans_sprite(buffer, levelSelectLeft, SCREEN_W-180, 80);
  draw_trans_sprite(buffer, levelSelectNumber, SCREEN_W-160, 80);
  textprintf_centre_ex(buffer,font,SCREEN_W-112,73,makecol(0,0,0),-1,"%i",levelOn + 1);
  draw_trans_sprite(buffer, levelSelectRight, SCREEN_W-80, 80);

  // Hover select left
  if(collisionAny(mouse_x,mouse_x,SCREEN_W-180,SCREEN_W-140,mouse_y,mouse_y, 80, 120)){
    draw_trans_sprite(buffer, levelSelectLeft, SCREEN_W-180, 80);
  }
  // Hover select right
  if(collisionAny(mouse_x,mouse_x,SCREEN_W-80,SCREEN_W-40,mouse_y,mouse_y, 80, 120)){
    draw_trans_sprite(buffer, levelSelectRight, SCREEN_W-80, 80);
  }

  // Cursor
  draw_sprite(buffer, cursor[0], mouse_x, mouse_y);

  // Select button
  if (mouse_b & 1 || key[KEY_ENTER] || joy[0].button[0].b){
    if (selectorY==610){
      do{
        draw_sprite(buffer, menu, 0, 0);
        draw_sprite(buffer, help,0,0);
        draw_sprite(screen,buffer,0,0);
      }
      while(!key[KEY_ESC] && !mouse_b & 1 && !joy[0].button[0].b);
    }
  }
  if( menuOpen){
    draw_trans_sprite( buffer,help,0,0);
  }
  draw_trans_sprite(buffer,copyright,SCREEN_W-350,SCREEN_H-40);
  draw_sprite(buffer,cursor[0],mouse_x,mouse_y);
  // Draw buffer
  stretch_sprite( screen, buffer, 0, 0, SCREEN_W, SCREEN_H);
}
Exemple #8
0
void Font::draw( BITMAP* aBuffer, const std::string& aText, int aX, int aY, Blending aBlending)
{
	int x = aX;
	int y = aY;

	bool addBlend = aBlending == Blending_Add;
	setBlending(aBlending);

	for(unsigned int i = 0; i < aText.size(); i++)
	{
		BITMAP* bitmap = getBitmapForGlyph(aText[i]);
		if (aBlending == Blending_None)
		{
			draw_sprite(aBuffer, bitmap, x, y);
		}
		else if (addBlend)
		{
			draw_trans_sprite(aBuffer, bitmap, x, y);
		}
		else
		{
			draw_lit_sprite(aBuffer, bitmap, x, y, 0);
		}
		x += bitmap->w;
	}
}
Exemple #9
0
void highcolor_fade_out(int speed)
{
    BITMAP *bmp_orig, *bmp_buff;

    if ((bmp_orig = create_bitmap(SCREEN_W, SCREEN_H)))
    {
        if ((bmp_buff = create_bitmap(SCREEN_W, SCREEN_H)))
        {
            int a;
            blit(screen, bmp_orig, 0,0, 0,0, SCREEN_W, SCREEN_H);
            if (speed <= 0) speed = 16;
        
            for (a = 255-speed; a > 0; a-=speed)
            {
                clear(bmp_buff);
                set_trans_blender(0,0,0,a);
                draw_trans_sprite(bmp_buff, bmp_orig, 0, 0);
                vsync();
                blit(bmp_buff, screen, 0,0, 0,0, SCREEN_W, SCREEN_H);
            }
            destroy_bitmap(bmp_buff);
        }
        destroy_bitmap(bmp_orig);
    }

    rectfill(screen, 0,0, SCREEN_W,SCREEN_H, makecol(0,0,0));
}
Exemple #10
0
void c_osi2_switch::draw_packet(c_drawtarget &drawtarget, c_layer &layer_any) {
    double draw_step = 1./static_cast<double>(g_max_anim_frame);
    const auto & gui = * drawtarget.m_gui;
    auto layer = dynamic_cast<c_layer_allegro &>(layer_any);
    BITMAP *frame = layer.m_frame;
    c_osi2_switch &tmp_osi2_switch = m_world.find_object_by_uuid_as_switch(m_draw_outbox.front().first);
    const int this_vx = gui.view_x(m_x), this_vy = gui.view_y(m_y);
    const int next_vx = gui.view_x(tmp_osi2_switch.m_x), next_vy = gui.view_y(tmp_osi2_switch.m_y);
    t_geo_point A(this_vx,this_vy);
    t_geo_point B(next_vx,next_vy);
    t_geo_point between = c_geometry::point_on_line_between_part(A,B,m_draw_outbox.front().second);
    //_dbg1("DEBUG<<<<: " << between.x << "  " << between.y);
    //_dbg1("Layer_allegro nr: " << layer.m_layer_nr);
    draw_trans_sprite(frame, c_bitmaps::get_instance().m_package_green,
                      between.x - c_bitmaps::get_instance().m_package_green->w / 2,
                      between.y - c_bitmaps::get_instance().m_package_green->h / 2);
    std::string send_percent = std::to_string(static_cast<int>(100*m_draw_outbox.front().second)) + "%";
    textout_ex(frame, font, send_percent.c_str(), between.x+15, between.y, makecol(0,15,25), -1);
    if(m_draw_outbox.front().second < 1.
       && !m_world.get_is_pause()) {
        m_draw_outbox.front().second += draw_step;
    } else {
        m_draw_outbox.pop();
    }
}
void drawEnemy(Enemy *enemy, BITMAP *buffer, BITMAP *auxiliar, unsigned int tick)
{
    if(enemy != NULL)
    {
        if(enemy->hp > 0)
        {
            masked_blit(enemy->sheet, buffer, ((int)(enemy->speed * tick)/(10) % 2) * TILE_SIZE, (enemy->orientation * TILE_SIZE),
                        (enemy->centre->x - TILE_SIZE/2), (enemy->centre->y - TILE_SIZE/1.5),
                        TILE_SIZE, TILE_SIZE);
        }

        else
        {
            set_trans_blender(255, 255, 255, enemy->blenderTax);
            blit(enemy->sheet, auxiliar, ((int)(enemy->speed * tick)/(10) % 2) * TILE_SIZE, (4 * TILE_SIZE),
                 0, 0, TILE_SIZE, TILE_SIZE);
            draw_trans_sprite(buffer, auxiliar, (enemy->centre->x - TILE_SIZE/2), (enemy->centre->y - TILE_SIZE/1.5));

            if(enemy->blenderTax > 0)
            {
                enemy->blenderTax--;
            }

        }
    }
}
void renderFlaresAndFlashes_DDR(int player)
{
	static int columnSource[10] = { 0, 1, 2, 3, 4, 5, 0, 2, 3, 5 };
	int x = getStepZonePos_DDR(player);

	for ( int i = 0; i < 10; i++ )
	{
		int arrow = columnSource[i];
		int frame = 3 - (gs.player[player].laneFlareTimers[i] / (HIT_FLASH_DISPLAY_TIME / 4)) % 4;
		if ( (i == 1 || i == 4) && !gs.isSolo )
		{
			continue;
		}
		if ( (i == 0 || i == 2 || i == 3 || i == 5) && !gs.isDoubles && !gs.isSolo )
		{
			continue;
		}
		if ( i >= 6 && gs.isSolo && !gs.isDoubles )
		{
			continue;
		}

		if ( gs.player[player].laneFlareTimers[i] > 0 )
		{
			// also draw a bright white flash on the spot for a marvelous
			if ( gs.player[player].laneFlareColors[i] == 0 || gs.player[player].laneFlareColors[i] == 3 )
			{
				draw_trans_sprite(rm.m_backbuf, m_flashes[frame][0], x-5, DDR_STEP_ZONE_Y-5);
			}

			// render a yellow flash for O.K.!
			if ( gs.player[player].laneFlareColors[i] == 4 )
			{
				draw_trans_sprite(rm.m_backbuf, m_flashes[frame][1], x-5, DDR_STEP_ZONE_Y-5);
			}

			// TODO: while holding a note ( == 2 )
		}		

		// render the fading arrow outline last
		if ( gs.player[player].laneFlareTimers[i] > 0 && gs.player[player].laneFlareColors[i] < 3 )
		{
			draw_trans_sprite(rm.m_backbuf, m_flares[arrow][frame][gs.player[player].laneFlareColors[i]], x, DDR_STEP_ZONE_Y);
		}
		x += 64;
	}
}
Exemple #13
0
void draw_display_bitmap(display_item *pDI, int undo, BITMAP *pScreen, RECT *pRect)
{
	BITMAP *pContents = (BITMAP*) pDI->pContents;
	BITMAP *pOldContents = pDI->pOldContents;
	BITMAP *p = (BITMAP*) (undo?pOldContents:pContents);
	RECT r = {pDI->x, pDI->y, undo?p->w:pDI->is_scaled?pDI->w:p->w, undo?p->h:pDI->is_scaled?pDI->h:p->h};
	RECT tmp_r;

	// dirty rectangle.
	if (pRect)
	{
		rect_copy(&tmp_r, pRect);

		if (pRect->x == -1)
		{
			rect_copy(pRect, &r);
		} else {
			rect_combine(pRect, &tmp_r, &r);
		}
	}

	if (undo)
	{
		// draw it
		if (pDI->is_saving)
			blit(pOldContents, pScreen, 0, 0, pDI->x, pDI->y, pOldContents->w, pOldContents->h);
	} else {
		// draw it.
		if (pDI->is_scaled)
		{
			if (pDI->is_saving)
				blit(pScreen, pOldContents, pDI->x, pDI->y, 0, 0, pDI->w, pDI->h);

			if (pDI->is_sprite)
			{
				stretch_sprite((BITMAP*) pContents, pScreen, pDI->x, pDI->y, pDI->w, pDI->h);
			} else {
				stretch_blit((BITMAP*) pContents, pScreen, 0, 0, pContents->w, pContents->h, pDI->x, pDI->y, pDI->w, pDI->h);
			}
		} else {
			if (pDI->is_saving)
				blit(pScreen, pOldContents, pDI->x, pDI->y, 0, 0, pContents->w, pContents->h);

			if (pDI->is_sprite)
			{
				draw_sprite(pScreen, pContents, pDI->x, pDI->y);
			} else
			if (pDI->is_translucent)
			{
				pDI->pParent->display_prev_table = color_map;
				color_map = pDI->type==DISPLAY_LIGHT?pDI->pParent->display_light_table:pDI->pParent->display_trans_table;
				draw_trans_sprite(pScreen, pContents, pDI->x, pDI->y);
				color_map = pDI->pParent->display_prev_table;
			} else {
				blit(pContents, pScreen, 0, 0, pDI->x, pDI->y, pContents->w, pContents->h);
			}
		}
	}
}
void renderStepZonePiece_DDR(BITMAP* src, int x, int y, int scale)
{
	// copy to a temporary space, scale there, then do a transparent blit
	clear_to_color(rm.m_temp64, 0x00000000); // argb format for the color
	int s = (64 * scale) / 100;
	int d = (64 - s) / 2;
	stretch_blit(src, rm.m_temp64, 0, 0, 64, 64, d, d, s, s);
	draw_trans_sprite(rm.m_backbuf, rm.m_temp64, x, y);
}
Exemple #15
0
void Spike::draw(bool editor){
    if(spd_x==0 && spd_y==0){
        draw_trans_sprite(BUFFER,RED_SPIKE_SPRITE,x,y);
    }else{
        draw_trans_sprite(BUFFER,GREEN_SPIKE_SPRITE,x,y);
    }
    if(editor && check_placed()){
        rect(BUFFER,x,y,x+SPIKE_LENG_X,y+SPIKE_LENG_Y,HIGHLIGHT_COLOR);
        int x2,y2;
        x2=x==min_x?max_x:min_x;
        y2=y==min_y?max_y:min_y;
        rect(BUFFER,x2,y2,x2+SPIKE_LENG_X,y2+SPIKE_LENG_Y,HIGHLIGHT_COLOR);
        line(BUFFER,
             x+SPIKE_LENG_X/2,y+SPIKE_LENG_Y/2,
             x2+SPIKE_LENG_X/2,y2+SPIKE_LENG_Y/2,
             HIGHLIGHT_COLOR);
    }
}
Exemple #16
0
void Lock::draw(bool editor){
    if(!opened){
        draw_sprite(BUFFER,GATE_SPRITE,gate_x,gate_y);
        draw_trans_sprite(BUFFER,KEY_SPRITE,key_x,key_y);
    }
    if(editor){
        draw_sprite(BUFFER,GATE_SPRITE,gate_x,gate_y);
        draw_trans_sprite(BUFFER,KEY_SPRITE,key_x,key_y);
        rect(BUFFER,gate_x,gate_y,
             gate_x+GATE_LENG_X,gate_y+GATE_LENG_Y,
             HIGHLIGHT_COLOR);
        rect(BUFFER,key_x,key_y,
             key_x+KEY_LENG_X,key_y+KEY_LENG_Y,
             HIGHLIGHT_COLOR);
        if(check_placed())
            line(BUFFER,gate_x+GATE_LENG_X/2,gate_y+GATE_LENG_Y/2,
             key_x+KEY_LENG_X/2,key_y+KEY_LENG_Y/2,HIGHLIGHT_COLOR);
    }
}
// Draw
void key_manager::draw( BITMAP *tempImage){
  if( !switch_flicked){
    // Background
    rectfill( tempImage, x+15, y+75, x   +209-80, y +83+ (key_queue.size() * 90), makecol( 155, 155, 155));

    // Draw keys
    for( unsigned int i = 0; i < key_queue.size(); i++){
      set_trans_blender(255, 255, 255, 255 - ((255/4) * i));
      draw_trans_sprite( tempImage, keys[key_queue.at(i).getValue()], x + 20,  -(i * 90)+y + 350);
    }
  }
}
Exemple #18
0
void Tabs::drawTab(BITMAP* bmp, JRect box, Tab* tab, int y_delta, bool selected)
{
  // Is the tab outside the bounds of the widget?
  if (box->x1 >= this->rc->x2 || box->x2 <= this->rc->x1)
    return;

  SkinTheme* theme = static_cast<SkinTheme*>(this->getTheme());
  int text_color;
  int face_color;

  // Selected
  if (selected) {
    text_color = theme->get_tab_selected_text_color();
    face_color = theme->get_tab_selected_face_color();
  }
  // Non-selected
  else {
    text_color = theme->get_tab_normal_text_color();
    face_color = theme->get_tab_normal_face_color();
  }

  if (jrect_w(box) > 2) {
    theme->draw_bounds_nw(bmp,
                          box->x1, box->y1+y_delta, box->x2-1, box->y2-1,
                          (selected) ? PART_TAB_SELECTED_NW:
                                       PART_TAB_NORMAL_NW, face_color);
    jdraw_text(bmp, this->getFont(), tab->text.c_str(),
               box->x1+4*jguiscale(),
               (box->y1+box->y2)/2-text_height(this->getFont())/2+1 + y_delta,
               text_color, face_color, false, jguiscale());
  }

  if (selected) {
    theme->draw_bounds_nw(bmp,
                          box->x1, box->y2, box->x2-1, this->rc->y2-1,
                          PART_TAB_BOTTOM_SELECTED_NW,
                          theme->get_tab_selected_face_color());
  }
  else {
    theme->draw_part_as_hline(bmp,
                              box->x1, box->y2, box->x2-1, this->rc->y2-1,
                              PART_TAB_BOTTOM_NORMAL);
  }

#ifdef CLOSE_BUTTON_IN_EACH_TAB
  BITMAP* close_icon = theme->get_part(PART_WINDOW_CLOSE_BUTTON_NORMAL);
  set_alpha_blender();
  draw_trans_sprite(doublebuffer, close_icon,
                    box->x2-4*jguiscale()-close_icon->w,
                    (box->y1+box->y2)/2-close_icon->h/2+1*jguiscale());
#endif
}
Exemple #19
0
void Alleg4Surface::drawRgbaSurface(const Surface* src, int srcx, int srcy, int dstx, int dsty, int w, int h)
{
  if (w < 1 || h < 1)
    return;

  set_alpha_blender();

  BITMAP* tmp = create_sub_bitmap(
    static_cast<const Alleg4Surface*>(src)->m_bmp,
    srcx, srcy, w, h);
  draw_trans_sprite(m_bmp, tmp, dstx, dsty);
  destroy_bitmap(tmp);
}
void renderDDRComboNum(int num, int size, int color, int x, int y)
{
	static int heights[] = { 43, 40, 48, 56, 64 };

	// copy to a temporary space, maybe scale there, then do a transparent blit
	clear_to_color(rm.m_temp64, 0x00000000); // argb format for the color
	if ( size == 0 )
	{
		blit(m_comboNums, rm.m_temp64, num*32, color*43, 0, 0, 32, 43);
	}
	else
	{
		stretch_blit(m_comboNums, rm.m_temp64, num*32, color*43, 32, 43, 0, 0, 32, heights[size]);
	}
	draw_trans_sprite(rm.m_backbuf, rm.m_temp64, x, y-heights[size]);
}
Exemple #21
0
// Fade in
void highcolor_fade_in(BITMAP* bmp_orig, int speed){
  BITMAP* bmp_buff = create_bitmap(SCREEN_W,SCREEN_H);
  BITMAP* str_orig = create_bitmap( SCREEN_W, SCREEN_H);
  stretch_sprite( str_orig, bmp_orig, 0, 0, SCREEN_W, SCREEN_H);

  if ( speed<=0)
    speed=16;

  for(int a=0; a<256; a+=speed){
    clear( bmp_buff);
    set_trans_blender( 0, 0, 0, a);
    draw_trans_sprite( bmp_buff, str_orig, 0, 0);
    vsync();
    stretch_sprite( screen, bmp_buff, 0, 0,  SCREEN_W, SCREEN_H);
  }
  stretch_sprite( screen, str_orig, 0, 0,  SCREEN_W, SCREEN_H);
}
void Tilemap::Draw(BITMAP* buffer) // Uncomment the code in here to turn fog of war on
{
    for (int i=0; i<(int)tiles.size(); ++i) {
        for (int j=0; j<(int)tiles[i].size(); ++j) {
            //if (visible[i][j] > 0)
                tiles[i][j].Draw(buffer, Vector(tile_dim.XInt()*i, tile_dim.YInt()*j));
        }
    }
    draw_sprite(buffer, grid, 0, 0);

    for (int i=0; i<(int)tiles.size(); ++i) {
        for (int j=0; j<(int)tiles[i].size(); ++j) {
            //if (visible[i][j] == 256)
                tiles[i][j].DrawObjects(buffer, Vector(tile_dim.XInt()*i, tile_dim.YInt()*j));
            /*else {
                set_trans_blender(0, 0, 0, 256 - visible[i][j]);
                drawing_mode(DRAW_MODE_TRANS, 0, 0, 0);
                rectfill(buffer, tile_dim.XInt()*i, tile_dim.YInt()*j, tile_dim.XInt()*(i+1)-1, tile_dim.YInt()*(j+1)-1,  Colour::Black());
                drawing_mode(DRAW_MODE_SOLID, 0, 0, 0);
            }*/
        }
    }

    if (need_to_draw_message) {
        int w = citizen_saved->w * message_scale;
        int h = citizen_saved->h * message_scale;
        int x = scr_w/2 - w/2;
        int y = scr_h/2 - h/2;
        stretch_sprite(buffer, citizen_saved, x, y, w, h);
    }

    if (need_to_draw_blood) {
        set_trans_blender(0, 0, 0, blood_alpha);
        drawing_mode(DRAW_MODE_TRANS, 0, 0, 0);
        draw_trans_sprite(buffer, blood, 0, 0);
        drawing_mode(DRAW_MODE_SOLID, 0, 0, 0);
    }
    if (!need_to_draw_blood && need_fresh_blood && blood != NULL) {
        clear_to_color(blood, Colour::MagicPink());
        int how_many_splatters = 4 + rand() % 6;
        for (int i=0; i<how_many_splatters; ++i)
            draw_sprite(blood, GetBloodSplatter(), rand() % 540, rand() % 300);
        need_fresh_blood = false;
    }
}
void renderDDRJudgement(int judgement, int time, int x, int y)
{
	BITMAP* source = m_judgements[judgement-1][0];

	if ( judgement >= 1 && judgement <= 8 )
	{
		int percent = time * 100 / JUDGEMENT_DISPLAY_TIME; // 0-100, how much time has passed?

		// happy judgements bounce slightly
		if ( judgement < GOOD && judgement >= MARVELLOUS )
		{
			if ( percent < 5 )
			{
				source = m_judgements[judgement-1][1];
			}
			else if ( percent < 10 )
			{
				source = m_judgements[judgement-1][2];
			}
		}
		// bads shake from side to side (goods are stationary)
		/*
		else if ( judgement == BAD )
		{
			percent = percent % 25;
			if ( percent < 13 )
			{
				x -= percent / 2;
			}
			else
			{
				x += (percent-12) / 2;
			}
		}
		*/
		// misses sink slightly
		else if ( judgement == MISS ) 
		{
			y = y + percent/10 - 4;
		}
	
		draw_trans_sprite(rm.m_backbuf, source, x-source->w/2, y-source->h/2);
	}
}
Exemple #24
0
void ALSoftwareGraphicsDriver::draw_sprite_with_transparency(BITMAP* piccy, int xxx, int yyy, int transparency)
{
    int screen_depth = bitmap_color_depth(virtualScreen);
    int sprite_depth = bitmap_color_depth(piccy);

    if (sprite_depth < screen_depth) {

        if ((sprite_depth == 8) && (screen_depth >= 24)) {
            // 256-col sprite -> truecolor background
            // this is automatically supported by allegro, no twiddling needed
            draw_sprite(virtualScreen, piccy, xxx, yyy);
            return;
        }
        // 256-col spirte -> hi-color background, or
        // 16-bit sprite -> 32-bit background
        BITMAP* hctemp=create_bitmap_ex(screen_depth, piccy->w, piccy->h);
        blit(piccy,hctemp,0,0,0,0,hctemp->w,hctemp->h);
        int bb,cc,mask_col = bitmap_mask_color(virtualScreen);

        if (sprite_depth == 8) {
            // only do this for 256-col, cos the blit call converts
            // transparency for 16->32 bit
            for (bb=0; bb<hctemp->w; bb++) {
                for (cc=0; cc<hctemp->h; cc++)
                    if (_getpixel(piccy,bb,cc)==0) putpixel(hctemp,bb,cc,mask_col);
            }
        }

        draw_sprite(virtualScreen, hctemp, xxx, yyy);
        destroy_bitmap(hctemp);
    }
    else
    {
        if ((transparency != 0) && (screen_depth > 8) &&
                (sprite_depth > 8) && (bitmap_color_depth(virtualScreen) > 8))
        {
            set_trans_blender(0,0,0, transparency);
            draw_trans_sprite(virtualScreen, piccy, xxx, yyy);
        }
        else
            draw_sprite(virtualScreen, piccy, xxx, yyy);
    }

}
Exemple #25
0
void shadowed_masked_image::sub_changed_hook(const zone* list)
{
  if (image)
  {
    set_multiply_blender(0,0,0,255);
    
    for (; list; list = list->next)
    {
      masked_blit(image, get_sub_buffer(), list->ax, list->ay, list->ax, list->ay, list->w() + 1, list->h() + 1);
  
      if (shadow_mask)
      {
        bmp_clip(get_sub_buffer(), list->ax, list->ay, list->bx, list->by);
        draw_trans_sprite(get_sub_buffer(), shadow_mask, x_offset, y_offset);
        bmp_clip(get_sub_buffer(), 0, 0, get_sub_buffer()->w, get_sub_buffer()->h);
      }
    }
  }
}
Exemple #26
0
/**
	fade.c - High Color Fading Routines

	Last Revision: 21 June, 2002

	Author: Matthew Leverton
**/
void ALSoftwareGraphicsDriver::highcolor_fade_in(BITMAP *currentVirtScreen, int speed, int targetColourRed, int targetColourGreen, int targetColourBlue)
{
    BITMAP *bmp_buff;
    BITMAP *bmp_orig = currentVirtScreen;

    if ((_global_y_offset != 0) || (_global_x_offset != 0))
    {
        bmp_orig = create_bitmap(_screenWidth, _screenHeight);
        clear(bmp_orig);
        blit(currentVirtScreen, bmp_orig, 0, 0, _global_x_offset, _global_y_offset, currentVirtScreen->w, currentVirtScreen->h);
    }

    bmp_buff = create_bitmap(bmp_orig->w, bmp_orig->h);
    int clearColor = makecol_depth(bitmap_color_depth(bmp_buff),
                                   targetColourRed, targetColourGreen, targetColourBlue);

    int a;
    if (speed <= 0) speed = 16;

    for (a = 0; a < 256; a+=speed)
    {
        int timerValue = *_loopTimer;
        clear_to_color(bmp_buff, clearColor);
        set_trans_blender(0,0,0,a);
        draw_trans_sprite(bmp_buff, bmp_orig, 0, 0);
        this->Vsync();
        _filter->RenderScreen(bmp_buff, 0, 0);
        do
        {
            if (_callback)
                _callback();
            Sleep(1);
        }
        while (timerValue == *_loopTimer);
    }
    destroy_bitmap(bmp_buff);

    _filter->RenderScreen(currentVirtScreen, _global_x_offset, _global_y_offset);

    if ((_global_y_offset != 0) || (_global_x_offset != 0))
        destroy_bitmap(bmp_orig);
}
void AnimFrame::Draw(BITMAP* bmp, Vector pos, float scale, bool vertical_flip, float rotation, int alpha)
{
    BITMAP* graphic = (BITMAP*)global_datafile[graphic_id].dat;
    if (graphic == NULL) {
        erlog("Graphic ID out of bounds in frame draw", 3);
        return;
    }
    if (bmp == NULL) {
        erlog("Buffer out of bounds in frame draw", 3);
        return;
    }
    if (scale == 0.0 && vertical_flip == false && rotation == 0.0 && (alpha >= 256 || alpha < 0)) {
        draw_sprite(bmp, graphic, pos.XInt(), pos.YInt());
        return;
    }
    if (alpha >= 256 || alpha < 0) {
        if (vertical_flip == false) {
            rotate_scaled_sprite(bmp, graphic, pos.XInt(), pos.YInt(), fixmul(ftofix(rotation), radtofix_r), ftofix(scale));
            return;
        }
        rotate_scaled_sprite_v_flip(bmp, graphic, pos.XInt(), pos.YInt(), fixmul(ftofix(rotation), radtofix_r), ftofix(scale));
        return;
    }


    float fdiagonal = sqrt(static_cast<float>(graphic->w*graphic->w + graphic->h*graphic->h));
    int diagonal = static_cast<int>(fdiagonal + 1);
    BITMAP* temp_bmp = create_bitmap(diagonal, diagonal);

    if (vertical_flip == false) {
        rotate_scaled_sprite(temp_bmp, graphic, 0, 0, fixmul(ftofix(rotation), radtofix_r), ftofix(scale));
    }
    else {
        rotate_scaled_sprite_v_flip(temp_bmp, graphic, 0, 0, fixmul(ftofix(rotation), radtofix_r), ftofix(scale));
    }

    set_trans_blender(0, 0, 0, alpha);
    drawing_mode(DRAW_MODE_TRANS, 0, 0, 0);
    draw_trans_sprite(temp_bmp, bmp, pos.XInt(), pos.YInt());
    drawing_mode(DRAW_MODE_SOLID, 0, 0, 0);
}
void renderDDRCombo(int combo, int time, int centerX, int color)
{
	int numDigits = 1, frame = 0;

	if ( combo < 4 )
	{
		return;
	}
	if ( combo > 9999 )
	{
		combo = 9999;
	}

	// this is for the counting-up scaling animation
	frame = time >= 100 ? 0 : (time / 25) + 1;

	// how many digits to render?
	if ( combo >= 1000 )
	{
		numDigits = 4;
	}
	else if ( combo >= 100 )
	{
		numDigits = 3;
	}
	else if ( combo >= 10 )
	{
		numDigits = 2;
	}

	// center the split of the word "combo" and the number
	int x = centerX;
	draw_trans_sprite(rm.m_backbuf, m_combo[color], x, DDR_COMBO_Y-21+35);

	for ( int i = 0, tens = 1; i < numDigits; i++, tens *= 10 )
	{
		int num = (combo/tens) % 10;
		renderDDRComboNum(num, frame, color, x - (i+1)*32, DDR_COMBO_Y+35);
	}
}
Exemple #29
0
void ALSoftwareGraphicsDriver::highcolor_fade_out(int speed, int targetColourRed, int targetColourGreen, int targetColourBlue)
{
    BITMAP *bmp_orig, *bmp_buff;

    int clearColor = makecol_depth(bitmap_color_depth(screen),
                                   targetColourRed, targetColourGreen, targetColourBlue);

    if ((bmp_orig = create_bitmap(_screenWidth, _screenHeight)))
    {
        if ((bmp_buff = create_bitmap(bmp_orig->w, bmp_orig->h)))
        {
            int a;
            _filter->GetCopyOfScreenIntoBitmap(bmp_orig, false);
            if (speed <= 0) speed = 16;

            for (a = 255-speed; a > 0; a-=speed)
            {
                int timerValue = *_loopTimer;
                clear_to_color(bmp_buff, clearColor);
                set_trans_blender(0,0,0,a);
                draw_trans_sprite(bmp_buff, bmp_orig, 0, 0);
                this->Vsync();
                _filter->RenderScreen(bmp_buff, 0, 0);
                do
                {
                    if (_callback)
                        _callback();
                    Sleep(1);
                }
                while (timerValue == *_loopTimer);
            }
            destroy_bitmap(bmp_buff);
        }
        destroy_bitmap(bmp_orig);
    }

    clear_to_color(screen, clearColor);
    _filter->RenderScreen(screen, _global_x_offset, _global_y_offset);
}
Exemple #30
0
void highcolor_fade_in(BITMAP *bmp_orig, int speed)
{
   BITMAP *bmp_buff;

    if ((bmp_buff = create_bitmap(SCREEN_W, SCREEN_H)))
    {
        int a;
        if (speed <= 0) speed = 16;
        
        for (a = 0; a < 256; a+=speed)
        {
            clear(bmp_buff);
            set_trans_blender(0,0,0,a);
            draw_trans_sprite(bmp_buff, bmp_orig, 0, 0);
            vsync();
            blit(bmp_buff, screen, 0,0, 0,0, SCREEN_W, SCREEN_H);
        }
        destroy_bitmap(bmp_buff);
    } 

    blit(bmp_orig, screen, 0,0, 0,0, SCREEN_W, SCREEN_H);
}