diff --git a/attack.cpp b/attack.cpp index c0cd1169..7e1b9653 100644 --- a/attack.cpp +++ b/attack.cpp @@ -690,6 +690,17 @@ EX void killMonster(cell *c, eMonster who, flagtype deathflags IS(0)) { } if(m == moLesser && !(kills[m] % 10)) degradeDemons(); + if(m == moLesser) { + if(kills[m] % 10) { + if(vid.bubbles_special) + drawBubble(c, 0xFF0000, its(kills[m]%10), 1); + } + else { + if(vid.bubbles_special) + drawBubble(c, 0xFF8000, "+1 XP", .8); + degradeDemons(); + } + } if(isIvy(c)) { pcount = 0; eMonster m = c->monst; diff --git a/config.cpp b/config.cpp index bbed2083..0980ede9 100644 --- a/config.cpp +++ b/config.cpp @@ -618,6 +618,10 @@ EX void initConfig() { addsaver(s2xe::qrings, "s2xe-rings"); addsaver(rots::underlying_scale, "rots-underlying-scale"); + + addsaver(vid.bubbles_special, "bubbles-special", 1); + addsaver(vid.bubbles_threshold, "bubbles-special", 1); + addsaver(vid.bubbles_all, "bubbles-special", 0); #if CAP_SHMUP multi::initConfig(); @@ -996,6 +1000,22 @@ EX void menuitem_sightrange(char c IS('c')) { dialog::add_action(edit_sightrange); } +EX void showSpecialEffects() { + cmode = vid.xres > vid.yres * 1.4 ? sm::SIDE : sm::MAYDARK; + gamescreen(0); + dialog::init(XLAT("extra graphical effects")); + + dialog::addBoolItem_action(XLAT("particles on attack"), (vid.particles), 'p'); + dialog::addBoolItem_action(XLAT("floating bubbles: special"), vid.bubbles_special, 's'); + dialog::addBoolItem_action(XLAT("floating bubbles: treasure thresholds"), vid.bubbles_threshold, 't'); + dialog::addBoolItem_action(XLAT("floating bubbles: all treasures"), vid.bubbles_all, 'a'); + dialog::addBoolItem_action(XLAT("background particle effects"), (vid.backeffects), 'b'); + + dialog::addBreak(50); + dialog::addBack(); + dialog::display(); + } + EX void showGraphConfig() { cmode = vid.xres > vid.yres * 1.4 ? sm::SIDE : sm::MAYDARK; gamescreen(0); @@ -1039,8 +1059,7 @@ EX void showGraphConfig() { dialog::addSelItem(XLAT("movement animation speed"), fts(vid.mspeed), 'm'); - dialog::addBoolItem(XLAT("extra graphical effects"), (vid.particles), 'u'); - dialog::addBoolItem(XLAT("background particle effects"), (vid.backeffects), 'p'); + dialog::addItem(XLAT("extra graphical effects"), 'u'); dialog::addBreak(50); dialog::addBack(); @@ -1055,7 +1074,7 @@ EX void showGraphConfig() { if((uni >= 32 && uni < 64) || uni == 'L' || uni == 'C') xuni = uni; - if(xuni == 'u') vid.particles = !vid.particles; + if(xuni == 'u') pushScreen(showSpecialEffects); else if(xuni == 'a') dialog::editNumber(vid.sspeed, -5, 5, 1, 0, XLAT("scrolling speed"), diff --git a/hyper.h b/hyper.h index e403e9d4..fd8d3350 100644 --- a/hyper.h +++ b/hyper.h @@ -250,7 +250,7 @@ struct videopar { ld xposition, yposition; bool grid; - int particles; + bool particles; int fsize; int flashtime; @@ -329,6 +329,7 @@ struct videopar { ld collignon_parameter; bool collignon_reflected; ld plevel_factor; + bool bubbles_special, bubbles_threshold, bubbles_all; }; extern videopar vid;