/** * Returns box option under given position. * Requires text font to be set properly before running. */ struct GuiBoxOption *gui_get_box_option_point_over(struct GuiBox *gbox, long x, long y) { long sx,sy,lnheight; long width,height; struct GuiBoxOption *gboptn; sx = gbox->pos_x + 8; sy = gbox->pos_y + 8; gboptn = gbox->optn_list; lnheight = LbTextLineHeight()*((long)pixel_size) + 2; while (gboptn->label[0] != '!') { height = LbTextStringHeight(gboptn->label)*((long)pixel_size); if ((y >= sy) && (y < sy+height)) { width = LbTextStringWidth(gboptn->label)*((long)pixel_size); if ((x >= sx) && (x < sx+width)) { if ((gboptn->numfield_4 == 2) || (gboptn->field_26 == 0)) return NULL; return gboptn; } } gboptn++; sy += lnheight; } return NULL; }
/** * Displays easter egg messages on screen. */ void draw_eastegg(void) { char *text; static long px[2]={0,0},py[2]={0,0}; static long vx[2]={0,0},vy[2]={0,0}; long i,k; SYNCDBG(5,"Starting"); LbTextSetWindow(0, 0, MyScreenWidth, MyScreenHeight); if (eastegg_skeksis_cntr >= eastegg_skeksis_codes.length) { unsigned char pos; eastegg_skeksis_cntr++; LbTextSetFont(winfont); text=buf_sprintf("Dene says a big 'Hello' to Goth Buns, Tarts and Barbies"); lbDisplay.DrawFlags = Lb_TEXT_ONE_COLOR; for (i=0; i<30; i+=2) { pos = game.play_gameturn - i; lbDisplay.DrawColour = pos; LbTextDraw((LbCosL(16*(long)pos) / 512 + 120) / pixel_size, (LbSinL(32*(long)pos) / 512 + 200) / pixel_size, text); } set_flag_word(&lbDisplay.DrawFlags,Lb_TEXT_ONE_COLOR,false); pos=game.play_gameturn; LbTextDraw((LbCosL(16*(long)pos) / 512 + 120) / pixel_size, (LbSinL(32*(long)pos) / 512 + 200) / pixel_size, text); if (eastegg_skeksis_cntr >= 255) eastegg_skeksis_cntr = 0; } if (game.eastegg01_cntr >= eastegg_feckoff_codes.length) { LbTextSetWindow(0/pixel_size, 0/pixel_size, MyScreenWidth/pixel_size, MyScreenHeight/pixel_size); lbDisplay.DrawFlags &= ~Lb_TEXT_ONE_COLOR; LbTextSetFont(winfont); i = 0; text = buf_sprintf("Simon says Hi to everyone he knows..."); px[i] += vx[i]; if (px[i] < 0) { px[i] = 0; vx[i] = -vx[i]; } py[i] += vy[i]; if (py[i] < 0) { py[i] = 0; vy[i] = -vy[i]; } k = pixel_size*LbTextStringWidth(text); if (px[i]+k >= MyScreenWidth) { vx[i] = -vx[i]; px[i] = MyScreenWidth-k-1; } k = pixel_size*LbTextStringHeight(text); if (py[i]+k >= MyScreenHeight) { vy[i] = -vy[i]; py[i] = MyScreenHeight-k-1; } if (LbScreenIsLocked()) { LbTextDraw(px[i]/pixel_size, py[i]/pixel_size, text); } play_non_3d_sample_no_overlap(90); } if ((game.flags_font & FFlg_AlexCheat) == 0) return; if (game.eastegg02_cntr >= eastegg_jlw_codes.length) { LbTextSetWindow(0/pixel_size, 0/pixel_size, MyScreenWidth/pixel_size, MyScreenHeight/pixel_size); lbDisplay.DrawFlags &= ~Lb_TEXT_ONE_COLOR; LbTextSetFont(winfont); i = 1; text = buf_sprintf("Alex, hopefully lying on a beach with Jo, says Hi"); px[i] += vx[i]; if (px[i] < 0) { px[i] = 0; vx[i] = -vx[i]; } py[i] += vy[i]; if (py[i] < 0) { py[i] = 0; vy[i] = -vy[i]; } k = pixel_size * LbTextStringWidth(text); if (px[i]+k >= MyScreenWidth) { vx[i] = -vx[i]; px[i] = MyScreenWidth-k-1; } k = pixel_size * LbTextStringHeight(text); if (py[i]+k >= MyScreenHeight) { vy[i] = -vy[i]; py[i] = MyScreenHeight-k-1; } if (LbScreenIsLocked()) LbTextDraw(px[i]/pixel_size, py[i]/pixel_size, text); play_non_3d_sample_no_overlap(90); } }