Jump to content

Grammarsalad

Modders
  • Posts

    664
  • Joined

  • Last visited

Posts posted by Grammarsalad

  1. Still playing with the modified identify spell.

    I was able to access Imoen's (and then Minsc's) inventory.  When I tried casting on Jaheria, who had not yet joined my party, it showed Imoen's inventory instead.   Non-allies should be protected from the spell.  Anyway, very cool!  

    Also, I see how to restrict it to certain inventory slots.  As such, you could give warriors an ability to identify a weapon (and/or armor/helmets) if they can swing it around it for a bit (i.e. if they hold it in one of their weapon slots).  This, of course, makes them vulnerable to cursed items, but still, pretty cool and useful.  I'm going to totally add this to a kit/class revision I'm working on.  They're even going to do a little attack animation when the ability is activated.  Good fun!

    Edit: just comment out or delete all slots that you don't want them to access, e.g.:

    --    button {area 26 347 52 52  bam "STONSLOT" slotinfo "characters[id].equipment.personal0" action "B3Identify_IdentifySlot(characters[id].equipment.personal0)"}

    Basically, the only thing I know about lua is that "--" comments out a line

    I see how to create my own M_* file. 

    Just replace all instances of "M_B3IDEN" with the alternate name.  

    lol, brain getting tired

     

  2. I can think of one way to do it.

    You could probably do something with REPLACE_TEXTUALLY that modifies your files before you compile them. Like, you would still need to create a new token, let's call it THE_HESHE. You would put <PRO_HESHE> in all the normal places, including at the beginning of sentences, etc. But, you would then copy your own files and do a REPLACE_TEXTUALLY replacing all instances of ". <PRO_HESHE>" or ".  <PRO_HESHE>" with ". THE_HESHE". So, wherever your <PRO_HESHE> follows a period, it'll be replaced by the capitalized THE_HESHE. Otherwise, it'll stay lower case. Then you compile the file(s).

    Edit: er, making it useful for any mod would involve more. Sorry, missed that.

    Hmm, you could create a "workspace" in the override or the main folder, modify the text, copy it there, and then compile. I don't know all the details re compiling so I'm not sure how best to make this something like a replacement for the weidu command

  3. 2 hours ago, jastey said:

    Prepare for the times where you know almost everything of the game(s) - but from reading the ressources, not from experiencing it while playing. Where you start thinking in internal file names when referring to game characters and ares. Where sentences like "Why is the install failing at all and not just printing the ~WARNING: could not find %textToReplace% in %SOURCE_FILESPEC%~ line in my first case?" seem completely normal to you!

    Lol, so much this!  I don't even play the game except to test something.  Modding is just how I enjoy the game.  

  4. 5 hours ago, Bubb said:

    ...

    Any menu can be opened, the question is whether it is functional without it being invoked engine-side. What sort of things would you want to do with the HLA menu, for instance?

     

    I just deleted a few paragraphs of blah blah blah. lol.  Like, I was thinking of possible ways to bypass the limitation of not being able to select HLAs at character creation.  Basically, I'm just interested in finding out what sorts of things can be done.  Once I know that, the ideas will come.  Like, is the class button array considered a menu that you could access with this?  That's probably too good to be true.  Well, I also just get excited at the possibility of doing new things. 

  5. Okay, I have two Identify related findings:

    1) This does not work with SPWI110.spl.  The original identify needs to be added to hidespl.2da and a new spell needs to be added.

    2) the functions seems to work fine when run in two different mods on the same install.  That is, I made a wiz version in one mod and installed it (over grease).  Then, I made a cleric version in a second mod, and installed that (over detect evil).  Both work just fine in BG2EE.  I created a cleric/mage with the wiz and cleric version memorized.  She cast both, and they both worked.  The two quick and dirties are attached.  

    B_Identify.zip

  6. 1 hour ago, subtledoctor said:

    Sure!  I was offering the use of our shared GitHub account anyway :p  As long as Bubb is okay with it, of course, go to town.  I'll note what I was thinking of, meanwhile.

    As I said, I think it's already more or less ready to go with the .tph file and his example code.  Feed the function a filename and it should modify a spell to work as shown in the video.  My suggestion for avoiding duplication would be to either 1) add a marker file and wrap the necessary parts of the code in a function that won't run if the marker is already present; or 2) actually create a .2da file listing the RESREF or IDS name of each spell used with the function.  This way if the function was already used on a spell (like WIZARD_IDENTIFY) it could gracefully decline to run again and move on to the rest of a mod's installation; but if the spell is not already in the 2da list the function would run and then append the spell to the list for future reference....

     

    Yeah, it's easy peasy 123sy with the provided .tph.  I did it in about ~5 mins on one of my comps (not sure which one atm).  

    It might work fine to run it over and over again in different mods.  It's worth testing. (lol, I've borked my menu so many times with no long term repercussions).  Also, if necessary, we could tweak the tph to deal with multiple iterations if necessary (once we've figured out a few basics re what it actually does).  

    Quote

    My suggestion for actual implementation in a mod would be to run the function a few times to make custom subspells with 1/2/3 identification 'uses;' and then add a new version of Identify with several headers to cast each subspell at an appropriate level.  (It should be different from SPWI110, because we would want to actually remove the old inventory-screen method from the player; so SPWI110 should be added to HIDESPL.2da and SCRL75.itm would be altered to point to the new "Identify" spell.)

    Agreed.  Or, maaaybe SPWI110 could just be modified to cast the subspells(?)  Not sure if it'll work.  I used a modified detect evil spell.  I tried to modify SPWI110 and it didn't work.  But, I didn't change the headers, targets etc., and moved on to detect evil.  I just wanted to create a proof of concept.  

    Edit: Nope.  It doesn't work if you replace SPWI110 with an otherwise working version. You have to use a different res.  So, yes to adding SPWI110 to HIDESPL.2da.

    My thinking was also to investigate what else we can do; what other menus can be accessed (hla menu, proficiency menu, etc.)

  7. Subtledoctor has given me a clue--lol, it pays to look and think--so that's something to start with.   


    Actually, @subtledoctor if you don't mind, I wouldn't mind trying to dissect the code here to see if I can figure it out in a public forum (where people can point out my dumb errors and/or make use of any 'breakthroughs' )  

     

    Edit: Responding to this:

     

    Quote

    This is one of the coolest things I've ever seen.  "It's a thing of beauty, boss!"  (sorry, couldn't resist the Buffy reference - yes, I'm a nerd)  I wish I knew what to do with that TPH file but I'm such a newb at this, even that throws me.  So I'm with @Grammarsalad, please talk to me as if I were 5, please.  Maybe make that 3....

     

    Edit2:  I'll upload a quick and dirty example tomorrow if SD doesn't get to it first 

  8. On 1/18/2020 at 3:20 AM, Lauriel said:

    If you want to start a sentence in a dialogue with <PRO_HESHE>, it doesn't auto-capitalize.  Is there a way for me to force it to have the proper case?

    Are you using EE?  If so, you can create your own capitalized tokens that you would use in the appropriate places.  *looking*

    You need to append tokentxt.2da with (e.g.) the following (edit: er, just replace "Woman" with "She" and "Man" with "He"):

    
    2DA V1.0
    *
               TOKEN_TEXT PROTAGONIST STAT       VALUE      EQUALITY   STRINGT    STRINGF    
    0           RESERVE    *             *           *         *            *         *
    1      NP_MANWOMAN   1            35           2         0          Woman     Man

    The entries are fairly straightforward, but here is the infos 

    Also worth checking out:

     

     

     

  9. On 1/19/2020 at 8:29 PM, Bubb said:

    I'm by no means good at WeiDU, but here's a tph that I've thrown together that installs all the necessary code:

    B3Identify.tph 15.77 kB · 5 downloads

    B3_IDENTIFY_INSTALL performs the necessary UI patches - make sure to run this before subsequent tasks.

    A new identify spell that uses the menu has to be registered using a Lua function: B3Identify_RegisterResref("<resref no extension>", <use count>)

    You can use WeiDU to register spells by appending lines to a M_*.lua file, or you can use B3_IDENTIFY_REGISTER to throw the same definitions into the interface's main file, like so:

    
    LAF B3_IDENTIFY_REGISTER INT_VAR uses = 4 STR_VAR resref = ~B3IDEN~ END

     

    Once the spell is registered, any Opcode #234 originating from the resref will trigger the interface. Note that the Opcode has to originate from a *spell*, however, you can use the mechanism from an item by first passing it through an Opcode #326. (if you attempt to directly call from an item, the engine crashes)

    This is the small test tp2 I was using to install, as an example:

    
    INCLUDE ~bubb_test/B3Identify.tph~
    LAF B3_IDENTIFY_INSTALL END
    
    COPY ~bubb_test\copy\B3IDEN.SPL~ ~override~
        SAY 0x8 ~Bubb Test Identify~
    BUT_ONLY
    
    LAF B3_IDENTIFY_REGISTER INT_VAR uses = 4 STR_VAR resref = ~B3IDEN~ END

    Edit: The above should work for vanilla BG:EE, BG2:EE, and IWD:EE. UI Overhauls will probably break the pattern matching.

    Oh, this is sooo awesome!  I just made a priest version of Identify.  No big deal. 😛

    @Bubb

    Quote

    Edit: The above should work for vanilla BG:EE, BG2:EE, and IWD:EE. UI Overhauls will probably break the pattern matching.

    What about EET?  

    So, when you talk about this 'pattern matching'.  What sort of thing should we look for?  

    Edit: Please feel free to talk to me like I'm five... in fact, I'd prefer it! :D

    Edit2:  
     

    Quote

    I found out it's possible to hijack the contingency opcode & menu to open whatever interface you want on spell completion

    This sounds REALLY intriguing....
    Like, could it open the HLA menu?  

  10. 7 hours ago, subtledoctor said:

    Don't know.  That certainly won't work with any kits that are spontaneous casters already (which I guess doesn't really matter).  FnP and various other mods add new priest spells, and I don't know whether Pecca's mod will modify all priest spells, or only the vanilla game's spells.

    So... maybe?  I would be cool if it is compatible.  Worth testing!

    It should be a part of fnp at some point in the (hopefully) near future. Pecca gave me permission to incorporate SC in a few mods, including fnp.

  11. 2 hours ago, Daeros_Trollkiller said:

    I have been working on correcting the way projectiles and portrait icons are set in my mod to be more compatible with other mods, and I have run into a snag.  I have been able to get all the projectiles working correctly, but the portrait icons are another story.  I'm sure its probably a syntax issue, but I havent been able to get past it.  I am hoping someone could look at the code below for one of my spells, and tell me what I am doing wrong with trying to alter opcode 142.  I referenced the IWDification mod for this, but what was done there doesn't seem to be working for me:

     

     

    I'm not sure what might be wrong, but I do have working code. Let's see... Okay, I got help from Kjeron and Argent77 with is, so it is solid:

     

    https://github.com/UnearthedArcana/B_Spells/blob/master/B_Spells/lib/fnp_new_spells.tpa#L870

     

    Edit: I think this should also work in iwdee by now. I think the update I was waiting for has happened

  12. Is there a simple way to check if a spl makes use of a particular opcode via PATCH_IF?  I have to admit that I have not even tried as I have no idea how I would do such a thing, tbh.  I have code that does basically what I want it to, but it's...wasteful, so to speak.  That is, is applies INNER_ACTION much more often that it needs to.  I can give the code snippet in case it'll help:

    The problem is those darn INNER_ACTIONs...

    Spoiler


    
     COPY_EXISTING_REGEXP GLOB ~.[^abcde]*\.SPL~ ~override~
         PATCH_IF (~%SOURCE_SIZE%~ > ~0x71~) BEGIN
          READ_BYTE 0x001C type //Spell type
           PATCH_IF type = 1 BEGIN   //wiz spells
                READ_BYTE 0x0025 school //school type
             PATCH_IF school = 6   BEGIN //If invoker school (I think)
             READ_STRREF 0x50 ~sv_des~  //save description
                   PATCH_IF ("%sv_des%" STRING_CONTAINS_REGEXP "Saving Throw: None" != 0)  BEGIN   //if spell text does NOT contain this phrase:  Saving Throw: None
                    READ_LONG  0x0034 level //spell level
                 READ_LONG 0x0008 name //spell name
                READ_LONG 0x0050 desc //description
                READ_SHORT 0x007E target //Target-check
                READ_SHORT 0x0080 range //range-check
                    READ_LONG  0x64 abil_off ELSE 0
                    READ_SHORT 0x68 abil_num ELSE 0
             INNER_PATCH_SAVE cus0 ~%SOURCE_RES%~ BEGIN
             END
             INNER_PATCH_SAVE cus1 ~%cus0%~ BEGIN
              REPLACE_TEXTUALLY CASE_INSENSITIVE EXACT_MATCH ~SPWI~ ~B_S~
             END
             INNER_PATCH_SAVE cus2 ~%cus1%~ BEGIN
              REPLACE_TEXTUALLY CASE_INSENSITIVE EXACT_MATCH ~SPWM~ ~B_S~
             END
                 LPF cd_apply_batch STR_VAR array_name = b_dex_evoc_arrays_sr END  //dex apply spl
                 LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 15 parameter2 = %dex_ls% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~ls_15~ resource = EVAL ~%cus2%A~  END     // spl dex less than 15
                 LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 15 parameter2 = %dex_eq% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~is_15~ resource = EVAL ~%cus2%B~   END   // spl dex = 15
                 LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 16 parameter2 = %dex_eq% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~is_16~ resource = EVAL ~%cus2%C~   END   // spl dex = 15
                 LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 17 parameter2 = %dex_eq% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~is_17~ resource = EVAL ~%cus2%D~   END   // spl dex = 15
                 LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 18 parameter2 = %dex_eq% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~is_18~ resource = EVAL ~%cus2%E~   END   // spl dex = 15
                 LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 18 parameter2 = %dex_gr% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~gr_18~ resource = EVAL ~%cus2%F~   END   // spl dex = 15
        PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%A.SPL~ BEGIN  //
               INNER_ACTION BEGIN
               COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%A.SPL~
                 WRITE_LONG 0x0008 ~%name%~
                 WRITE_LONG 0x0034 level //spell level
                 WRITE_LONG 0x000c ~%name%~
                 WRITE_LONG 0x0054 ~%desc%~
                 WRITE_SHORT 0x007E target //Target-check
                 WRITE_SHORT 0x0080 range //range-check
               END
            END
        PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%B.SPL~ BEGIN  //
               INNER_ACTION BEGIN
               COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%B.SPL~
                 WRITE_LONG 0x0008 ~%name%~
                 WRITE_LONG 0x0034 level //spell level
                 WRITE_LONG 0x000c ~%name%~
                 WRITE_LONG 0x0054 ~%desc%~
                 WRITE_SHORT 0x007E target //Target-check
                 WRITE_SHORT 0x0080 range //range-check
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add = 1          //
                 END      //
               END
            END ELSE
            BEGIN
              INNER_ACTION BEGIN
               COPY_EXISTING ~%cus2%B.SPL~ ~override~
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add = 1          //
                 END      //
              END
            END
        PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%C.SPL~ BEGIN  //
               INNER_ACTION BEGIN
               COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%C.SPL~
                 WRITE_LONG 0x0008 ~%name%~
                 WRITE_LONG 0x0034 level //spell level
                 WRITE_LONG 0x000c ~%name%~
                 WRITE_LONG 0x0054 ~%desc%~
                 WRITE_SHORT 0x007E target //Target-check
                 WRITE_SHORT 0x0080 range //range-check
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add =  2          //
                 END      //
               END
            END ELSE
            BEGIN
              INNER_ACTION BEGIN
               COPY_EXISTING ~%cus2%C.SPL~ ~override~
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add = 2          //
                 END      //
              END
            END
            PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%D.SPL~ BEGIN  //
               INNER_ACTION BEGIN
               COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%D.SPL~
                 WRITE_LONG 0x0008 ~%name%~
                 WRITE_LONG 0x0034 level //spell level
                 WRITE_LONG 0x000c ~%name%~
                 WRITE_LONG 0x0054 ~%desc%~
                 WRITE_SHORT 0x007E target //Target-check
                 WRITE_SHORT 0x0080 range //range-check
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add = 3          //
                 END      //
               END
             END ELSE
            BEGIN
              INNER_ACTION BEGIN
               COPY_EXISTING ~%cus2%D.SPL~ ~override~
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add = 3          //
                 END      //
              END
            END
             PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%E.SPL~ BEGIN  //
               INNER_ACTION BEGIN
               COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%E.SPL~
                 WRITE_LONG 0x0008 ~%name%~
                 WRITE_LONG 0x0034 level //spell level
                 WRITE_LONG 0x000c ~%name%~
                 WRITE_LONG 0x0054 ~%desc%~
                 WRITE_SHORT 0x007E target //Target-check
                 WRITE_SHORT 0x0080 range //range-check
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add = 4          //
                 END      //
               END
             END ELSE
            BEGIN
              INNER_ACTION BEGIN
               COPY_EXISTING ~%cus2%E.SPL~ ~override~
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add = 4          //
                 END      //
              END
            END
          PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%F.SPL~ BEGIN  //
               INNER_ACTION BEGIN
               COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%F.SPL~
                 WRITE_LONG 0x0008 ~%name%~
                 WRITE_LONG 0x0034 level //spell level
                 WRITE_LONG 0x000c ~%name%~
                 WRITE_LONG 0x0054 ~%desc%~
                 WRITE_SHORT 0x007E target //Target-check
                 WRITE_SHORT 0x0080 range //range-check
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add = 5          //
                 END      //
               END
             END ELSE
            BEGIN
              INNER_ACTION BEGIN
               COPY_EXISTING ~%cus2%F.SPL~ ~override~
                 LPF ALTER_EFFECT_ADD
                   INT_VAR savebonus_add = 5          //
                 END      //
              END
            END
                END //evoc school
               END  //not no save(?)
            END  //wiz spells
          END   //source size
        BUT_ONLY


     


     

  13. Well, this is very cool.  I've found a reason to modify rather than set values of certain effect variables.  Well, I'm only doing this for savebonus, but I could see it being useful for duration, dicesize, dicenumber, or in certain cases, param1 or 2 (e.g. opcode 12).  

    That is, right now I'm doing a thing where characters get a bonus based on dexterity to save vs. certain spells, such as fireball.  Basically, I'm cloning the spell to cast different versions of itself based on the targets dexterity (i.e. giving bonuses for exceptional dex).  But, certain spells--and certain mods and potential mods--already impose save bonuses or penalties for certain spells, and I want the code to be as unintrusive--as unintrusive as a modification like this could be--as possible, so I just modified alter_spell accordingly (i.e. as a new zombie function).  

    If you're already building a more expansive ALTER_SPELL, maybe you can add a few subfunctions that, if ticked, would add/subtract the inputted value rather than set it to that value for a given field.  That is, for example, there could be a set_savebonus which could default to 0.  If the value of set_savebonus is 0, then savebonus acts as normal (i.e. it sets the save bonus).  But, if set_savebonus is non-zero, then save bonus = the previous value +/- savebonus.  Similar for other fields

    I'd offer my code, but it's not this sophisticated (I just hijacked savebonus).  So, instead, I'm offering the suggestion.    

  14. This one is like spell_to_innate, but allows for a few more options (including changing spell types from any kind to any other kind).  A lot of the text options are English only, but those can be traified to support other languages.  Also, it won't replace any sphere text in spells with custom sphere names, but those could easily be added.  


     

    Spoiler
    
    DEFINE_PATCH_FUNCTION ALTER_SPELL_TYPE
      INT_VAR   spell_type        = "-1" //Special: (0); Wizard: (1); Cleric: (2); Psionic: (3); Innate: (4); Song: (5)
                spell_level       = "-1"
                location          = "-1" //none: (0); spell: (2); innate (4) - ONLY Necessary if other than specified by Spell type (otherwise location automatically changed)
                school          = "-1" //school: 0 = None; 1 = abjuration; 2 = conjuration; 3= divination; 4 = enchantment; 5 = illusion; 6 = invoker; 7 = necromancer; 8 = transmuter; 9 = trueclass mage; 10 = wild mage only
                opposition_school = "-1" //opposition school: 0 = None; 1 = abjuration; 2 = conjuration; 3= divination; 4 = enchantment; 5 = illusion; 6 = invoker; 7 = necromancer; 8 = transmuter; 9 = trueclass mage; 10 = wild mage only
             prohibited_alignment = "-1" //or prohibited alignment: 1 = exclude chaotic; 2 = evil; 3 = good; 4 = ethical neutral; 5 = lawful 6 = moral neutral
                casting_graphics  = "-1" //school: 0 = None; 1 = abjuration; 2 = conjuration; 3= divination; 4 = enchantment; 5 = illusion; 6 = invoker; 7 = necromancer; 8 = transmuter; 9 = black sparks
                cleric_druid_only = "-1" //0 = no restrictions; 1 = cleric/Pal exclusive (priest spells); 2 = druid/Ran exclusive (priest spells); 3 = prohibit all
                wild_mage         = "-1" //0 = Wildmage restricted (wm can't cast); 1 = Wildmage can cast (mage spells)
                sec_type          = "-1" //0 = none; 1 = Spell Protection; 2 = Specific Protections; 3 = Illusonary Protections; 4 = Magic Attack; 5 = Divination Attack; 6 = Conjuration; 7 = Combat Protections; 8 = Contingency; 9 = Battleground; 10 = Offensive Damage; 11 = Disabling; 12 = Combination; 13 = Non-Combat; 14 = Dorn's Sword
                failure           = "-1" // 0 = Failure NOT possible; 1 = Failure possible (other values not accepted)
                indoors           = "-1" // 0 = cannot be cast indoors; 1 = can cast indoors (other values not accepted)
                surge             = "-1" // 0 = wildsurge not possible; 1 = wildsurge possible (other values not accepted)
                los               = "-1" // 0 = Line of Sight required; 1 = no LOS required (other values not accepted)
                combat            = "-1" // 0 = cannot be cast in combat; 1 = CAN be cast in combat (other values not accepted)
                hostile           = "-1" // 0 = not hostile spell; 1 = Hostile (other values not accepted) !
                spotting          = "-1" // 0 = no spotting(?); 1 = spotting (other values not accepted)
                target_invisible  = "-1" // 0 = cannot target invisible; 1 = can target invisibile (other values not accepted)
                silence           = "-1" // 0 = cannot cast when silenced; 1 = can cast when silenced (other values not accepted)
      STR_VAR   level_text        = "SAME"  //Only accepts values of 1-10, "Quest", "Cantrip" or "Orison"--Changes "Level: x" in spell description to "Level: y" where y is the value added TEST!!!
             school_text          = "SAME"  //Only necessary for user created schools
              sphere_text          = "SAME"  //Name of sphere
            c_icon            = "NO"  //"SAME" = %SOURCE_RES%C, "ADD" = %spell_res%C, else Exact name given of C icon
    
    BEGIN
      READ_LONG  0x64 abil_off ELSE 0
      READ_SHORT 0x68 abil_num ELSE 0
      READ_ASCII (abil_off + 0x04) bam (8) // reads the bam filename from ability
    
    // Handle spell_type if specified
    PATCH_IF (spell_type >= 0) //types: innate(4)
      BEGIN
        WRITE_SHORT 0x1C spell_type
      PATCH_IF (location < 0) BEGIN
        PATCH_IF (spell_type = 0) OR ((spell_type = 2) OR (spell_type = 4)) BEGIN
          FOR (index = 0 ; index < abil_num ; ++index) BEGIN
            WRITE_SHORT (abil_off + 0x02 + (0x28 * index)) spell_type
          END
        END ELSE BEGIN
          FOR (index = 0 ; index < abil_num ; ++index) BEGIN
            WRITE_SHORT (abil_off + 0x02 + (0x28 * index)) 0
          END
        END
      END
    END
      
      // Handle spell level if specified
    PATCH_IF (spell_level > 0)
      BEGIN
        WRITE_LONG  0x34 spell_level
      END
    // Handle location if specified
    PATCH_IF (location >= 0) BEGIN
      FOR (index = 0 ; index < abil_num ; ++index) BEGIN
        WRITE_SHORT (abil_off + 0x02 + (0x28 * index)) location
      END
    END
    
    // Handle opp school if specified (mage only)
    PATCH_IF (opposition_school >= 0) BEGIN
      PATCH_IF (opposition_school = 0) BEGIN
       WRITE_LONG 0x001e 0x0000 //General spells, exclude nobody
      END
      PATCH_IF (opposition_school = 1) BEGIN
       WRITE_LONG 0x001e 0x0040 //General spells, exclude abjuration
      END
      PATCH_IF (opposition_school = 2) BEGIN
       WRITE_LONG 0x001e 0x0080 //General spells, exclude conjuration
      END
      PATCH_IF (opposition_school = 3) BEGIN
       WRITE_LONG 0x001e 0x0100 //General spells, exclude divination
      END
      PATCH_IF (opposition_school = 4) BEGIN
       WRITE_LONG 0x001e 0x0200 //General spells, exclude enchanter
      END
      PATCH_IF (opposition_school = 5) BEGIN
       WRITE_LONG 0x001e 0x0400 //General spells, exclude illusion
      END
      PATCH_IF (opposition_school = 6) BEGIN
       WRITE_LONG 0x001e 0x0800 //General spells, exclude invoker
      END
      PATCH_IF (opposition_school = 7) BEGIN
       WRITE_LONG 0x001e 0x1000 //General spells, exclude necro
      END
      PATCH_IF (opposition_school = 8) BEGIN
       WRITE_LONG 0x001e 0x2000 //General spells, exclude transmutation
      END
      PATCH_IF (opposition_school = 9) BEGIN
       WRITE_LONG 0x001e 0x4000 //General spells, exclude trueclass mage
      END
      PATCH_IF (opposition_school = 10) BEGIN
       WRITE_LONG 0x001e 0x7fc0 //General spells, wildmage only
      END
    END
    //prohibited_alignment if specified (priest only)
    PATCH_IF (prohibited_alignment > 0) BEGIN
      PATCH_IF (prohibited_alignment = 1) BEGIN
       WRITE_LONG 0x001e 0x0001 //exclude chaotic
      END
      PATCH_IF (prohibited_alignment = 2) BEGIN
       WRITE_LONG 0x001e 0x0002 //exclude evil
      END
      PATCH_IF (prohibited_alignment = 3) BEGIN
       WRITE_LONG 0x001e 0x0004 //exclude good
      END
      PATCH_IF (prohibited_alignment = 4) BEGIN
       WRITE_LONG 0x001e 0x0020 //exclude ethical neutral
      END
      PATCH_IF (prohibited_alignment = 5) BEGIN
       WRITE_LONG 0x001e 0x0010 //exclude lawful
      END
      PATCH_IF (prohibited_alignment = 6) BEGIN
       WRITE_LONG 0x001e 0x0008 //exclude moral neutral
      END
    END 
    
    
    PATCH_IF (school >= 0) BEGIN
      PATCH_IF (school = 0) BEGIN
       WRITE_BYTE 0x0025 0x01 // None
      END
      PATCH_IF (school = 1) BEGIN
       WRITE_BYTE 0x0025 0x01 // Abjuration
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN //CHECK SPELLS: Wraithform, MMM, Fireshield
        REPLACE_TEXTUALLY ~Abjuration~ ~Abjuration~        //replacing old with new 
        REPLACE_TEXTUALLY ~Conjuration~ ~Abjuration~        //replacing old with new 
        REPLACE_TEXTUALLY ~Conjuration/Summoning~ ~Abjuration~        //replacing old with new 
        REPLACE_TEXTUALLY ~Alteration~ ~Abjuration~        //replacing old with new 
        REPLACE_TEXTUALLY ~Evocation~ ~Abjuration~        //replacing old with new 
        REPLACE_TEXTUALLY ~Necromancy~ ~Abjuration~        //replacing old with new 
        REPLACE_TEXTUALLY ~Enchantment/Charm~ ~Abjuration~        //replacing old with new 
        REPLACE_TEXTUALLY ~Illusion/Phantasm~ ~Abjuration~        //replacing old with new 
        REPLACE_TEXTUALLY ~(Divination)~ ~(Abjuration)~        //replacing old with new
        REPLACE_TEXTUALLY ~School: Divination~ ~School: Abjuration~        //replacing old with new
        END       //
      SAY_EVALUATED 0x50 ~%new_desc%~
      END  // end text change
      END
      PATCH_IF (school = 2) BEGIN
       WRITE_BYTE 0x0025 0x02 // Conjuration
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN //CHECK SPELLS: Wraithform, MMM, Fireshield
        REPLACE_TEXTUALLY ~Abjuration~ ~Conjuration~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration~ ~Conjuration~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration/Summoning~ ~Conjuration/Summoning~        //replacing old with new
        REPLACE_TEXTUALLY ~Alteration~ ~Conjuration~        //replacing old with new
        REPLACE_TEXTUALLY ~Evocation~ ~Conjuration~        //replacing old with new
        REPLACE_TEXTUALLY ~Necromancy~ ~Conjuration~        //replacing old with new
        REPLACE_TEXTUALLY ~Enchantment/Charm~ ~Conjuration~        //replacing old with new
        REPLACE_TEXTUALLY ~Illusion/Phantasm~ ~Conjuration~        //replacing old with new
        REPLACE_TEXTUALLY ~(Divination)~ ~(Conjuration)~        //replacing old with new
        REPLACE_TEXTUALLY ~School: Divination~ ~School: Conjuration~        //replacing old with new
        END
        //
      SAY_EVALUATED 0x50 ~%new_desc%~
      END  // end text change
      END
      PATCH_IF (school = 3) BEGIN
       WRITE_BYTE 0x0025 0x03 // (Divination)
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN //CHECK SPELLS: Wraithform, MMM, Fireshield
        REPLACE_TEXTUALLY ~Abjuration~ ~Divination~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration~ ~Divination~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration/Summoning~ ~Divination~        //replacing old with new
        REPLACE_TEXTUALLY ~Alteration~ ~Divination~        //replacing old with new
        REPLACE_TEXTUALLY ~Evocation~ ~Divination~        //replacing old with new
        REPLACE_TEXTUALLY ~Necromancy~ ~Divination~        //replacing old with new
        REPLACE_TEXTUALLY ~Enchantment/Charm~ ~Divination~        //replacing old with new
        REPLACE_TEXTUALLY ~Illusion/Phantasm~ ~Divination~        //replacing old with new
        END
        //
      SAY_EVALUATED 0x50 ~%new_desc%~
      END  // end text change
      END
      PATCH_IF (school = 4) BEGIN
       WRITE_BYTE 0x0025 0x04 // Enchanter
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN //CHECK SPELLS: Wraithform, MMM, Fireshield
        REPLACE_TEXTUALLY ~Abjuration~ ~Enchantment/Charm~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration~ ~Enchantment/Charm~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration/Summoning~ ~Enchantment/Charm~        //replacing old with new
        REPLACE_TEXTUALLY ~Alteration~ ~Enchantment/Charm~        //replacing old with new
        REPLACE_TEXTUALLY ~Evocation~ ~Enchantment/Charm~        //replacing old with new
        REPLACE_TEXTUALLY ~Necromancy~ ~Enchantment/Charm~        //replacing old with new
        REPLACE_TEXTUALLY ~Enchantment/Charm~ ~Enchantment/Charm~        //replacing old with new
        REPLACE_TEXTUALLY ~Illusion/Phantasm~ ~Enchantment/Charm~        //replacing old with new
        REPLACE_TEXTUALLY ~(Divination)~ ~(Enchantment/Charm)~        //replacing old with new
        REPLACE_TEXTUALLY ~School: Divination~ ~School: Enchantment/Charm~        //replacing old with new
        END
      SAY_EVALUATED 0x50 ~%new_desc%~   //
      END  // end text change
      END
      PATCH_IF (school = 5) BEGIN
       WRITE_BYTE 0x0025 0x05 // Illusion
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN //CHECK SPELLS: Wraithform, MMM, Fireshield
        REPLACE_TEXTUALLY ~Abjuration~ ~Illusion/Phantasm~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration~ ~Illusion/Phantasm~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration/Summoning~ ~Illusion/Phantasm~        //replacing old with new
        REPLACE_TEXTUALLY ~Alteration~ ~Illusion/Phantasm~        //replacing old with new
        REPLACE_TEXTUALLY ~Evocation~ ~Illusion/Phantasm~        //replacing old with new
        REPLACE_TEXTUALLY ~Necromancy~ ~Illusion/Phantasm~        //replacing old with new
        REPLACE_TEXTUALLY ~Enchantment/Charm~ ~Illusion/Phantasm~        //replacing old with new
        REPLACE_TEXTUALLY ~Illusion/Phantasm~ ~Illusion/Phantasm~        //replacing old with new
        REPLACE_TEXTUALLY ~(Divination)~ ~(Illusion/Phantasm)~        //replacing old with new
        REPLACE_TEXTUALLY ~School: Divination~ ~School: Illusion/Phantasm~        //replacing old with new
        END
      SAY_EVALUATED 0x50 ~%new_desc%~   //
      END  // end text change
      END
      PATCH_IF (school = 6) BEGIN
       WRITE_BYTE 0x0025 0x06 // Invoker
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN //CHECK SPELLS: Wraithform, MMM, Fireshield
        REPLACE_TEXTUALLY ~Abjuration~ ~Evocation~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration~ ~Evocation~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration/Summoning~ ~Evocation~        //replacing old with new
        REPLACE_TEXTUALLY ~Alteration~ ~Evocation~        //replacing old with new
        REPLACE_TEXTUALLY ~Evocation~ ~Evocation~        //replacing old with new
        REPLACE_TEXTUALLY ~Necromancy~ ~Evocation~        //replacing old with new
        REPLACE_TEXTUALLY ~Enchantment/Charm~ ~Evocation~        //replacing old with new
        REPLACE_TEXTUALLY ~Illusion/Phantasm~ ~Evocation~        //replacing old with new
        REPLACE_TEXTUALLY ~(Divination)~ ~(Evocation)~        //replacing old with new
        REPLACE_TEXTUALLY ~School: Divination~ ~School: Evocation~        //replacing old with new
        END
      SAY_EVALUATED 0x50 ~%new_desc%~    //
      END  // end text change
      END
      PATCH_IF (school = 7) BEGIN
       WRITE_BYTE 0x0025 0x07 // Necro
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN //CHECK SPELLS: Wraithform, MMM, Fireshield
        REPLACE_TEXTUALLY ~Abjuration~ ~Necromancy~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration~ ~Necromancy~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration/Summoning~ ~Necromancy~        //replacing old with new
        REPLACE_TEXTUALLY ~Alteration~ ~Necromancy~        //replacing old with new
        REPLACE_TEXTUALLY ~Evocation~ ~Necromancy~        //replacing old with new
        REPLACE_TEXTUALLY ~Necromancy~ ~Necromancy~        //replacing old with new
        REPLACE_TEXTUALLY ~Enchantment/Charm~ ~Necromancy~        //replacing old with new
        REPLACE_TEXTUALLY ~Illusion/Phantasm~ ~Necromancy~        //replacing old with new
        REPLACE_TEXTUALLY ~(Divination)~ ~(Necromancy)~        //replacing old with new
        REPLACE_TEXTUALLY ~School: Divination~ ~School: Necromancy~        //replacing old with new
        END
      SAY_EVALUATED 0x50 ~%new_desc%~      //
      END  // end text change
      END
      PATCH_IF (school = 8) BEGIN
       WRITE_BYTE 0x0025 0x08 // Transmutation
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN //CHECK SPELLS: Wraithform, MMM, Fireshield
        REPLACE_TEXTUALLY ~Abjuration~ ~Alteration~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration~ ~Alteration~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration/Summoning~ ~Alteration~        //replacing old with new
        REPLACE_TEXTUALLY ~Alteration~ ~Alteration~        //replacing old with new
        REPLACE_TEXTUALLY ~Evocation~ ~Alteration~        //replacing old with new
        REPLACE_TEXTUALLY ~Necromancy~ ~Alteration~        //replacing old with new
        REPLACE_TEXTUALLY ~Enchantment/Charm~ ~Alteration~        //replacing old with new
        REPLACE_TEXTUALLY ~Illusion/Phantasm~ ~Alteration~        //replacing old with new
        REPLACE_TEXTUALLY ~(Divination)~ ~(Alteration)~        //replacing old with new
        REPLACE_TEXTUALLY ~School: Divination~ ~School: Alteration~        //replacing old with new
        END
      SAY_EVALUATED 0x50 ~%new_desc%~     //
      END  // end text change
      END
      PATCH_IF (school = 9) BEGIN
       WRITE_BYTE 0x0025 0x09 // Generalist(?)
      END
    END
    
    PATCH_IF (cleric_druid_only >= 0) BEGIN
      PATCH_IF (cleric_druid_only = 0) BEGIN
          READ_BYTE    0x21 none //
          WRITE_BYTE   0x21 (none BAND 0b00000000)  // reset
      END
      PATCH_IF (cleric_druid_only = 1) BEGIN
          READ_BYTE    0x21 none //
          WRITE_BYTE   0x21 (none BAND 0b00000000)  // reset
          READ_BYTE    0x21 cleric //
          WRITE_BYTE   0x21 (cleric BOR 0b10000000)  // set to cleric
      END
      PATCH_IF (cleric_druid_only = 2) BEGIN
          READ_BYTE    0x21 none //
          WRITE_BYTE   0x21 (none BAND 0b00000000)  // reset
          READ_BYTE    0x21 druid //
          WRITE_BYTE   0x21 (druid BOR 0b01000000)  // set to druid
      END
      PATCH_IF (cleric_druid_only = 3) BEGIN
          READ_BYTE    0x21 none //
          WRITE_BYTE   0x21 (none BAND 0b00000000)  // reset
          READ_BYTE    0x21 no_wild //
          WRITE_BYTE   0x21 (no_wild BOR 0b11000000)  // Restrict everybody
      END
    END
    //wild_mage if specified
    PATCH_IF (wild_mage >= 0) BEGIN
      PATCH_IF (wild_mage = 0) BEGIN  //Wildmage Can't cast
          READ_BYTE    0x21 none //
          WRITE_BYTE   0x21 (none BAND 0b00000000)  // reset
          READ_BYTE    0x21 no_wild //
          WRITE_BYTE   0x21 (no_wild BOR 0b11000000)  // Restrict wildmage
      END
      PATCH_IF (wild_mage = 1) BEGIN //wildmage Can cast
          READ_BYTE    0x21 none //
          WRITE_BYTE   0x21 (none BAND 0b00000000)  // wildmage enabled
      END
    END
    //casting graphics if specified
    PATCH_IF (casting_graphics >= 0) BEGIN
      PATCH_IF (casting_graphics = 0) BEGIN
       WRITE_SHORT 0x0022 00 // c.graphics -schooless
      END
      PATCH_IF (casting_graphics = 1) BEGIN
       WRITE_SHORT 0x0022 12 // c.graphics -abjuration
      END
      PATCH_IF (casting_graphics = 2) BEGIN
       WRITE_SHORT 0x0022 14 // c.graphics -conjuration
      END
      PATCH_IF (casting_graphics = 3) BEGIN
       WRITE_SHORT 0x0022 16 // c.graphics -divination
      END
      PATCH_IF (casting_graphics = 4) BEGIN
       WRITE_SHORT 0x0022 11 // c.graphics -enchantment
      END
      PATCH_IF (casting_graphics = 5) BEGIN
       WRITE_SHORT 0x0022 13 // c.graphics -illusion
      END
      PATCH_IF (casting_graphics = 6) BEGIN
       WRITE_SHORT 0x0022 15 // c.graphics -invoker
      END
      PATCH_IF (casting_graphics = 7) BEGIN
       WRITE_SHORT 0x0022 09 // c.graphics -necromancy
      END
      PATCH_IF (casting_graphics = 8) BEGIN
       WRITE_SHORT 0x0022 10 // c.graphics -alteration
      END
      PATCH_IF (casting_graphics = 9) BEGIN
       WRITE_SHORT 0x0022 18 // c.graphics -black sparks
      END
    END
    // Handle sec school if specified
    PATCH_IF (sec_type >= 0) BEGIN
      PATCH_IF (sec_type = 0) BEGIN
       WRITE_LONG 0x0027 0x0000 //None
      END
      PATCH_IF (sec_type = 1) BEGIN
       WRITE_LONG 0x0027 0x01 //Spell Protection
      END
      PATCH_IF (sec_type = 2) BEGIN
       WRITE_LONG 0x0027 0x02 //-SPECIFICPROTECTIONS
      END
      PATCH_IF (sec_type = 3) BEGIN
       WRITE_LONG 0x0027 0x03 //-ILLUSIONARYPROTECTIONS
      END
      PATCH_IF (sec_type = 4) BEGIN
       WRITE_LONG 0x0027 0x04 //-MAGICATTACK
      END
      PATCH_IF (sec_type = 5) BEGIN
       WRITE_LONG 0x0027 0x05 //DIVINATIONATTACK
      END
      PATCH_IF (sec_type = 6) BEGIN
       WRITE_LONG 0x0027 0x06 //CONJURATION
      END
      PATCH_IF (sec_type = 7) BEGIN
       WRITE_LONG 0x0027 0x07 //0x07-COMBATPROTECTIONS
      END
      PATCH_IF (sec_type = 8) BEGIN
       WRITE_LONG 0x0027 0x08 //0x08-CONTINGENCY
      END
      PATCH_IF (sec_type = 9) BEGIN
       WRITE_LONG 0x0027 0x09 //0x09-BATTLEGROUND
      END
      PATCH_IF (sec_type = 10) BEGIN
       WRITE_LONG 0x0027 0x0a //-OFFENSIVEDAMAGE
      END
      PATCH_IF (sec_type = 11) BEGIN
       WRITE_LONG 0x0027 0x0b //0x0b-DISABLING
      END
      PATCH_IF (sec_type = 12) BEGIN
       WRITE_LONG 0x0027 0x0c //0x0c-COMBINATION
      END
      PATCH_IF (sec_type = 13) BEGIN
       WRITE_LONG 0x0027 0x0d //0x0d-NON-COMBAT
      END
      PATCH_IF (sec_type = 14) BEGIN
       WRITE_LONG 0x0027 0x0e //0x0e-DORNS_SWORD
      END
    END
    
    //Handle hostile if specified
    PATCH_IF (hostile = 0) BEGIN
          READ_BYTE    0x19 no_hos //
          WRITE_BYTE   0x19 (no_hos BAND 0b11111011)  //
    END
    PATCH_IF (hostile = 1) BEGIN
          READ_BYTE    0x19 hos //
          WRITE_BYTE   0x19 (hos BOR 0b00000100)  //
    END
    // Handle failure if specified
    PATCH_IF (failure = 0) BEGIN
       WRITE_LONG 0x0018 (THIS | 0x4000)       //No failure
    END
    PATCH_IF (failure = 1) BEGIN
          READ_BYTE    0x19 no_fail //
          WRITE_BYTE   0x19 (no_fail BAND 0b10111111)  // not no fail
    END
    
    // Handle indoors if specified
    PATCH_IF (indoors = 0) BEGIN
       WRITE_LONG 0x0018 (THIS | 0x2000)       //Not indoors
    END
    PATCH_IF (indoors = 1) BEGIN
          READ_BYTE    0x19 inside //
          WRITE_BYTE   0x19 (inside BAND 0b11011111)  // Can be cast indoors
    END
    
    // Handle surge if specified
    PATCH_IF (surge = 0) BEGIN
       WRITE_LONG 0x0018 (THIS | 0x8000)       //No wildsurge
    END
    PATCH_IF (surge = 1) BEGIN
          READ_BYTE    0x19 no_surge //
          WRITE_BYTE   0x19 (no_surge BAND 0b01111111)  // not no surge
    END
    
    // Handle spotting if specified
    PATCH_IF (spotting = 0) BEGIN
          READ_BYTE    0x19 spot //
          WRITE_BYTE   0x19 (spot BAND 0b11101111)  // not spot
    END
    PATCH_IF (spotting = 1) BEGIN
       WRITE_LONG 0x0018 (THIS | 0x1000)       //allow spotting?
    END
    
    //Handle LOS if specified
    PATCH_IF (los = 0) BEGIN
          READ_BYTE    0x19 see //
          WRITE_BYTE   0x19 (see BAND 0b11110111)  // LOS required
    END
    PATCH_IF (los = 1) BEGIN
          READ_BYTE    0x19 see //
          WRITE_BYTE   0x19 (see BOR 0b00001000)  //  los not required
    END
    
    // Handle combat if specified
    PATCH_IF (combat = 0) BEGIN
        READ_BYTE     0x001a fail //reads the byte
        WRITE_BYTE    0x001a (fail BOR 0b00000001)  // CANNOT cast in combat
    END 
    PATCH_IF (combat = 1) BEGIN
        READ_BYTE     0x001a fail //reads the byte
        WRITE_BYTE    0x001a (fail BAND 0b11111110)  // CAN cast in combat
    END
    //target_invisible if specified
    PATCH_IF (target_invisible = 0) BEGIN
        READ_BYTE     0x001b invis //reads the byte
        WRITE_BYTE    0x001b (invis BAND 0b11111110)  // CANNOT target invis
    END
    PATCH_IF (target_invisible = 1) BEGIN
        READ_BYTE     0x001b invis //reads the byte
        WRITE_BYTE    0x001b (invis BOR 0b00000001)  // CAN target invis
    END
    
    //silence if specified
    PATCH_IF (silence = 0) BEGIN
        READ_BYTE     0x001b speak //reads the byte
        WRITE_BYTE    0x001b (speak BAND 0b11111101)  // CANNOT cast silenced
    END
    PATCH_IF (silence = 1) BEGIN
        READ_BYTE     0x001b speak //reads the byte
        WRITE_BYTE    0x001b (speak BOR 0b00000010)  // CAN cast silenced
    END
    
    //level text if specified
    PATCH_IF ("%level_text%" STRING_COMPARE_CASE "SAME" != 0) BEGIN //
      
    //lev x to lev y
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN
        REPLACE_TEXTUALLY ~Level: Cantrip~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: Orison~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 1~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 2~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 3~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 4~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 5~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 6~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 7~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 8~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 9~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: 10~ ~Level: %level_text%~        //replacing old with new 
        REPLACE_TEXTUALLY ~Level: Quest~ ~Level: %level_text%~        //replacing old with new
        END
      SAY_EVALUATED 0x50 ~%new_desc%~
      END  // 
    
    END //end lev text
    
    //level school if specified
    PATCH_IF ("%school_text%" STRING_COMPARE_CASE "SAME" != 0) BEGIN //
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN
        REPLACE_TEXTUALLY ~Abjuration~ ~%school_text%~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration~ ~%school_text%~        //replacing old with new
        REPLACE_TEXTUALLY ~Conjuration/Summoning~ ~%school_text%~        //replacing old with new
        REPLACE_TEXTUALLY ~Alteration~ ~%school_text%~        //replacing old with new
        REPLACE_TEXTUALLY ~Evocation~ ~%school_text%~        //replacing old with new
        REPLACE_TEXTUALLY ~Necromancy~ ~%school_text%~        //replacing old with new
        REPLACE_TEXTUALLY ~Enchantment/Charm~ ~%school_text%~        //replacing old with new
        REPLACE_TEXTUALLY ~Illusion/Phantasm~ ~%school_text%~        //replacing old with new
        REPLACE_TEXTUALLY ~(Divination)~ ~(%school_text%)~        //replacing old with new
        REPLACE_TEXTUALLY ~School: Divination~ ~School: %school_text%~        //replacing old with new
        END
      SAY_EVALUATED 0x50 ~%new_desc%~
      END  //
    END//End school_text text
    
    //level school if specified
    PATCH_IF ("%sphere_text%" STRING_COMPARE_CASE "SAME" != 0) BEGIN //
      READ_LONG 0x50 "valid"
      PATCH_IF (%valid% >= 0) BEGIN // verify desc is valid
      READ_STRREF 0x50 ~desc~
        INNER_PATCH_SAVE new_desc ~%desc%~ BEGIN
          REPLACE_TEXTUALLY ~Sphere: Affliction~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Air~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: All~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Animal~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Animal, Summoning~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Benediction~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Chaos~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Charm~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Charm, Combat, Law~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Charm, Creation~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Charm, Law~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Charm, Protection~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Combat~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Combat, Necromantic~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Combat, Plant~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Combat, Summoning~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Creation~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Death~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Deception~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Destruction~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Divination~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Dread~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Earth~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental (Air)~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental Air~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental (Earth)~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental (Earth), Summoning~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental Earth~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental (Fire)~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental (Fire), Summoning~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental Fire~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental (Water)~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Elemental Water~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Exploration~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Fire~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Guardian~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Guardian, Creation~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Healing~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Knowledge~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Law~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Life~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Light~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Magic~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Necromantic~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Necromantic, Protection~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Numbers~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Perdition~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Plant~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Protection~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Protection, Elemental (Fire)~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Protection, Plant~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Protection, Sun~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Protection, Weather~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Shadow~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Summoning~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Sun~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Thought~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Travelers~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Universal~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Vigor~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: War~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Wards~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Wards, Elemental (Air)~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Water~ ~Sphere: %sphere_text%~        //replacing old with new
          REPLACE_TEXTUALLY ~Sphere: Weather~ ~Sphere: %sphere_text%~        //replacing old with new
    //missing sphere info
          REPLACE_TEXTUALLY ~1
    Range~ ~1
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~2
    Range~ ~2
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~3
    Range~ ~3
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~4
    Range~ ~4
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~5
    Range~ ~5
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~6
    Range~ ~6
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~7
    Range~ ~7
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~8
    Range~ ~8
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~9
    Range~ ~9
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~Quest
    Range~ ~Quest
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~Orison
    Range~ ~Orison
    Sphere: %sphere_text%
    Range~        //replacing old with new
          REPLACE_TEXTUALLY ~Cantrip
    Range~ ~Cantrip
    Sphere: %sphere_text%
    Range~        //replacing old with new
    END
      SAY_EVALUATED 0x50 ~%new_desc%~
      END  //
    END//End school_text text
    
    //c_icon if specified
    PATCH_IF ("%c_icon%" STRING_COMPARE_CASE "NO" != 0) BEGIN //
     PATCH_IF ("%c_icon%" STRING_COMPARE_CASE "SAME" = 0) BEGIN //
      WRITE_EVALUATED_ASCII 0x003a ~%SOURCE_RES%C~
     END  
     ELSE PATCH_IF ("%c_icon%" STRING_COMPARE_CASE "ADD" = 0) BEGIN
      WRITE_EVALUATED_ASCII 0x003a ~%spell_res%C~
     END
     ELSE
     BEGIN
      WRITE_EVALUATED_ASCII 0x003a ~%c_icon%~
     END
    END//End c_icon
    
    END

     

     

     

     

    Sample uses:

     

    Spoiler

     

     

    Changes Grease to an innate that cannot be cast indoors, but can be cast while silenced

    
    COPY_EXISTING ~SPWI101.SPL~ ~override/B_TEST.SPL~
           LPF  ALTER_SPELL_TYPE
              INT_VAR   spell_type = 4 //Special: (0); Wizard: (1); Cleric: (2); Psionic: (3); Innate: (4); Song: (5)
                        indoors    = 0 // 0 = cannot be cast indoors; 1 = can cast not indoors (other values not accepted)
                        silence    = 1 // 0 = cannot cast when silenced; 1 = can cast when silenced (other values not accepted)
              STR_VAR
              END

    Adds that spell as a druid/ranger exclusive in the FOOEY sphere

    
    ADD_SPELL ~override/B_TEST.SPL~ 1 1 ~TEST~ //
      LPF ALTER_SPELL_TYPE
       INT_VAR          spell_type = 2 //Special: (0); Wizard: (1); Cleric: (2); Psionic: (3); Innate: (4); Song: (5)
                        indoors    = 1 // 0 = cannot be cast indoors; 1 = can cast indoors (other values not accepted)
                        silence    = 0 // 0 = cannot cast when silenced; 1 = can cast when silenced (other values not accepted)
                        cleric_druid_only = 2 //0 = no restrictions; 1 = cleric/Pal exclusive (priest spells); 2 = druid/Ran exclusive (priest spells); 3 = prohibit all
       STR_VAR          sphere_text = "FOOEY"
      END      //
    

     

    adding "C" icon to the above spell

    
    LAF RES_NUM_OF_SPELL_NAME
      STR_VAR spell_name = ~TEST~
      RET spell_res
    END
    
    
    
    COPY ~-path/bam.bam~  ~override/%spell_res%C.bam~
    
    COPY_EXISTING ~%spell_res%.spl~ ~override~
      LPF ALTER_SPELL_TYPE
       INT_VAR
       STR_VAR  c_icon   = "ADD"
      END      //

     

     

     

     

    This one is a lot smaller.  It just adds additional prohibitions (i.e. school or alignment) to a given spell:


     

    Spoiler

     

    
    DEFINE_PATCH_FUNCTION SECOND_OPP
      INT_VAR   generalist        = "-1" //1 = Prohibit Generalist (too)(NO OTHER VALUES ACCEPTED) TEST
                abjuration        = "-1" //1 = Prohibit Abjuration (too)(NO OTHER VALUES ACCEPTED) TEST
                conjuration       = "-1" //1 = Prohibit Conjuration (too)(NO OTHER VALUES ACCEPTED) TEST
                divination        = "-1" //1 = Prohibit Divination (too)(NO OTHER VALUES ACCEPTED) TEST
                enchantment       = "-1" //1 = Prohibit Enchantment (too)(NO OTHER VALUES ACCEPTED) TEST
                illusionist       = "-1" //1 = Prohibit Illusion (too)(NO OTHER VALUES ACCEPTED) TEST
                invocation        = "-1" //1 = Prohibit Invocation (too)(NO OTHER VALUES ACCEPTED) TEST
                necromancy        = "-1" //1 = Prohibit Necromancy (too)(NO OTHER VALUES ACCEPTED) TEST
                alteration        = "-1" //1 = Prohibit Transmutation (too)(NO OTHER VALUES ACCEPTED) TEST
                chaos             = "-1" //1 = Prohibit Chaotic priests (too)(NO OTHER VALUES ACCEPTED) TEST
                evil              = "-1" //1 = Prohibit Evil priests (too)(NO OTHER VALUES ACCEPTED) TEST
                good              = "-1" //1 = Prohibit Good priests (too)(NO OTHER VALUES ACCEPTED) TEST
                geneutral         = "-1" //1 = Prohibit moral neutral priests (too)(NO OTHER VALUES ACCEPTED) TEST
                law               = "-1" //1 = Prohibit Lawful priests (too)(NO OTHER VALUES ACCEPTED) TEST
                lcneutral         = "-1" //1 = Prohibit Morally neutral priests (too)(NO OTHER VALUES ACCEPTED) TEST
      STR_VAR   
      
      BEGIN
    
    //Additional restricted schools if specified
    PATCH_IF (generalist = 1) BEGIN //Adds Generalist restriction to spell
        READ_BYTE     0x001f general //reads the byte
        WRITE_BYTE    0x001f (general BOR 0b01000000)  //
    END
    PATCH_IF (abjuration = 1) BEGIN //Adds abjuration restriction to spell
        READ_BYTE     0x001e abj //reads the byte
        WRITE_BYTE    0x001e (abj BOR 0b01000000)  //
    END
    PATCH_IF (conjuration = 1) BEGIN //Adds conjuration restriction to spell
        READ_BYTE     0x001e conj //reads the byte
        WRITE_BYTE    0x001e (conj BOR 0b10000000)  //
    END
    PATCH_IF (divination = 1) BEGIN //Adds divination restriction to spell
        READ_BYTE     0x001f div //reads the byte
        WRITE_BYTE    0x001f (div BOR 0b00000001)  //
    END
    PATCH_IF (enchantment = 1) BEGIN //Adds enchantment restriction to spell
        READ_BYTE     0x001f enc //reads the byte
        WRITE_BYTE    0x001f (enc BOR 0b00000010)  //
    END
    PATCH_IF (illusionist = 1) BEGIN //Adds illusionist restriction to spell
        READ_BYTE     0x001f enc //reads the byte
        WRITE_BYTE    0x001f (enc BOR 0b00000100)  //
    END
    PATCH_IF (invocation = 1) BEGIN //Adds invocation restriction to spell
        READ_BYTE     0x001f inv //reads the byte
        WRITE_BYTE    0x001f (inv BOR 0b00001000)  //
    END
    PATCH_IF (necromancy = 1) BEGIN //Adds necromancy restriction to spell
        READ_BYTE     0x001f nec //reads the byte
        WRITE_BYTE    0x001f (nec BOR 0b00010000)  //
    END
    PATCH_IF (alteration = 1) BEGIN //Adds alteration restriction to spell
        READ_BYTE     0x001f alt //reads the byte
        WRITE_BYTE    0x001f (alt BOR 0b00100000)  //
    END
    PATCH_IF (chaos = 1) BEGIN //Adds chaos restriction to spell
        READ_BYTE     0x001e cha //reads the byte
        WRITE_BYTE    0x001e (cha BOR 0b00000001)  //
    END
    PATCH_IF (evil = 1) BEGIN //Adds evil restriction to spell
        READ_BYTE     0x001e evi //reads the byte
        WRITE_BYTE    0x001e (evi BOR 0b00000010)  //
    END
    PATCH_IF (good = 1) BEGIN //Adds good restriction to spell
        READ_BYTE     0x001e god //reads the byte
        WRITE_BYTE    0x001e (god BOR 0b00000100)  //
    END
    PATCH_IF (geneutral = 1) BEGIN //Adds neutral moral restriction to spell
        READ_BYTE     0x001e nmor //reads the byte
        WRITE_BYTE    0x001e (nmor BOR 0b00001000)  //
    END
    PATCH_IF (law = 1) BEGIN //Adds law restriction to spell
        READ_BYTE     0x001e lw //reads the byte
        WRITE_BYTE    0x001e (lw BOR 0b00010000)  //
    END
    PATCH_IF (lcneutral = 1) BEGIN //Adds neutral ethical restriction to spell
        READ_BYTE     0x001e neth //reads the byte
        WRITE_BYTE    0x001e (neth BOR 0b00100000)  //
    END
    
      END

     

     

     

     

     

  15. Heh, I was actually thinking of Aristotle and his discussion of fatalism and naval battles. And Jarno is, I think, teasing out the difference between what we might call ' metaphysical' vs ' epistemic' possibility, which I think is relevant to the Aristotle conversation (lol, which I won't get into because, among other things, I feel like like this conversation is detailing this thread. At the same time, it felt rude to say nothing...I'm definitely not going to get into a 'my favorite philosopher is better than your favorite philosopher' discussion except to say that Kant rules; the ancients drool. :p)

     

    More on topic: @CamDawg will this ordering issue and/or auto pause issue be fixed eventually? Is it fixable?

  16. 9 hours ago, DavidW said:

    Though in any case there is absolutely no good reason to think that the chance of life in the universe is that low.

    Yeah, I'm curious where these probabilities come from. Nobody has found a way to take measurements from other possible worlds, have they? There is a(t least one) probabilistic argument for the existence of God that relies on the improbability of life. The idea is that, given that the probability of life is so low, and given that there is, in fact, life, it is more likely than not that some supernatural Being intervened to create life--and thus, it is more likely than not that such a Being exists

     

    Edit: of course, as Kant pointed out, such an argument, even if it is successful, doesn't actually get us to God. Maybe this being is just an alien Horror best described by Lovecraft. The only way to get to God is by some kind of ontological argument, and, well, that route is not promising...

  17. On 2/14/2019 at 10:12 AM, Jarno Mikkola said:

    Nope.

    1 is still one, even if you F it with a *10^x

    I think it's fairly clear that InKal was not saying that the probability that p, given p, is something other than 1:1. If I were to flip a coin, get heads, and ask: 'what are the chances of that result?', the most appropriate answer would be '~50%'. 

    Sure, you can point to the result and say, 'no, it's 100%' and, in a sense, you wouldn't be wrong. But, what has happened is that the question has been modified and that modified question has been answered.

×
×
  • Create New...