pro5 Posted March 16, 2007 Share Posted March 16, 2007 Gotcha...unfortuately the last public release is already trying to use more stats than are actually available. No one has done anything with 193/ss 37 yet, so if you want to experiment, feel free - it'll won't conflict with anything other than lack of ToB. It also hasn't seen extensive testing...so if anything odd turns up, you'll have interesting discoveries to report I'll try that, thanks. Of course, you've already EXTEND_BOTTOMed every creature script once, might as well do it again /teasing Whatever gets the job done... But let's hope I won't need to. Link to comment
pro5 Posted March 17, 2007 Share Posted March 17, 2007 193 doesn't seem to work. Looks like the stat is reset to default/different value immediately. The same script and effect using SCRIPTINGSTATE1 work fine. Link to comment
Nythrun Posted March 17, 2007 Share Posted March 17, 2007 Just double checking, but you used the scripting state opcode with a value of 36, right (cause stats.ids counts from one, but the opcode counts from zero)? Might actually have time to look at this today, I'll double check my work if I do Link to comment
pro5 Posted March 17, 2007 Share Posted March 17, 2007 I appended "193 PHANTASMALKILLERMARK" to STATS.IDS and picked corresponding value in NI listbox (which was 37) to set the scripting state in effect. As far as I can see, all values in this listbox are values from STATS.IDS minus 156. If NI is wrong here, then how come doing the same with SCRIPTINGSTATE1 works? Link to comment
Nythrun Posted March 17, 2007 Share Posted March 17, 2007 Because scripting state 2 also works, and stat 194 doesn't, I suppose. NI should display Scripting State 1 - 0 when you're assigning this opcode - if it's displaying Scripting State 1 - 1 then it's wrong. Link to comment
pro5 Posted March 17, 2007 Share Posted March 17, 2007 It's at 0 alright, but my appended stat is still at 37: Link to comment
Nythrun Posted March 17, 2007 Share Posted March 17, 2007 Ni is okay, as expected, then - and there's your first interesting discovery Pinning down exactly what stats over 176 do is bothersome, but it's going to have to be done at some point. I'm so not looking forward to it. I suppose you could try 188 also (though that's first on my list of things to investigate) - again, I can't really point you to an unused stat, as detectable spells is already using too many Link to comment
Nythrun Posted March 17, 2007 Share Posted March 17, 2007 Just ran through 193 again on a different .cre than the one I used initially, and it's fixed at zero. Interesting, though not really helpful yet. /edit For quicky searches, I'm just using this sort of thing (OUTER_SET "stat" to whatever) BEGIN ~morestats~ OUTER_PATCH ~asdf~ BEGIN SAY 0x0 ~0~ READ_LONG 0x0 "0s" SAY 0x0 ~1~ READ_LONG 0x0 "1s" SAY 0x0 ~2~ READ_LONG 0x0 "2s" SAY 0x0 ~3~ READ_LONG 0x0 "3s" SAY 0x0 ~4~ READ_LONG 0x0 "4s" SAY 0x0 ~5~ READ_LONG 0x0 "5s" SAY 0x0 ~6~ READ_LONG 0x0 "6s" SAY 0x0 ~7~ READ_LONG 0x0 "7s" SAY 0x0 ~8~ READ_LONG 0x0 "8s" SAY 0x0 ~9~ READ_LONG 0x0 "9s" SAY 0x0 ~10~ READ_LONG 0x0 "10s" SAY 0x0 ~11~ READ_LONG 0x0 "11s" SAY 0x0 ~12~ READ_LONG 0x0 "12s" SAY 0x0 ~13~ READ_LONG 0x0 "13s" SAY 0x0 ~14~ READ_LONG 0x0 "14s" SAY 0x0 ~15~ READ_LONG 0x0 "15s" SAY 0x0 ~16~ READ_LONG 0x0 "16s" SAY 0x0 ~17~ READ_LONG 0x0 "17s" SAY 0x0 ~18~ READ_LONG 0x0 "18s" SAY 0x0 ~19~ READ_LONG 0x0 "19s" SAY 0x0 ~20~ READ_LONG 0x0 "20s" SAY 0x0 ~100~ READ_LONG 0x0 "100s" END OUTER_SET "stat" = 188 <<<<<<<<zzstatsc.baf IF Global("FJStatsCheck","LOCALS",0) THEN RESPONSE #100 ReallyForceSpellRes("zzstatsc",Myself) DisplayStringHead(Myself,2642) SetGlobal("FJStatsCheck","LOCALS",1) END IF CheckStat(Myself,0,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%0s%) END IF CheckStatGT(Myself,0,%stat%) CheckStatLT(Myself,2,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%1s%) END IF CheckStatGT(Myself,1,%stat%) CheckStatLT(Myself,3,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%2s%) END IF CheckStatGT(Myself,2,%stat%) CheckStatLT(Myself,4,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%3s%) END IF CheckStatGT(Myself,3,%stat%) CheckStatLT(Myself,5,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%4s%) END IF CheckStatGT(Myself,4,%stat%) CheckStatLT(Myself,6,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%5s%) END IF CheckStatGT(Myself,5,%stat%) CheckStatLT(Myself,7,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%6s%) END IF CheckStatGT(Myself,6,%stat%) CheckStatLT(Myself,8,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%7s%) END IF CheckStatGT(Myself,7,%stat%) CheckStatLT(Myself,9,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%8s%) END IF CheckStatGT(Myself,8,%stat%) CheckStatLT(Myself,10,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%9s%) END IF CheckStatGT(Myself,9,%stat%) CheckStatLT(Myself,11,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%10s%) END IF CheckStatGT(Myself,10,%stat%) CheckStatLT(Myself,12,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%11s%) END IF CheckStatGT(Myself,11,%stat%) CheckStatLT(Myself,13,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%12s%) END IF CheckStatGT(Myself,12,%stat%) CheckStatLT(Myself,14,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%13s%) END IF CheckStatGT(Myself,13,%stat%) CheckStatLT(Myself,15,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%14s%) END IF CheckStatGT(Myself,14,%stat%) CheckStatLT(Myself,16,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%15s%) END IF CheckStatGT(Myself,15,%stat%) CheckStatLT(Myself,17,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%16s%) END IF CheckStatGT(Myself,16,%stat%) CheckStatLT(Myself,18,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%17s%) END IF CheckStatGT(Myself,17,%stat%) CheckStatLT(Myself,19,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%18s%) END IF CheckStatGT(Myself,18,%stat%) CheckStatLT(Myself,20,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%19s%) END IF CheckStatGT(Myself,19,%stat%) CheckStatLT(Myself,100,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%20s%) END IF CheckStatGT(Myself,100,%stat%) THEN RESPONSE #100 DisplayStringHead(Myself,%100s%) END >>>>>>>> COPY ~zzstatsc.baf~ ~override/zzstatsc.bcs~ EVALUATE_BUFFER COMPILE_BAF_TO_BCS COPY_EXISTING ~aataqah.cre~ ~override/zzstatsc.cre~ WRITE_SHORT 0x024 0x64 WRITE_SHORT 0x026 0x64 WRITE_BYTE 0x234 0x20 WRITE_ASCII 0x248 ~zzstatsc~ WRITE_ASCII 0x280 ~zzstatsc~ COPY_EXISTING ~spcl131.spl~ ~override/zzstatsc.spl~ DELETE_BYTES 0x72 (SOURCE_SIZE - 0x72) INSERT_BYTES 0x72 (0x28 + 0x60) WRITE_LONG 0x64 0x72 WRITE_SHORT 0x68 0x1 WRITE_LONG 0x6a (0x72 + 0x28) WRITE_SHORT 0x6e 0x0 WRITE_SHORT 0x70 0x0 WRITE_BYTE (0x72 + 0x00) 0x1 WRITE_SHORT (0x72 + 0x02) 0x4 WRITE_BYTE (0x72 + 0x0c) 0x5 WRITE_SHORT (0x72 + 0x0e) 0x1 WRITE_SHORT (0x72 + 0x10) 0x1 WRITE_SHORT (0x72 + 0x1c) 0x1 WRITE_SHORT (0x72 + 0x1e) 0x2 WRITE_SHORT (0x72 + 0x22) 0x1 WRITE_SHORT (0x72 + 0x24) 0x1 WRITE_SHORT (0x72 + 0x26) 0x1 WRITE_SHORT (0x9a + 0x00) ("stat" > 155 ? 0x11a : 0xe9) WRITE_BYTE (0x9a + 0x02) 0x2 WRITE_LONG (0x9a + 0x04) 0x1 WRITE_LONG (0x9a + 0x08) ("stat" > 155 ? ("stat" - 156) : "stat") WRITE_BYTE (0x9a + 0x0c) 0x0 WRITE_LONG (0x9a + 0x0e) 0x10 WRITE_BYTE (0x9a + 0x12) 0x64 WRITE_SHORT (0x9a + 0x30) 0xd8 WRITE_BYTE (0x9a + 0x32) 0x2 WRITE_LONG (0x9a + 0x34) 0x2 WRITE_LONG (0x9a + 0x38) 0x0 WRITE_BYTE (0x9a + 0x3c) 0x0 WRITE_LONG (0x9a + 0x3e) 0x100 WRITE_BYTE (0x9a + 0x42) 0x64 COPY_EXISTING ~zzstatsc.spl~ ~override/zzstatsr.spl~ WRITE_SHORT (0x9a + 0x00) 0xe9 WRITE_BYTE (0x9a + 0x02) 0x2 WRITE_LONG (0x9a + 0x04) 0x0 WRITE_LONG (0x9a + 0x08) 0x0 WRITE_BYTE (0x9a + 0x0c) 0x0 WRITE_LONG (0x9a + 0x0e) 0x1 WRITE_BYTE (0x9a + 0x12) 0x64 WRITE_SHORT (0x9a + 0x30) 0xe0 WRITE_BYTE (0x9a + 0x32) 0x2 WRITE_LONG (0x9a + 0x34) 0x0 WRITE_LONG (0x9a + 0x38) 0x0 WRITE_BYTE (0x9a + 0x3c) 0x0 WRITE_LONG (0x9a + 0x3e) 0x1 WRITE_BYTE (0x9a + 0x42) 0x64 Link to comment
pro5 Posted March 17, 2007 Share Posted March 17, 2007 I've quick-tested everything from 177 to 198: 177 = works 178 = works 179 = works 180 = works 181 = works 182 = works 183 = works 184 = works 185 = works 186 = works 187 = works 188 = doesn't work (target gains [Minor] Spell Turning animation effect) 189 = doesn't work 190 = doesn't work 191 = doesn't work 192 = doesn't work 193 = doesn't work 194 = doesn't work 195 = doesn't work 196 = doesn't work 197 = doesn't work 198 = doesn't work Not sure if it's of any use, but looks like it's possible to use negative parameter values and change stats below 156. I've only tested it with "-1" (= 0xFFFFFFFF), and checking for stat 155 IMPROVEDHASTE. So, can I use any of those 177-187, or they are a no-no? Link to comment
Nythrun Posted March 18, 2007 Share Posted March 18, 2007 That pretty much matches what I've got, although both 188 and 193 have worked conditionally (though I did not yet test that they're valid for longer than one script cycle). Please note that 182 - 187 inclusive are actually used by the engine and are not fully available REPLACE_TEXTUALLY ~^182 +.+~ ~182 UNKNOWNSS27~ REPLACE_TEXTUALLY ~^183 +.+~ ~183 ENABLEOFFSCREENAI~ REPLACE_TEXTUALLY ~^184 +.+~ ~184 EXISTANCEDELAY~ REPLACE_TEXTUALLY ~^185 +.+~ ~185 UNKNOWNSS30~ REPLACE_TEXTUALLY ~^186 +.+~ ~186 DISABLECHUNKING~ REPLACE_TEXTUALLY ~^187 +.+~ ~187 NOTURNABLE~ I also have yet to finish testing 176 - 181 with every non-instant opcode to verify that they're always available - if they're being set by some commonly used effect, then they're not available either. I haven't found one yet, but there may be some Here's two other ideas: Grab a seldom used, short duration stat (such as 156 WINGBUFFET) and set that scripting state to a value greater than what's already in use (say, 0x10 + spell level). Skip the stats entirely and have the spell set the targetted creature's area script to something you write that includes some shouting Link to comment
pro5 Posted March 18, 2007 Share Posted March 18, 2007 Hmm, perhaps I can make use of 178 WIZARD_RESIST_FEAR slot? This custom spell is not supposed to work on creatures immune to/protected from fear (I'm going through all item/spell/cre effects and adding "protection from spell" after each immunity opcode). I'm using short effect duration - fixed at 2 rounds, and it actually makes sense if everyone during this period will avoid casting HORROR at the CRE which failed initial saving throw here, since there's a chance it will be dead in several moments. Or another possibility - any stat which is responsible for stunned/held condition. I've decided to add "paralyzed with fear" stun effect to this spell, anyway. Link to comment
Nythrun Posted March 18, 2007 Share Posted March 18, 2007 That sounds even better I'd like to move FEARIMMUNITY or whatever it's finally called down to a lower stat (Sim, among others, have wanted stuff more applicable to lower level characters listed earlier and the ToB rubbish listed last) - but since there's been scant input on this matter so far, I don't think there's a preferential order just yet. Link to comment
Nythrun Posted March 20, 2007 Share Posted March 20, 2007 It appears stat 185 is being set by opcode 313 (denote high level ability) - neither parameter is preserved, the stat detects as zero if opcode 313 is not present on the creature, and detects at one if the opcode is present. Smallest discovery ever, I call dibs Link to comment
Nythrun Posted March 20, 2007 Share Posted March 20, 2007 Before I try to impose a canonical stat order on everyone, here's where I'm at. Not available: REPLACE_TEXTUALLY ~^115 +.+~ ~115 PROFICIENCYCLUB~ REPLACE_TEXTUALLY ~^156 +.+~ ~156 WINGBUFFET~ REPLACE_TEXTUALLY ~^157 +.+~ ~157 DEATHWARD~ REPLACE_TEXTUALLY ~^158 +.+~ ~158 LEVELDRAINIMMUNITY~ REPLACE_TEXTUALLY ~^165 +.+~ ~165 BLADEBARRIER~ REPLACE_TEXTUALLY ~^166 +.+~ ~166 MELEETHAC0BONUS~ REPLACE_TEXTUALLY ~^167 +.+~ ~167 MELEEDAMAGEBONUS~ REPLACE_TEXTUALLY ~^168 +.+~ ~168 MISSILEDAMAGEBONUS~ REPLACE_TEXTUALLY ~^169 +.+~ ~169 NOCIRCLE~ REPLACE_TEXTUALLY ~^170 +.+~ ~170 FISTTHAC0BONUS~ REPLACE_TEXTUALLY ~^171 +.+~ ~171 FISTDAMAGEBONUS~ REPLACE_TEXTUALLY ~^172 +.+~ ~172 TITLE1~ REPLACE_TEXTUALLY ~^173 +.+~ ~173 TITLE2~ REPLACE_TEXTUALLY ~^174 +.+~ ~174 NOVISUALS~ REPLACE_TEXTUALLY ~^175 +.+~ ~175 BACKSTABIMMUNITY~ REPLACE_TEXTUALLY ~^183 +.+~ ~183 ENABLEOFFSCREENAI~ REPLACE_TEXTUALLY ~^184 +.+~ ~184 EXISTANCEDELAY~ REPLACE_TEXTUALLY ~^185 +.+~ ~185 HIGHLEVELABILITY~ REPLACE_TEXTUALLY ~^186 +.+~ ~186 DISABLECHUNKING~ REPLACE_TEXTUALLY ~^187 +.+~ ~187 NOTURNABLE~ REPLACE_TEXTUALLY ~^188 +.+~ ~188 DISPLAYBAMSCRIPTINGSTATE32~ REPLACE_TEXTUALLY ~^189 +.+~ ~189 CHAOSSHIELD~ REPLACE_TEXTUALLY ~^190 +.+~ ~190 NPCBUMP~ REPLACE_TEXTUALLY ~^191 +.+~ ~191 CANUSEANYITEM~ REPLACE_TEXTUALLY ~^192 +.+~ ~192 ALWAYSBACKSTAB~ REPLACE_TEXTUALLY ~^193 +.+~ ~193 UNKNOWNSCRIPTINGSTATE37~ REPLACE_TEXTUALLY ~^194 +.+~ ~194 SPELLFAILUREINNATE~ REPLACE_TEXTUALLY ~^195 +.+~ ~195 NOTRACKING~ REPLACE_TEXTUALLY ~^196 +.+~ ~196 DEADMAGIC~ REPLACE_TEXTUALLY ~^197 +.+~ ~197 DISABLETIMESTOP~ REPLACE_TEXTUALLY ~^198 +.+~ ~198 NOSEQUESTER~ REPLACE_TEXTUALLY ~^199 +.+~ ~199 STONESKINGOLEM~ REPLACE_TEXTUALLY ~^200 +.+~ ~200 LEVELDRAIN~ REPLACE_TEXTUALLY ~^201 +.+~ ~201 AVATARREMOVAL~ The 33 or 34 stats that are available: 109 110 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 159 160 161 162 163 164 176 177 178 179 180 181 182 - maybe The stats added by the last BP version: IMMUNITY_ENCHANTMENT WEAPON_ENCHANTMENT SPELL_DEFLECTION PROTECTION_ALIGNMENT TRUE_SIGHT MIND_SHIELD PROTECTION_SPELL_LEVEL IMMUNITY_NECROMANCY PHYSICAL_MIRROR IMMUNITY_ABJURATION REGENERATION FIRE_SHIELD IMMUNITY_ALTERATION IMMUNITY_CONJURATION PROTECTION_MAGIC_WEAPONS SPELL_TURNING IMMUNITY_DIVINATION FREE_ACTION KHELBENS_WARDING_WHIP IMMUNITY_ILLUSION LEVEL_DRAINED COMBAT_BUFF ARMOR_SPELL STRENGTH_BUFF IMMUNITY_INVOCATION NEEDS_BREACH SPELL_TRAP GAZE_REFLECTION SPELL_SHIELD RESIST_FEAR DISPEL_BAD INSIDE_OF_CLOUD PROTECTION_NORMAL_WEAPONS DISPEL_GOOD Stuff I change: Things I've removed entirely: RESIST_FEAR: As of Fixpack beta3, fear immunity effects include a batch that modifies the morale break stat - this is no longer needed. PROTECTION_NORMAL_WEAPONS/PROTECTION_MAGIC_WEAPONS: No need for two stats, use value of 1 = normal weapons, 2 = +1 weapons, 3 = +2 weapons, 256 = protection magical weapons. Having one of these stats would be hugely useful and really needs retaining ARMOR_SPELL: This is not actually used by any in game resources; Horred noted this and then left the stat in anyway. Other creatures don't need to know which spells in which order you've cast to get an armor class, and you need to track the spells with variables anyway. SPELL_TRAP, SPELL_TURNING, SPELL_DEFLECTION: After a minor spell turning is overloaded with a fifth level spell, the stat would remain in place because it's not possible to directly bind new effects into opcodes. Only spell reflection would change strategies in any case. They'd be nice, but they'll never work correctly. COMBAT_BUFF: Again, Tenser's Transformation and its ilk do not actually set this stat - what is really meant to do? There are spell failure stats aplenty. LEVEL_DRAINED: Redundant Things I've considered removing: WEAPON_ENCHANTMENT: can be done with a while-equipped LOCALS, would only be useful if other creatures need to check your weapon enchantment level readily. Still on the fence about this one. Things I've added: NORMALMISSILEIMMUNITY: It's too important at lower levels Things that I'd like to expand: MIND_SHIELD: It's just Chaotic Commands, would be handy to check for fear/charm immunities seperately FREE_ACTION: Free action itself is an instant effect, really this is a bundle of spell immunities Things other people are using: MAGICMISSILEIMMUNITY/SHIELD: In Scs It's also worth noting that spells can be updated to set local variables that match their duration, type, and dispellabillity, if this is something that people find useful (uh huh uh huh!) This can't be done by script. /edit Forgot to add, I'd prefer to reserve 109 and 110 for their intended use as weapon proficiencies. While my implementation of the Blackjack sucks a whole lot, it's something other people have done too. Link to comment
devSin Posted March 20, 2007 Share Posted March 20, 2007 I agree with the reflection; HasBounceEffects() is comparatively reliable since the only false positive you'll really come across are bounce projectile effects (Physical Mirror). But the deflection effects are very tricky. Since it picks up immunity to effect, HasImmunityEffects() is completely worthless; I've never checked to see how (or if) any of the big scripters get around this (beyond using the broken detectable effects system). I used to hope that two of the unknown stats were set by the hardcoded visuals (the disc and whiffle ball), which would be reliable enough to detect bounce and immunity effects; hope is for suckers. Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.