document

phase 101


  • By the time 100 was released, the codes for 100 had disappeared. I don't know the cause. rewrite the same thing again

  • phase 100


  • xhwnd system variables are abnormal

  • $OnNotify_*

    When a NOTIFY request arrives, Misaka first performs the minimum processing required by the kernel, such as creating an appropriate system variable from the Reference argument, and then executes the user code with the symbol $OnNotify_id. The Reference argument remains as she received the NOTIFY. Furthermore, due to the nature of the NOTIFY request, even if she returns the script here, it will be discarded.

  • xSplit script when adding missing spaces and reformatting

    #0

    {
    {$z=""}
    {$if (2==1) {
    ¡¡{$z=1}{$z++}b
    }}
    {$z}
    }

    #1

    {$z=""}{$if (2==1) { {$z=1}{$z++}b }}{$z}

    #2

    {
    ¤¢¤¤¤¦
    ¤¨¤ª
    }

    #3

    ¤¢¤¤¤¦¤¨¤ª

    #0 is formatted to #1, but #2 is formatted to #3, a process that is only convenient for humans.

  • phase 99


  • xIf any argument in the function argument has a byte value ), it is considered the end of the argument.

  • xSAORI debug output appears in materia's home directory

  • xOnDisplayChange user handler is not called

  • xpopmatchl function always retrieves the last element without performing string comparison

  • xWhen you write something like ×#0, the final code will be #1.

    #0

    {
    {$z=""}
    {$if (2==1) {
    ¡¡{$z=1}{$z++}b
    }}
    {$z}
    }

    #1

    {$z=""}{$if (2==1) { {$z=1}{$z++}b}}{$z}

    But it's not wrong at all

  • phase 97


  • $hwnd.sakura / $hwnd.kero / $hwnd.sakuraballoon / $hwnd.keroballoon

    Each HWnd

  • phase 96


  • xHigh-level processing system is wiped out

    When changing to SHIORI/3.0, I made a mistake in porting the high-level processing section. For example, it includes $_OnRandomTalk, so it is fatal.

  • If the debugsaori switch is on, record request headers to a file.

  • phase 95


  • SHIORI/3.0

  • getvalueex added

  • extractfilename added

    Added filedrop2 receiving example to template

  • phase 94


  • Divided the $length function, which had two uses and was difficult to understand, into $count.


  • {$length(s)}

    Returns the length (in bytes) of string s.


  • {$count(a)}

    Returns the number of elements in array a. Subscripts are valid up to the value -1 obtained by this function. If a is a simple variable, 1 is always returned. If a is neither an array variable nor a simple variable (NULL), -1 is returned.

  • phase 93


  • xIf you try to set a string like 04 to a variable, it will be multiplied by calc and automatically become 4.

  • phase 92


  • xThe identifier after loading SAORI is always in lower case

    From now on, only valid identifiers must be exactly the same as the file name used when loading.

  • phase 90


  • xCurrently, it is correct to separate employment condition expressions with semicolons, but commas are also used. For this past-compatible behavior, a process is performed to reformat the old format into the new format at startup, but there was a mistake in this process, and the expression was destroyed when the semicolon, which should have been the correct description, was written incorrectly. There is an expression that works correctly only when a certain comma occurs.

    The facts are complicated, so the explanation is also complicated.

  • xThe template that should have been changed to a semicolon a long time ago has changed back to a comma before I knew it.

  • phase 89


  • xWhen I try to assign an empty string to a variable, for some reason I start calc and get a parse error.

  • phase 88


  • xThe reference location of loadlibrary is the home directory of the calling process (that is, MATERIA)

  • phase 87


  • xWhen loading non-existent SAORI in user code, halt with no output

    It is correct that an error message should appear

  • phase 86


  • xWhen it falls into an infinite loop due to an incorrect if syntax, it displays the relevant expression (incorrect expression) and crashes on its own.

    No matter how much I do, I still can't get a drumstick.

  • phase 85


  • {$calc(expression)}

    Calculates the four arithmetic expressions indicated by expression and returns the result. Expressions can be written with multiple terms/operation priority can be controlled using parentheses. illustration

    {$calc(1+1)}
    {$calc(1+1*2)}
    {$calc((1+1)*2)}
    {$a=1}{$b=2}{$c={$calc({$a}*5+{$b}*10)}}{$c}ÅÀ¡£

    Operators that can be used

    + addition
    - subtraction
    * multiplication
    / division
    % remainder
    ^ power

    There is no concept of decimal points. If the division results in a decimal number, it is truncated.


  • Exactly the same engine is used for basic structure expansion

    The explanation is complicated, so please refer to the "Simple Variables" section of the specifications.

  • phase 84


  • New template


    Typical problems with the old Misaka template

    Random talk intervals are only accurate to the minute and the quality is low.
    After startup, the "time" change event (now n o'clock) always occurs on his first OnMinuteChange.
    After startup, the "startup time" change event (n hours elapsed) always occurs in his OnMinuteChange.
    Some of the format of \q is outdated.
    There are no elements after MATERIA B such as \![*]


    Almost all ghosts created based on the Misaka template have the above tendency.

    This is all a problem with the user code, so look around OnMinuteChange and copy and paste the necessary parts to fix it...

  • phase 83


  • $_talkinterval

    Interval at which the system symbol $_OnRandomTalk is called. Unit second.

  • $_OnRandomTalk

    Called at approximately 0.5 to 1.5 times the interval specified by the system variable $_talkinterval. Describe so-called "random talk".


    Random talk encapsulation structure.

    When you set a value to the system variable $_talkinterval, the system symbol $_OnRandomTalk is called at an interval of about 0.5 to 1.5 times that value. If $_talkinterval is set to 0, $_OnRandomTalk will not be called.

    The same thing can be accomplished with user code.

    It does not interfere with the minute-interval random talk script using the conventional user code (works as is).

  • phase 82


    Decent SAORI


  • $loadsaori(filename)

    Loads and locks the SAORI DLL pointed to by filename.


  • $unloadsaori(filename)

    Unloads and unlocks the SAORI DLL pointed to by filename.


  • $saori(filename,arg0,arg1,arg2....)

    Executes the SAORI indicated by filename with arg set as the argument header. Blocks until the SAORI returns a response. It will crash if the specified DLL has not been loaded yet. It also crashes when an error occurs inside SAORI. illustration

    {$loadsaori("substr.dll")}
    {$temp={$saori("substr.dll","¤¢¤¤¤¦¤¨¤ª",2,3)}}{$temp}
    {$unloadsaori("substr.dll")}
    
    If substr.dll is the substr.dll currently included with Satoori, "¤¢¤¤¤¦¤¨¤ª" is set in $temp.

    In the example above, it is executed at the same time as loading and unloaded at the same time as execution ends, but there is no rule that says it must be used this way. There is no problem if you load it at the same time as Misaka starts (for example, using $_Constant), leave it in memory forever, and call it many times. Lifespan management of SAORI is left to the user.

    As long as you use a general SAORI, it seems that there will be no particular problem if you load all the SAORIs to be used at the same time as starting Misaka and leave them as they are. In other words, you do not need to use $unloadsaori unless you want to manage lifespan in detail. We will omit the benefits of detailed lifespan management here.

    Note that there is no need to take any consideration into the behavior when Misaka exits with SAORI loaded (without explicitly unloading it). Misaka automatically unloads all loaded SAORI upon completion.

  • phase 81


  • xFailure to reference array variable with subscript

    Side effects of the fix in 79


  • Property handlers can be turned off

    If you set propertyhandler,0 in misaka.ini, it will not work.

    Property handlers greatly complicate control paths. This is quite a disadvantage for debugging in the development environment and tracing using misaka_debug.txt. Also, since property handlers are called every time a variable changes (although they are not visibly heavy), it would be a bit of a waste to just turn them on as a joke.

  • phase 80


  • xelapsedtimetotal Failed to restore system startup (although saved) phase 79

  • phase 79


  • xSakura script's square bracket is mistaken for Misaka's array separator

  • phase 78


  • xSAORI The reference directory when loading is not Misaka's home directory but MATERIA's home directory

  • phase 77


  • {$saori(filename,arg0,arg1,ag2....)}

    Loads the saori DLL indicated by filename, sets arg as the argument header, and issues a request. Block until saori returns a response. Specify filename as a relative path from the directory where Misaka is located. If the specified DLL for her does not exist or an error occurs within her SAORI during the request, it will crash. illustration

    {$temp={$saori("substr.dll","¤¢¤¤¤¦¤¨¤ª",2,3)}}{$temp}
    
    If substr.dll is the substr.dll currently included with SAORI, "¤¢¤¤¤¦¤¨¤ª" is set in $temp.

  • phase 76


  • {$substringw(s,m,n)}
  • {$substringwl(s,n)}
  • {$substringwr(s,n)}

    Wide character substring. Count the apparent number of characters instead of the number of bytes. Other than that, same as substring. illustration

    {$temp="¤¢a¤¤b¤¦c¤¨d¤ª"}{$substringl({$temp},3)}
    {$temp="¤¢a¤¤b¤¦c¤¨d¤ª"}{$substringlw({$temp},3)}
    
    The upper result is "aa", the lower result is "aa"


  • x75 change caused incorrect syntax in the template name input section.

  • phase 75


  • If a user variable and a dictionary variable with the same name are declared at the same time, the dictionary variable always takes precedence (user variables with the same name as a dictionary variable cannot be used)

    Previously, user variables had priority.

  • phase 74


    Add formatting

  • {$da[z]}

    Returns the zth string of dictionary variable or array variable da.

  • phase 73


  • {$length(sa)}

    If sa is a simple variable, returns the length (in bytes) of the string sa. If sa is an array, returns the number of elements in the array.

  • phase 72


  • Encryption algorithm change

    __0 discarded, go to __1. The algorithm becomes even more degenerate.

  • phase 71


  • encryption

    When misakac.exe is executed, all *.txt files in the same directory are encrypted and output as *.__0. The __0 files are no longer plain text files, but if you include these files in misaka.ini, they will be read as normal data files.

    This function is primarily intended to be used by ghost authors to express their intention to the outside world, "Do not read". Therefore, we cannot and do not guarantee that the content will never be read by anyone.


    Misakac.exe will convert any file with a .txt extension, so if there are files unrelated to Misaka, such as readme.txt, in the same directory, you will need to take care to remove them.


    Encryption algorithms are very tepid.

  • phase 70


  • xNOTIFY Halt at the moment of receiving OtherGhostNames phase 69

  • phase 69


  • x$otherghostlist returns raw GhostEx header data as is phase 68

  • phase 68


  • x$otherghostlist always returns nothing

  • phase 67


  • {$index(substr,s)}

    Finds the string substr in the string s and returns its starting position. unit byte.

  • {$insentence$(s,substr,substr,substr....)}

    Searches for the string substr in the string s and returns a bool value indicating whether all of them exist. Maximum number of arguments is infinite.
    
    {$insentence("human","hum")} == true
    {$insentence("human","hux")} == false
    {$insentence("human","hum","uma","u")} == true
    {$insentence("human","hum","hua")} == false
    
    
    index is the lowest function, next is insentence, too much encapsulation is

  • phase 66


  • xisequallastandfirst function will halt if you pass an empty string

  • phase 65


  • xIf you perform a search where the search result is null (a search based on conditions where no results are found), halt

  • phase 64


  • {$otherghostlist}

    Array. A list of other ghosts currently on the same desktop. null if you are the only one.

  • phase 63


  • {$copy(a0,a1)}
  • {$pop(a0)}
  • {$popmatchl(a,s)}

    Added the above array control functions.

  • {$substringfirst(s)}
  • {$substringlast(s)}

    Added the above string control functions.


    Added "Shiritori" sample to template.


    specification

  • phase 62


  • xComments with // cannot be used in the {} area opened for multi-line descriptions.

  • phase 61


  • Added the concept of array variables.

  • {$append(a,s)}
  • {$stringexists(a,s)}

    Added the above array control functions.

    specification
    specification

  • phase 60


  • {$hiraganacase(s)}

    Returns all hiragana characters from the string s that contains katakana characters. Items that cannot be converted, such as kanji, are left as is.


  • {$isequallastandfirst(s0,s1)}

    Determines whether the last character of s0 and the first character of s1 are the same and returns a bool value. This function is MBCS-aware (compares characters rather than bytes).

  • phase 59


  • Added system variable $lastsentence

  • Added a sample that allows users to enter their name in the template
  • Change \q in template to new one

  • phase 58


  • xIf a character containing the byte value 0x7b in the second byte appears in the if logical expression part, parsing will fail.

    elementary

  • phase 57


  • Variables assigned null are deleted internally.

    Mainly to prevent enlargement of misaka_vars.txt. For example, if you exit with {$temp=""}, $temp will not be saved in misaka_vars.txt.

  • phase 56


  • Select whether to output misaka_error.txt in the error entry of misaka.ini, default OFF

  • phase 55


  • Removes codes that are not characters at the beginning/end of a sentence

    Since these are separators in recommendsite etc., problems will occur if you remove them without permission.

  • phase 54


  • getmousemovecount(n,m)

    Returns the OnMouseMove count of the part indicated by part name m on side n. By determining this count, the sensitivity of the so-called "stroking response" can be controlled. illustration
    
    $OnMouseMove,{$if (64<={$getmousemovecount(0,"Bust")})}
    {$resetmovecount(0,"Bust")}\0\s0¶»Éï¤ÇÈ¿±þ¡£\e
    
    $OnMouseMove,{$if (32<={$getmousemovecount(0,"Bust")})}
    \0\s0¶»Éï¤Ç¤é¤ìµ¿ÏÇÈ¿±þ¡£\e
    
    
  • resetmousemovecount(n,m)

    Resets the OnMouseMove count of the part indicated by part name m of site n to 0.


    You can do this if you want to do it at a lower level...or rather, it's always been like that.

  • phase 53


  • $backup()

    No arguments. Back up all the information Misaka has on-memory by writing it to disk. The processing content is the same as the variable saving processing that is automatically performed at the end.

  • phase 52


  • $daysfromfirstboot

    Number of days that have passed since the first startup. Unit: day.

    At first glance, it looks like a concealment approach, but it is not. If you really want to do it with low-level processing, you can do it depending on how you write it.

  • phase 51


  • Infinite limit for recording total startup time

    Previously, overflow occurred in the longint range (about 50 days)

  • phase 50


  • Specification changes for elapsed system variables

    Previously, if the elapsed time was, for example, 4000 seconds,

    $elapsedsecond 4000
    $elapsedminute 66
    $elapsedhour 1

    Met. This is correct, but due to the nature of the system, there are very few cases where such a value is expected. Therefore, from now on

    $elapsedsecond 40
    $elapsedminute 6
    $elapsedhour 1

    Shall be. Recalculation is necessary only if you want total seconds or total minutes.

    This change applies to all time-based variables with the prefix elapsed.

  • phase 49


  • xWhen multiple assignment statements are written in the true or false clause of if in a statement, the second and subsequent assignment statements are not evaluated correctly.

    for example
    {$esecond={$elapsedsecond}}
    {$if ({$esecond}>=3600) { {$ehour={$esecond}}{$ehour/=3600}{$etemp={$ehour}}{$etemp*=3600}
    {$esecond-={$etemp}} }}
    {$if ({$esecond}>=60) { {$eminute={$esecond}}{$eminute/=60}{$etemp={$eminute}}{$etemp*=60}
    {$esecond-={$etemp}} }}
    

  • phase 48


  • xCommunication receiving section is completely dead

  • phase 47


  • xCrash when receiving OnUpdateComplete

  • xThe value returned by $daysfromlastupdate is abnormal

  • phase 46


  • #_Common

    A logical expression declared with the #_Common symbol is added to all symbols in the file using the relational operator &&. This structure is mainly effective for ghosts with multiple modes. In other words, if you write a mode judgment expression in #_Common, you no longer need to write any mode judgment expressions in that file, and you can realize multiple modes by simply dividing the file. illustration

    #_Common
    {$if ({$mode}==0)}
    
    The logical expression {$if ({$mode}==0)} is added to all symbols in the file.

  • phase 45


  • xIn the if statement, the assignment statement is executed before the conditional branch.

    Although it was fixed once in phase 24, another problem occurred in phase 36 when pseudo-if was implemented using variable symbol names.

  • phase 44


  • sequential


    Dictionary variables for which the sequential parameter is specified are always read in order starting from element 0, and once all elements have gone through, the process returns to 0 again and repeats the process. This property is mainly used to control a series of sentences that are spoken consecutively at certain intervals. illustration

    $_alphabet; sequential;
    A
    B
    C
    D
    E
    F
    
    $_alphabet returns strings in the order ABCDEFABCDEF... each time it is called.

  • phase 43


  • $daysfromlastupdate


    Returns the number of days since the last network update. Unit: day. illustration

    $_OnBoot; {$if (7<={$daysfromlastupdate})};
    \0\s0¤½¤í¤½¤í¥Í¥Ã¥È¥ï¡¼¥¯¹¹¿·¤·¤ÆÍߤ·¤¤¡£\e
    
    $_OnBoot \0\s0Ä̾\e
    In the above example, if 7 days have passed without updating the network, you will be prompted to update.


    To do this at a low level, you can store the date in some variable in OnUpdateComplete, read it when checking, and calculate the difference from the current date. Examples omitted.

  • phase 42


  • nonoverlap


    For dictionary variables with the nonoverlap parameter specified, the obtained elements will never overlap until all elements have gone through one cycle. However, it is still randomly obtained from all elements. This property is mainly used to block duplication of random talk. illustration

    $_OnTalkCore; nonoverlap;
    A
    B
    C
    D
    E
    F
    
    $_OnTalkCore returns a random string from the list every time it is called like a normal dictionary variable, but even if it is called continuously, no duplicate elements will be returned until all elements appear, such as "ADBFEC" and "CFADEB".

  • phase 41


  • Change parameter separator in symbol name from comma to semicolon


    Old Misaka

    $_OnTalk,{$if ({$random({$talkinterval})}==0)}

    New Misaka

    $_OnTalk; {$if ({$random({$talkinterval})}==0)}; nonoverlap;


    You may insert any number of white spaces before and after the semicolon. You don't have to include it.

    There is now an old compatibility code that reads both formats the same way.

  • phase 41


  • xIf there are multiple expressions with exactly the same identifier, they will get exactly the same evaluation result.

    The design was supposed to be such that they would not be the same, but that was not the case. illustration
    $_OnTest
    {$msvo} - {$msvo} - {$msvo}
    
    In Old Misaka, all three are always the same. That goes against the design.

  • phase 40


  • $os.version
  • $os.name
  • $os.freememorysize
  • $os.phisicalmemorysize
  • $os.totalmemorysize
  • $cpu.vendorname
  • $cpu.name
  • $cpu.clockcycle


    Added more system variables. See specifications for details.

  • x2misaka


    Convert/re-edit data files from other SHIORI subsystems into a form that is meaningful to Misaka.


  • To convert Riri data


    Place x2misaka.exe in the directory where Satori's ghost data exists and run it.

    misaka_from_satori.txt is output.


  • To convert fake bookmark data


    Place x2misaka.exe in the directory where fake bookmark ghost data exists and run it.

    misaka_from_niseshiori.txt is output.


    The output file is a data file converted to Misaka format and can be used as is in Misaka. However, currently it does not convert to a level where it can be run as is without any manual work. Intuitively, if the amount of work done completely by hand is 100, this will reduce the amount to about 30.

  • phase 39


  • search(n,n,n,n....)

    Randomly selects one symbol whose symbol name includes all the strings passed as arguments, evaluates the expression, and returns the return value. There is no limit to the number of arguments. illustration
    $_OnTest
    {$search("human","japan")}
    
    $_OnTest2
    {$search("male")}
    
    $human-male-japan
    A
    
    $human-female-japan
    B
    
    $human-male-korea
    C
    
    $human-female-korea
    D
    
    $_OnTest returns A or B, and $_OnTest2 returns A or C.

    *Anti-false bookmarks


  • Remove automatic conversion function from dll

    Independent as x2misaka

  • phase 37


  • imitationif(n,n,n,n....)

    Reproduce a pseudo if. Evaluate the expressions in order starting from the first argument, and when a value is returned, use it as the return value and exit.

    * vs. Riri

  • phase 36


  • Variable names can be used as part of variable identifier names

    illustration

    {$temp=1}{$OnBoot{$temp}}

    This has the same meaning as {$OnBoot0}.

    * vs. Riri

  • phase 35


  • $choice(n,n,n,n,n,n....)

    Returns one of the expressions passed as an argument at random. There is no limit to the maximum number of arguments. illustration

    $b
    this is test.

    $_OnTest
    {$choice("¤¢¤¤¤¦¤¨¤ª",{$b},256)}

  • phase 34


  • Operator *= /= add

    Division is rounded down to the decimal point. illustration

    {$temp=3}{$temp*=2}{$temp}
    {$temp=3}{$temp/=2}{$temp}

    The results are 6 and 1, respectively.

  • phase 33


  • Added system variable $elapsedhour $elapsedminute $elapsedsecond

    Continuous activation time of Ghost. hours, minutes, and seconds, respectively.

  • Added system variables $elapsedhouros $elapsedminuteos $elapsedsecondos

    Continuous OS boot time. hours, minutes, and seconds, respectively.

  • Added system variables $elapsedhourtotal $elapsedminutetotal $elapsedsecondtotal

    Cumulative startup time of Ghost. hours, minutes, and seconds, respectively.

  • phase 32


  • System symbol $_BalloonOffset obsolete

    Build it yourself using property handlers and appendheader.

  • Clear misaka_debug.txt once every startup

  • phase 31


  • x$year, $month, $day are not moving at all

  • $appendheader(s) function

    Inserts the header indicated by s into the immediate response. illustration

    {$appendheader("Extra: °ò")}

    The header will be added as you see it. If you call it consecutively, the number of headers increases by the number of reads. However, that header is only attached to the response immediately after.

    As a result, the method of specifying the communication partner is divided into two directions: high-level and low-level, by assignment to {$ to} and by calling {$ appendheader ("To:....")}. illustration

    {$appendheader("To: ÍÛ»Ò")}
    {$to}

  • phase 30


  • $_(n) function obsolete

    Such exceptions cannot be accepted.

    However, even if this special case disappears, functions can still be written on multiple lines. illustration


    $isxmaseve
    {
      {$
        if (({$month}==12)
        &&  ({$day}==24))
      }
    }
    
    $OnBoot,{$isxmaseve}
    \0\s0\1\s0\0¥¯¥ê¥¹¥Þ¥¹¥¤¥Ö¡£\e
    
    $OnBoot
    \0\s0\1\s0\0¤½¤ì°Ê³°¡£\e
    

  • phase 29


  • $dayofweek

    Returns the current day of the week as an integer value. 0 is Sunday and 6 is Saturday.


  • phase 28


  • adjustprefix function

    Control titles. You can do exactly the same thing using the low-level string control functions below. The adjustprefix approach can be said to be a false bookmark-like concealment approach, and the Kawanari approach is to create only the low-level string control function shown below and not take care of the rest. Misaka presents both and makes us recognize the difference itself. illustration

    {$adjustprefix("¤¬¤ª¤Á¤ã¤ó","¤µ¤ó")}

  • phase 27


  • If you pass a double-quoted string literal as an argument to a system function, the quotes will be used.

    For example, the old bookmark incorrectly processes the following functions.

    {$adjustprefix("¤¬¤ª¤Á¤ã¤ó","¤µ¤ó")}

  • phase 26


  • Adding low-level string control functions

  • {$substring(s,offset,count)}
  • {$substringl(s,count)}
  • {$substringr(s,count)}
  • {$length(s)}

    substring returns count bytes of string s, starting at byte offset.
    substringl returns count bytes from the left end of string s.
    substringr returns count bytes from the right end of string s.
    The length function returns the length (in bytes) of the string s.

    Note that all bytes are specified, not the number of characters.

  • phase 25


  • xString comparison using relational operator != is not working properly

    It always returned false. Numerical comparison was normal.

  • phase 24


  • xIn the if statement, the assignment statement is executed before the conditional branch.

    {$temp="not ready"}{$if (true) { {$temp="istrue"} } else { {$temp="isfalse"} }}{$temp}

    Fatal bug. For example, in the above formula, Misaka's processing order is incorrect, and $temp is always set to is false regardless of the branch result of $if.

  • phase 23


  • xIf you use double quotes in an assignment statement, the quoted part will also be assigned.

  • property handler

    You can treat all user variables as properties and write processes to be performed simultaneously when variables change. The property handler is defined with the system symbol $_OnPropertyChanged, and the changed variable name is set to the system variable $name.

    Of course, there is no need for a property handler (in that case, it will be a simple variable in name and reality as before). Variables that require property handlers are special in the first place. Property handlers are used, for example, to initialize specific values when the mode changes. illustration


    $OnChoiceSelect,{$if ({$reference(0)}=="changemode")}
    {$mode=0}

    $_OnPropertyChanged,{$if (({$name}=="$mode") && ({$mode}==0))}
    {$modestring="¥â¡¼¥É0"}

    $_OnPropertyChanged,{$if (({$name}=="$mode") && ({$mode}==1))}
    {$modestring="¥â¡¼¥É1"}

    $_OnPropertyChanged,{$if (({$name}=="$mode") && ({$mode}==2))}
    {$modestring="¥â¡¼¥É2"}


    Property handlers are fully syntactic events and can be discarded even if they return a script.

  • phase 22


  • The directory name where Template Ghost was installed, templete, is misspelled and should be template.

  • Addition operator ++ -- addition

    For some reason it wasn't there. illustration

    {$z++}
    {$z--}

    Add 1 to $z or subtract 1 from $z, respectively.

  • phase 21


  • Do not import mai.dll

  • phase 20


  • Added {$_(n)} function to refer to absolute rows in local scope (current implementation is only valid in the command part and is incomplete)

  • Command block generation using a combination of general-purpose block structure and {$_(n)}


    The following statements are equivalent.


    $_OnTest,{$if (({$test2}=="2") && ({$test3}=="3") && ({$test0}=="0") && ({$test1}=="1"))}
    \0\s0¥Æ¥¹¥È0\e
    \0\s0¥Æ¥¹¥È1\e


    $_OnTest,{$_(0)}
    {
    $if (({$test2}=="2")
    && ({$test3}=="3")
    && ({$test0}=="0")
    && ({$test1}=="1"))
    }
    \0\s0¥Æ¥¹¥È0\e
    \0\s0¥Æ¥¹¥È1\e


    The writer is responsible for forgetting to open or close the door.

  • phase 19


  • General purpose block structure


    The following statements are equivalent.


    $_OnTest
    \0\s0\1\s0\0¤Í¤¨¡£\w8\w8\1\s0¤ó¡©\w8\w8\0\n\n¤É¤¦¤·¤Æ¤¢¤ó¤Ê¤Ë´¨¤¤¤Î¡©\w8\w8\1\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢°ÕÌ£¤¬¤è¤¯¡£\e
    \0\s0\1\s0\0¤Í¤¨¡£\w8\w8\1\s0¤ó¡©\w8\w8\0\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢¤¤¤¤¡£\w8\w8\1\n\n¡Å¡Å\w8\w8²¿¤À¤è¡£\e
    \0\s0\1\s0\0¥Æ¥¹¥È¡£\e


    $_OnTest
    {
    \0\s0\1\s0
    \0¤Í¤¨¡£\w8\w8
    \1\s0¤ó¡©\w8\w8
    \0\n\n¤É¤¦¤·¤Æ¤¢¤ó¤Ê¤Ë´¨¤¤¤Î¡©\w8\w8
    \1\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢°ÕÌ£¤¬¤è¤¯¡£
    \e
    }
    {
    \0\s0\1\s0
    \0¤Í¤¨¡£\w8\w8
    \1\s0¤ó¡©\w8\w8
    \0\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢¤¤¤¤¡£\w8\w8
    \1\n\n¡Å¡Å\w8\w8²¿¤À¤è¡£
    \e
    }
    \0\s0\1\s0\0¥Æ¥¹¥È¡£\e


    The writer is responsible for forgetting to open or close the door.


    Note

    Currently, the block start and end braces must be placed on separate lines because the parser is tepid. illustration

    { \0\s0\1\s0
    \0¤Í¤¨¡£\w8\w8
    \1\s0¤ó¡©\w8\w8
    \0\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢¤¤¤¤¡£\w8\w8
    \1\n\n¡Å¡Å\w8\w8²¿¤À¤è¡£
    \e
    }

    The above is incorrect.

  • phase 18


  • literal double quote

    From now on, quoting of string literals will be required. It works even without it though.


    All expressions below are equivalent.


    {$if (({$test2}==2) && ({$test3}==3) && ({$test0}==0) && ({$test1}==1))}

    {$if (({$test2}=="2") && ({$test3}=="3") && ({$test0}=="0") && ({$test1}=="1"))}

  • phase 17


  • Ambiguous space management

    Even if you insert unnecessary spaces, parsing will not fail.


    All expressions below are equivalent.


    {$if (({$test2}==2) && ({$test3}==3))}

    {$if ( ({$test2}==2) && ({$test3}==3) )}

    {$if (({$test2}==¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2) &&¡¡¡¡¡¡({$test3}==3))¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡}

  • phase 16


    Added system symbol $_BalloonOffset

    Control balloon offset from SHIORI.

    phase 15


    If a character string with a byte value } (such as "Japanese Red Cross Society") exists in the logical expression of if, an incorrect evaluation will occur.

    phase 14 beta


    If you call isghostexists() without arguments, it will be true if at least one other ghost exists.

    For indiscriminate bombing.

    phase 13 beta


    Responses to GET String type are not as specified

    phase 12 beta


    inlastsentence extension. Due to the nature of the inlastsentence function, there is a high possibility that multiple inlastsentence functions will appear consecutively in a single if element, which may reduce readability. Therefore, we made it possible to give consecutive words to be hit checked as arguments. illustration


    Expression of "The person who is talking to me is "Hana-chan'' and "fish'' and "kawa'' are hits.''

    Old Misaka

    {$if (({$sender}==²Ö¤Á¤ã¤ó) && ({$inlastsentence(¤µ¤«¤Ê)}) && ({$inlastsentence(Àî)}))}

    New Misaka

    {$if (({$sender}==²Ö¤Á¤ã¤ó) && ({$inlastsentence(¤µ¤«¤Ê,Àî)}))}

    phase 11 beta


    Continuous logical expression relational operations with 3 or more terms and an infinite number of terms

    Previously, when comparing three or more terms, each relationship had to be appropriately enclosed in parentheses. However, from this phase, multiple comparisons of three or more terms can be written in the same parentheses. illustration


    C

    if (a==0 && b==0 && c==0)

    Old Misaka

    {$if ({$a==0} && ({$b==0} && {$c==0}))}

    New Misaka

    {$if ({$a==0} && {$b==0} && {$c==0})}

    phase 10 beta


    If you use a syntax like x{$if (0<{$facemovecount}) { {$facemovecount-=1} }}, it will be considered as omitting the processing section and return true or false.

    phase 9 beta


    Added stroking judgment to template ghost

    $_OnInitialize is deprecated. The symbols read at startup have changed to $_Variable and $_Constant. The difference between the two is the timing of reading. $_Variable is called at startup, the variable is automatically restored, and then $_Constant is called. $_OnInitialize is also being called to maintain backward compatibility.

    xIn template ghost, the default handler (menu display part) of OnMouseDoubleClick is located before the collision detection part, so the collision detection will logically never occur.

    phase 8 beta


    Template ghost was not following the specifications that I changed by myself.

    phase 7 beta


    Blank lines and comments are allowed during data definition in symbols. illustration


    $_OnTalk,{$if (({$mode}==0) && ({$random({$talkinterval})}==0))}

    // ÉÏ˳¥Í¥¿

    \0\s0{$ms}¤Î²È·×¡¢2¥ö·îÁ°¤«¤é²Ð¤Î¼Ö¤é¤·¤¤¤è¡£\w8\w8\1\s0¤à¤¦¡£

    // ²Ð»ö¥Í¥¿

    \0\s0{$ms}¤Î²È¤¬Ç³¤¨¤¿¤é¤·¤¤¤è¡£\w8\w8\1\s0¤à¤¦¡£


    The above description, which is easy for humans to read, is equivalent to the following description, which is simple for machines.


    $_OnTalk,{$if (({$mode}==0) && ({$random({$talkinterval})}==0))}
    \0\s0{$ms}¤Î²È·×¡¢2¥ö·îÁ°¤«¤é²Ð¤Î¼Ö¤é¤·¤¤¤è¡£\w8\w8\1\s0¤à¤¦¡£
    \0\s0{$ms}¤Î²È¤¬Ç³¤¨¤¿¤é¤·¤¤¤è¡£\w8\w8\1\s0¤à¤¦¡£

    phase 6 beta


    Checks the syntax when loading, and if there is an error, writes the erroneous line to misaka_error.txt, displays a dialog informing you of the error, and cancels the startup.

    phase 5 beta


    Even if you set the address in $to, it does not become Communicate Send

    $_OnGhostCommunicateReceive is not called even after receiving Communicate


    In short, everything around Communicate was dead. Seppuku.

    phase 4 beta


    Automatic save/restore of all user variables

    phase 3 beta


    Arbitrary file division of dictionary

    phase 2 beta


    $getvalue
    and time reading sample during clock adjustment function

    xCommunication was actually not working at all.

    phase 1 beta


    Add syntax and specifications that were included but forgotten to the specifications

    xTemplate Ghost's cut-off and overlap detection are not working at all, but they are somehow abnormal.

    phase 0 beta


  • December 30, 2001 (Sun)


    email check
    clock adjustment
    headline sense
    All other event handling that remains until now

    beta release


  • December 29, 2001 (Sat)


    Talk interval setting
    Thrust judgment
    Judgment of cut-off
    Overlapping judgment
    Get String
    Anti-Ghost Communicate


  • December 28, 2001 (Fri)


    Add variables as appropriate
    double click menu
    random talk template
    shell change
    ghost change


  • December 27, 2001 (Thu)


    Logical expression evaluation parser
    Basic structure formulation

  • Back