Bale
Minion
Thanks but as you just said, that skill doesn't have a use limit.
Could you add a brainchilled happening, like you did with mistletoed?
Thanks but as you just said, that skill doesn't have a use limit.
Such as the gnomitronic demodulator, or whatever it's called... only usable once per combat, but SS keeps trying to use it to stasis since it does <7 damage.
and this...He has roughly 40% spooky resist, probably a similar amount of physical resist. I'd thought I would do 146-166 +48 Spooky damage, but it came out to more like 86 +29 Spooky. Also, earworms did 40 damage, which looks like 20% of Max HP, not 10%.--Temporary man 21:13, 17 April 2010 (UTC)
Had +15 prismatic damage active, and only did 9 prismatic to him. Probably 40% resistance to all --RoyalTonberry 06:08, 29 June 2010 (UTC)
I thought these guys had scaling DR. --Flargen 06:19, 29 June 2010 (UTC)
The myst guys have 40% resist all and an additional soft damage cap. --Starwed 19:30, 17 July 2010 (UTC)
I agree that he must have a soft damage cap. I used combat items from big slimy cysts, and each one did only around 360 damage or so. I used 5 of them, one moxious maneuver (77 damage), and a beer bomb (41 damage) and killed him. --xiexingwu 05:46, 31 August 2010 (UTC)
Happenings are being reworked -- all actions which are enqueued officially "happen", and they use canonical id's where possible. A few of the happenings had to get renamed in this process such as "monkeybrained", "shieldthrown", and "mistletoed", since those have canonical names. Hopefully this doesn't screw with other scripts too much, but in the long run it will make our lives easier -- there will also be happened() functions for skills, items, and advevents, so you (and I) don't have to try to remember what arbitrary word I chose to use for a happening. Happenings which are not actions will still use such words, however.
float hitchance(string id) {
if (id == "jiggle") return 1.0;
if (have_equipped($item[operation patriot shield]) && happened("shieldthrown") && !happened("shieldcrit")) return 1;
// cunctatitis blocks 50% of everything, black cat blocks 50% of items/skills
float through = 1.0 - 0.5*to_int(have_effect($effect[cunctatitis]) > 0);
if (id == "attack") through *= 1.0 - fumble_chance();
else if (my_fam() == $familiar[black cat]) through *= 0.5;
float attack = my_stat(current_hit_stat().to_string()) + ((equipped_item($slot[weapon]) == $item[none] && equipped_item($slot[offhand]) == $item[none]&& have_skill($skill[master of the surprising fist]))? 20: 0);
matcher aid = create_matcher("(attack|use|skill) ?(\\d+)?",id);
if (aid.find()) switch (aid.group(1)) {
case "attack": break;
case "use": return (contains_text(to_string(m),"Naughty Sorceress") || m == $monster[bonerdagon]) ? through*0.75 : through;
case "skill": if (contains_text(to_string(m),"Naughty Sorceress") || m == $monster[bonerdagon])
through *= 0.5;
switch (to_int(aid.group(2))) {
case 0001: case 2003: case 7097: break; // beak, head, turtle*7 tails all have regular hitchance
case 7010: case 7011: case 7012: case 7013: case 7014: attack = 10; // bottle rockets are mox+10
case 7008: attack = my_stat(current_hit_stat().to_string()) + my_stat("Moxie"); break; // moxman
case 1003: if (have_skill($skill[eye of the stoat])) attack += 20; // ts
case 1004: case 1005: if (my_class() == $class[seal clubber] && item_type(equipped_item($slot[weapon])) == "club" &&
weapon_hands(equipped_item($slot[weapon])) == 2) return through; // lts
if ($ints[1003,1004] contains aid.group(2).to_int()) break;
if (have_skill($skill[eye of the stoat])) attack *= 1.25 + 0.05*to_int(my_class() == $class[seal clubber]); break;
case 2015: case 2103: attack = my_stat("Muscle") + 20; break; // kneebutt & head+knee
default: attack = 0;
}
}
return attack == 0 ? through : min(critchance() + (1.0 - critchance())*max(6.0 + attack - max(monster_stat("def"),0),0)/11.0,1.0)*through;
}
void discoBleeding() {
sort opts by -to_profit(value);
advevent best() {
int dmg;
foreach i, a in opts {
dmg = dmg_dealt(a.dmg);
if(dmg < monster_stat("hp") - 24 && a.meat >= 0)
return a;
}
return new advevent;
}
advevent act;
boolean done = false;
while(monster_stat("hp") > 24 && !done) {
act = best();
if(act.id != "") enqueue(act);
else done = true;
}
enqueue(get_action($skill[Disco Dance of Doom]));
enqueue(get_action($skill[Disco Face Stab]));
macro();
}
since I haven't seen any scripts taking full advantage of enqueueing yet
I have been experimenting with it but could never come up with a good way to go back one step in the queue and not the entire way to 0. In order for a return to 0 to be workable in my spamattack I need to rewrite the logic and the time to do that has not happened yet, and neither has the time to have time to do that.
Also, I'm marking your bug report Not a Bug. Look at line 829, which has been in BB since its early stages. I'm pretty sure you wouldn't want your script funkslinging Miniborgs at the NS.
Something like this, I think...
Code:void discoBleeding() { sort opts by -to_profit(value); advevent best() { int dmg; foreach i, a in opts { dmg = dmg_dealt(a.dmg); if(dmg < monster_stat("hp") - 24 && a.meat >= 0) return a; } return new advevent; } advevent act; boolean done = false; while(monster_stat("hp") > 24 && !done) { act = best(); if(act.id != "") enqueue(act); else done = true; } enqueue(get_action($skill[Disco Dance of Doom])); enqueue(get_action($skill[Disco Face Stab])); macro(); }
boolean main(int initround, monster foe, string pg)
{
page = act(pg);
discoBleeding();
}
advevent attack_downto(int targethp) {
float drnd = die_rounds();
sort opts by -to_profit(value);
sort opts by max(kill_rounds(value.dmg),drnd)*max(1,-value.meat);
foreach i,opt in opts {
if (monster_stat("hp") - dmg_dealt(oneround(opt)) < targethp) continue;
vprint("Attack action chosen: "+opt.id,8);
return opt;
}
return new advevent;
}
advevent attack_downto(int targethp) {
float drnd = die_rounds();
sort opts by -to_profit(value);
sort opts by max(kill_rounds(value.dmg),drnd)*max(1,-value.meat);
foreach i,opt in opts {
if (monster_stat("hp") - dmg_dealt(oneround(opt)) < targethp) continue;
vprint("Attack action chosen: "+opt.id,8);
return opt;
}
return new advevent;
}
while (monster_stat("hp") > 24 && enqueue(attack_downto(24))) {} // keep enqueueing until enqueue fails
enqueue(get_action($skill[Disco Dance of Doom])); // now do the combo (is this the right one btw?)
macro(get_action($skill[Disco Face Stab])); // we can save a line by using macro(advevent)