1ATLAS operation definition file (modeline for XEmacs: -*-Python-*-) 2IWILL Bach_beta2 3 4[ 5{ 6 id:"root_operation", 7 parents:["root"], 8 objtype:"op_definition", 9 serialno:0, 10 refno:0, 11 refid:"", 12 summary:"Base operation for all operators", 13 description:"This is base operation for all other 14 operations and defines basic attributes. You can use this as 15 starting point for browsing whole operation hiearchy. refno refers 16 to operation this is reply for. In examples all attributes that 17 are just as examples (and thus world specific) are started with 'e_'.", 18 from:"", 19 to:"", 20 seconds:0.0, 21 future_seconds:0.0, 22 time_string:"", 23 arg:{} 24 arg_names: ["arg"] 25}, 26{ 27 id:"action", 28 parents:["root_operation"], 29 summary:"This is base operator for operations that might have effects." 30}, 31{ 32 id:"info", 33 parents:["root_operation"], 34 summary:"This is base operator for operations that tell you info about objects or events.", 35 example:[{ 36 objtype:"op", 37 parents:["info"], 38 arg:{ 39 e_msg:"Here is some info" 40 } 41 }] 42}, 43{ 44 id:"create", 45 parents:["action"], 46 summary:"Create new things from nothing using this operator.", 47 description:"Map editor is main user for this in client side. Server uses this inside \"info\" operation to tell client about new things.", 48 arg_description:"entity describing object that is being created", 49 example:[ 50 "Creating axe instance", 51 { 52 objtype:"op", 53 parents:["create"], 54 from:"map-editor", 55 arg:{ 56 parents:["axe"], 57 name:"Ordinary axe", 58 e_attack:3 59 } 60 } 61 ] 62}, 63{ 64 id:"delete", 65 parents:["action"], 66 summary:"Delete something.", 67 arg_description:"id of entity to be deleted", 68 example:[{ 69 objtype:"op", 70 parents:["delete"], 71 arg:{ 72 id:"foo_bar_344" 73 } 74 }] 75}, 76{ 77 id:"set", 78 parents:["action"], 79 summary:"Sets attributes for existing entity.", 80 example:[ 81 "This one sets HP=50, height=1.8, width=0.3 for object \"9899\"", 82 { 83 objtype:"op", 84 parents:["set"], 85 arg:{ 86 id:"9899", 87 e_HP:50, 88 e_height:1.8, 89 e_width:0.3 90 } 91 } 92 ] 93}, 94{ 95 id:"get", 96 parents:["action"], 97 summary:"Generic operation for getting info about things.", 98 arg_description:"id of target entity", 99 example:[ 100 { 101 objtype:"op", 102 parents:["get"], 103 arg:{ 104 id:"elf_type_id_45" 105 } 106 }, 107 "<h4>Browsing operator hierarchy example:</h4> 108<p> 109First start from operator hierarchy root (root_operation):", 110 { 111 objtype:"op", 112 parents:["get"], 113 arg:{ 114 id:"root_operation" 115 } 116 }, 117 "Answer might be:", 118 { 119 objtype:"op", 120 parents:["info"], 121 arg:{ 122 id:"root_operation", 123 children:["action","info"], 124 summary:"Base operator for all operatios" 125 } 126 }, 127 "Then you can ask about action and info:", 128 { 129 objtype:"op", 130 parents:["get"], 131 arg:{ 132 id:"action" 133 } 134 }, 135 { 136 objtype:"op", 137 parents:["get"], 138 arg:{ 139 id:"info" 140 } 141 }, 142 "Etc..." 143 ] 144}, 145{ 146 id:"perception", 147 parents:["info"], 148 specification:"atlas_game", 149 summary:"Character perceives something.", 150 description:"Base operator for all kind of perceptions", 151 arg_description:"perceived thing", 152 example:[ 153 "Usually derived operations are used, general notes 154 on perceptions and actions: 155 <ul> 156 <li><b>action.from:</b> who made character to do something 157 (talk for example); usually character itself, but 158 not always, examples: 159 <ul> 160 <li>atlas_irc_gateway does puppet characters it 161 has created for each nick from irc side 162 <li>admin teaches NPCs by making them to talk 163 itself 164 <li>possession by spell 165 </ul> 166 167 <li><b>action.to:</b> same as character always 168 169 <li><b>perception.from:</b> who produced this perception: 170 always character itself (for example sound of talk) 171 (well... unless you are made to hallusinate ;-) 172 173 <li><b>perception.to:</b> you (unless you are 174 server, then it's target to receive perception) 175 </ul> 176 177 <b>conclusion:</b> should use perception.from instead of 178 inner action.from to decide who produced result 179 <br> 180 See <a href=\"#sound\">sound</a> and 181 <a href=\"#sight\">sight</a> 182 for actual examples 183 ", 184 { 185 objtype:"op", 186 parents:["perception"], 187 arg:{ 188 id:"tree_8374" 189 } 190 } 191 ] 192}, 193{ 194 id:"error", 195 parents:["info"], 196 summary:"Something went wrong", 197 arg_description:"objects describing what went wrong<br> 198First argument is error entity which describes error. 199Second argument is operation which is wrong (not given if not relevant).", 200 example:[ 201 "Client sent \"foo\" -operation which server rejects", 202 { 203 objtype:"op", 204 parents:["error"], 205 refno:123, 206 arg:{ 207 message:"Uknown operation foo", 208 op:{ 209 objtype:"op", 210 parents:["foo"], 211 serialno:123, 212 arg:{ 213 e_bar:"do some foo thing by using bar" 214 } 215 }, 216 no:42 217 } 218 } 219 ] 220}, 221{ 222 id:"combine", 223 parents:["create"], 224 specification:"atlas_game", 225 summary:"Combine existing objects into new objects.", 226 description:"This is how normal characters create objects.", 227 arg_description:"first argument is entity describing object that is being created and rest argument(s) are entities that are used as raw material.", 228 args_source:[], 229 arg_names: ["arg", "args_source"], 230 example:[ 231 "Creating axe from wood and iron", 232 { 233 objtype:"op", 234 parents:["combine"], 235 arg:{ 236 parents:["axe"], 237 name:"Bjorn's axe" 238 }, 239 args_source:[ 240 { 241 id:"Wood_8898" 242 }, 243 { 244 id:"Iron_6578" 245 } 246 ] 247 } 248 ] 249}, 250{ 251 id:"divide", 252 parents:["create"], 253 specification:"atlas_game", 254 summary:"Divide existing object into pieces.", 255 description:"One of the pieces might be original object modified.", 256 arg_description:"id of original object and entities describing pieces.", 257 args_destination:[], 258 arg_names: ["arg", "args_source"], 259 example:[ 260 "taking money from pile", 261 { 262 objtype:"op", 263 parents:["divide"], 264 arg:{ 265 id:"money12345" 266 }, 267 args_destination:[ 268 { 269 id:"money12345" 270 e_amount:10 271 }, 272 { 273 e_amount:110 274 } 275 ] 276 } 277 ] 278}, 279{ 280 id:"communicate", 281 parents:["create"], 282 specification:"atlas_game", 283 summary:"Base operator for all kind of communication.", 284 arg_description:"communication entity", 285 example:[ 286 "see talk" 287 ] 288}, 289{ 290 id:"move", 291 parents:["set"], 292 specification:"atlas_game", 293 summary:"Change position", 294 description:"More about <a href=\"move.html\">movement here</a>", 295 arg_description:"entity with id and new position", 296 example:[ 297 "Movement conversation example:", 298 { 299 objtype:"op", 300 parents:["move"], 301 serialno:123, 302 from:"9899", 303 arg:{ 304 id:"9899", 305 loc:"11", 306 pos:[12.3,3.0,0.0] 307 } 308 }, 309 "Reply from server", 310 { 311 objtype:"op", 312 parents:["info","sight"], 313 serialno:1231, 314 refno:123, 315 from:"9899", 316 to:"9899", 317 seconds:19036033149.3, 318 time_string:"0612-01-05 10:59:09.3", 319 arg:{ 320 objtype:"op", 321 parents:["set","move"], 322 serialno:1230, 323 refno:123, 324 from:"9899", 325 seconds:19036033149.3, 326 time_string:"0612-01-05 10:59:09.3", 327 arg:{ 328 id:"9899", 329 loc:"11", 330 pos:[12.3,3.0,0.0], 331 } 332 } 333 } 334 ] 335}, 336{ 337 id:"perceive", 338 parents:["get"], 339 specification:"atlas_game", 340 summary:"Generic base operation for perceiving things by eyes, ears, etc...", 341 arg_description:"object to be perceived", 342 example:[{ 343 objtype:"op", 344 parents:["perceive"], 345 arg:{ 346 id:"elf_3545" 347 } 348 }] 349}, 350{ 351 id:"login", 352 parents:["get"], 353 summary:"Operation for logging into server", 354 description:"For more about <a href=\"login.html\">out of game atlas here</a>", 355 arg_description:"entity with player name and password attribute", 356 example:[ 357 { 358 objtype:"op", 359 parents:["login"], 360 arg:{, 361 id:"JoeBlatz", 362 password:"Rqv67.%" 363 } 364 }, 365 "Conversation examples:<br> When you connect to 366 server you either need to have account already or make 367 one. Here is \"start by creating account\" -example:", 368 { 369 objtype:"op", 370 parents:["create"], 371 serialno:1, 372 arg:{ 373 id:"player74", 374 parents:["player"], 375 password:"player_password" 376 } 377 }, 378 "What if you already had account by that name? Then 379 reply from server could be something like this (1 argument: 380 message, 2 argument: original operation):", 381 { 382 objtype:"op", 383 parents:["error"], 384 serialno:4, 385 refno:1, 386 seconds:19036033149.3, 387 time_string:"0612-01-05 10:59:09.3", 388 arg:{ 389 message:"Account id already exist" 390 op:{ 391 objtype:"op", 392 parents:["create"], 393 serialno:1, 394 arg:{ 395 id:"player74", 396 parents:["player"], 397 password:"player_password" 398 } 399 } 400 } 401 }, 402 "For more about error operation see 403 <a href=\"#error\">error operation definition</a>. 404 <br><br> 405 If account login went OK them you might receive something 406 like:", 407 { 408 objtype:"op", 409 parents:["info"], 410 serialno:2, 411 refno:1, 412 seconds:19036033149.3, 413 time_string:"0612-01-05 10:59:09.3", 414 arg:{ 415 id:"player74", 416 parents:["player"], 417 password:"player_password", 418 characters:["Bjorn_1"] 419 } 420 }, 421 "If you don't have character, then you need to 422 create one. Creating character is similar to how you create 423 account.", 424 { 425 objtype:"op", 426 parents:["create"], 427 serialno:2, 428 arg:{ 429 parents:["farmer"], 430 name:"Nisuf", 431 summary:"ordinary farmer", 432 e_sex:"male" 433 } 434 }, 435 "Result of character creation is same as with account 436 creation, only resulting object differs." 437 ] 438}, 439{ 440 id:"logout", 441 parents:["login"], 442 summary:"Operation for logging out", 443 arg_description:"entity with player name", 444 example:[ 445 { 446 objtype:"op", 447 parents:["logout"], 448 arg:{ 449 id:"JoeBlatz" 450 } 451 }, 452 "Most useful with server<->server communication 453 telling that certain connection is not anymore pertinent" 454 ] 455}, 456{ 457 id:"sight", 458 parents:["perception"], 459 summary:"Character sees something", 460 arg_description:"object or event character sees", 461 example:[ 462 "See <a href=\"#perception\">perception</a> operation too<br> 463 Common example:", 464 { 465 objtype:"op", 466 parents:["sight"], 467 arg:{ 468 id:"grass1", 469 stamp:989.24 470 } 471 }, 472 "Reply for looking at 'grass1':", 473 { 474 objtype:"op", 475 parents:["sight"], 476 arg:{ 477 id:"grass1", 478 parents:["terrain"], 479 contains:["path1","tree1"], 480 summary:"Grass plains", 481 p:[ 482 [0.0,0.0], 483 [10.0,0.0], 484 [10.0,10.0], 485 [0.0,10.0] 486 ], 487 area:[["grass1.p.0", "grass1.p.1", "grass1.p.2"], 488 ["grass1.p.0", "grass1.p.2", "grass1.p.3"]] 489 } 490 }, 491 "Event example:", 492 { 493 objtype:"op", 494 parents:["sight"], 495 arg:{ 496 objtype:"op", 497 parents:["move"], 498 arg:{ 499 id:"orc_23498", 500 loc:"grass1", 501 pos:[0.5,3.0,0.0] 502 } 503 } 504 } 505 ] 506}, 507{ 508 id:"sound", 509 parents:["perception"], 510 summary:"Character hears something", 511 arg_description:"thing character heard", 512 example:[ 513 "See <a href=\"#perception\">perception</a> operation too<br> 514 Example (every operation might have from, 515to and time tags, not only this operation):", 516 { 517 objtype:"op", 518 parents:["sound"], 519 from:"sentry_34", 520 arg:{ 521 objtype:"op", 522 parents:["talk"], 523 arg:{ 524 say:"What has happened there?" 525 } 526 } 527 } 528 ] 529## *** Topic for#coders ismake NPCs pass out by giving them enough vodka 530## <aloril> saw topic? ;-) 531## <wavey> heheh 532## <aloril> added drunkness into cyphesis in morning 533## <aloril> actually it holds for PCs too... ;-) 534## <wavey> i find that I have to remove drunkenness from my code, rather than add it ;) 535## * aloril rofl 536## * wavey chuckles 537## <wavey> damn, i need adsl :? 538## <wavey> :/ even 539## <wavey> doesn't arrive in UK till next spring :/ 540## <aloril> hmm... actually need drunkness code for NPC version of http://www.ionet.net/~timtroyr/funhouse/beer.html 541## <wavey> yeah :) 542## <aloril> <ent><attr name="say">99 bottles of beer on the wall</attr><attr name="tone">singing</attr></ent> 543## <wavey> how do you see 'tone' being used? 544## <aloril> tone="talking" or tone="signing" 545## <aloril> hmm.. maybe better name? 546## <aloril> talktype? 547## <wavey> well.. 548## <wavey> the name is one thing.. 549## <wavey> but i mean more.. 550## <wavey> how will clients use it? 551## <aloril> ohh... enough advanced client would use sound card to either talk or sing ... 552## <aloril> less advanced maybe different kind of bubles or different colors in speech window 553## <wavey> i see 554## <wavey> cool 555## <aloril> and text clients of course: Foo says "llll" 556## <wavey> lets think about the name.. 557## <aloril> or Foo sings "llll" 558## <wavey> vocalisation? 559## <wavey> naw 560## <aloril> imagine above NPC demo with suitable graphic and suitable sound synthesis ... 561## <wavey> yup 562## <aloril> and in the end of course if any is walking: go to shop and buy more..., 563## <aloril> yup... sure slashdot headlines... 564## <aloril> especially is NPC script is relatively short so that it can be published at above link too... 565## <aloril> fun fun .... 566## <wavey> perhaps 'utterance' is better than 'tone'.. 567## <wavey> probably a better word out there too 568## <wavey> or even 'vocal' 569## <wavey> i think i like 'vocal' 570## <wavey> summaries speech or singing 571## <wavey> or whispering 572## <wavey> or shouting 573## <aloril> hmm.. what would be value for drunk people? 574## <wavey> slurrs :) 575## <wavey> or 'drunkenly' :) 576## <aloril> okay, it's vocal then... 577## <wavey> coolio 578## <aloril> what about "say"? is that ok or is there better version? 579## <wavey> tone is purely musical.. 580## <wavey> 'speech'? 581## <aloril> ok... 582## <wavey> but 'say' describes it fine :) 583## <aloril> hmm... say might be more generic? 584## <aloril> think about spell intonation... 585## <aloril> well then there is of course non speech sounds too... 586## <aloril> hmm.. maybe screaming is say 587## <aloril> but what about clapping? 588## <aloril> or farting ;-) 589## <aloril> or whistling 590## <aloril> or crunch voice coming when somebody tries to surprise you from behind 591## <wavey> those are actions 592## <aloril> <op><id>sound</id><ent><attr name=".... ></op> 593## <aloril> so is talking... 594## <aloril> but they produce sound you can hear... 595## <wavey> well 596## <wavey> i was wondering about that 597## <wavey> the beer example you started with 598## <aloril> for example if you make sword: 599## <aloril> action would be create sword 600## <wavey> had entity with attr or say and tone 601## <aloril> and it would produce sight and sound operations(/events) 602## <wavey> the tone should be an attr of say (or vocal) 603## <aloril> well there is sound entity which can have as many attributes as needed... 604## <wavey> sure 605## <wavey> that should be an attr of the entitie's vocal attr. 606## <wavey> if you get my meaning. 607## <aloril> question is what those attributes should be... 608## <aloril> ie think about what C structure would capture all sounds... 609## <wavey> ok, clear this up 610## <wavey> can an entity's attributes have attributes themselves? 611## <aloril> entity attributer can be subentity.. 612## <wavey> ok cool 613## <aloril> just like structure in C can contain another structure.. 614## <wavey> so 'fart' should be an action of an entity 615## <wavey> along with 'say' 616## <aloril> just doesn't make sense for something to be string and structure at the same time ;-) 617## <wavey> and 'sing' should be an attribute of the 'say' attribute 618## <wavey> s/say/vocal 619## <aloril> do you have forge cvs on your disk? 620## <wavey> nope :/ 621## <wavey> wanna describe vocalisation once more? 622## <aloril> see: http://www.worldforge.org/website/protocols/proposals/operations.html#sight 623## <aloril> and http://www.worldforge.org/website/protocols/proposals/operations.html#sound 624## <wavey> man singing = entity with attr of 'vocal=singing' 625## <aloril> especially for example move crunch would be like that example in the end of sight 626## <aloril> probably fart too... 627## <wavey> what is 'move crunch'? 628## <aloril> voice stepping on some crunchy 629## <aloril> voice that is generated by stepping on some crunchy 630## <aloril> obviously fart would produce smell perception too 631## <wavey> crunchy == something that crunches, like a cardboard box 632## <wavey> when you compress it 633## <aloril> yup 634## <aloril> (in above discussion) 635## <wavey> so what do you mean by 'voice'? 636## <aloril> sound 637## <wavey> ok :) 638## <aloril> s/voice/sound/ ;-) 639## <wavey> <aloril> voice stepping on some crunchy 640## <wavey> ^ possibly the most confusing thing i've ever read on irc ;) 641## * aloril rofl 642## <wavey> in fact 643## *** wavey has changed the topic to: <aloril> voice stepping on some crunchy 644## <aloril> voice moving and producing sound ;-) 645## <aloril> perfectly valid thing: it's magical voice 646## <aloril> ;-) 647## * aloril wondering how that would be represented in atlas 648## *** aloril has changed the topic to: <aloril> voice stepping on some crunchy <aloril> it's magical voice 649## <wavey> i'm still utterly without understanding :) 650## <aloril> it's voice with mass ;-) 651## <wavey> ok 652## <wavey> start again 653## ***Mike (~mikeday@203.42.255.220) has joined #coders 654## <aloril> hi mike 655## <Mike> hello 656## <wavey> hiya mike 657## <wavey> tell aloril to stop hurting my head 658## * Mike grins 659## <aloril> drunkness part for http://www.ionet.net/~timtroyr/funhouse/beer.html added to cyphesis 660## <aloril> (actually it's vodka, but that's just detail ;-) 661## <aloril> why did I add it? 662## <aloril> * kosh gives aloril more vodka to improve his coding 663## <aloril> * aloril has been giving vodka to pet NPC ;-) 664## <aloril> <aloril> duh now it passed out.. 665## <aloril> <kosh> really? 666## <aloril> <kosh> you have drinking working in cyphesis? 667## *** aloril has changed the topic to: voice stepping on something crunchy generates voice which steps ... 668## <wavey> mike! 669## <wavey> tell him! 670## <wavey> surely it's illegal to be this strange? 671## <Mike> voice. stepping. on something, crunchy. 672## * Mike boggles 673## * aloril is laughing uncontrollably 674## <wavey> aloril is talking uncontrollably 675## <wavey> shoot him in the lungs 676## <wavey> quick 677## <aloril> hey now real, guestion: how topic is expressed in atlas? 678## <wavey> before he says anything else 679## <wavey> <ent><attr name="topic"><attr value="* aloril needs help"></ent> 680## <aloril> <op><id>sound</id> 681## <aloril> <op><id>move</id> 682## <aloril> <ent> 683## <aloril> <type><id>voice</id></type> 684## <aloril> <attr name="say">crunch</attr> 685## <aloril> <attr name="vocal">crunch</attr></ent> 686## <aloril> <loc><id>crunchy_item</id><coords>0,0,0.1</coords></loc> 687## <aloril> </ent> 688## <aloril> </op> 689## <aloril> </op> 690}, 691{ 692 id:"smell", 693 parents:["perception"], 694 summary:"Character smells something", 695 arg_description:"thing character smells", 696 example:[ 697 "Example (every operation might have from, 698to and time tags, not only this operation):", 699 { 700 objtype:"op", 701 parents:["smell"], 702 from:"flower_34", 703 arg:{ 704 e_smell:"sweet" 705 } 706 } 707 ] 708}, 709{ 710 id:"feel", 711 parents:["perception"], 712 summary:"Character feels something (with fingers usually)", 713 arg_description:"thing character touches", 714 example:[{ 715 objtype:"op", 716 parents:["feel"], 717 arg:{ 718 id:"cloth_34", 719 e_surface_type:"rough" 720 } 721 }] 722}, 723{ 724 id:"imaginary", 725 parents:["action"], 726 summary:"When something is not yet implemented in server, then character can pretend to do something ;-)", 727 arg_description:"event that is supposed to happen", 728 example:[{ 729 objtype:"op", 730 parents:["imaginary"], 731 arg:{ 732 id:"some_unimplemented_action" 733 } 734 }] 735}, 736{ 737 id:"talk", 738 parents:["communicate"], 739 summary:"used for talking", 740 description:"need to relook at that 'Magic voice that steps on something crunchy and makes magic voice which...' -IRC log", 741 arg_description:"sentence(s) entity", 742 example:[ 743 { 744 objtype:"op", 745 parents:["talk"], 746 arg:{ 747 say:"What has happened there?" 748 } 749 }, 750 "Talking out of game is same, 751except you use player id instead of character id." 752 ] 753}, 754{ 755 id:"look", 756 parents:["perceive"], 757 summary:"Looking at something", 758 arg_description:"target entity", 759 example:[ 760 { 761 objtype:"op", 762 parents:["look"], 763 arg:{ 764 id:"elf_3545" 765 } 766 }, 767 "Conversation examples:<br> When you connect to 768 server you need to look to see things. Server sends all new 769 things that appear and all changes that you see (like 770 movement). But it's clients responsibility to make first 771 update of what it sees. Reason is that only client knows what 772 it has cached. 773 774 <p>First look can leave argument out (it's by default empty): then server sends 775 appropriate top level object for current scheme.", 776 { 777 objtype:"op", 778 parents:["look"], 779 serialno:5, 780 from:"Bjorn_10" 781 }, 782 "Server reply:", 783 { 784 objtype:"op", 785 parents:["set","sight"], 786 serialno:100, 787 refno:5, 788 from:"Bjorn_10", 789 to:"Bjorn_10", 790 seconds:19035667864.4, 791 time_string:"0612-01-01 05:31:04.4", 792 arg:{ 793 id:"world_0", 794 parents:["world"], 795 contains:["tavern_2","market_3","home_4","axe_5","Nisuf_6","Miyora_7","home_8","smithy_9","Bjorn_10"], 796 stamp:19035660000.0, 797 pos:[0.0,0.0,0.0] 798 } 799 }, 800 "Client looks at contains attribute of above object 801 and then looks for those objects in turn:", 802 { 803 objtype:"op", 804 parents:["look"], 805 serialno:6, 806 from:"Bjorn_10", 807 arg:{ 808 id:"Nisuf_6" 809 } 810 }, 811 "And then server tells you more about it:", 812 { 813 objtype:"op", 814 parents:["set","sight"], 815 serialno:105, 816 refno:6, 817 from:"Nisuf_6", 818 to:"Bjorn_10", 819 seconds:19035667864.4, 820 time_string:"0612-01-01 05:31:04.4", 821 arg:{ 822 id:"Nisuf_6", 823 parents:["farmer"], 824 e_drunkness:0.0, 825 stamp:19035650000.0, 826 loc:"world_0", 827 pos:[20.0,50.0,300.0], 828 summary:"ordinary farmer", 829 name:"Nisuf", 830 e_status:1.0, 831 } 832 } 833 ] 834}, 835{ 836 id:"listen", 837 parents:["perceive"], 838 summary:"Listen (something)", 839 arg_description:"target entity", 840 example:[{ 841 objtype:"op", 842 parents:["listen"], 843 arg:{ 844 id:"elf_3545" 845 } 846 }] 847}, 848{ 849 id:"sniff", 850 parents:["perceive"], 851 summary:"Sniff something", 852 arg_description:"target entity", 853 example:[{ 854 objtype:"op", 855 parents:["sniff"], 856 arg:{ 857 id:"flower_3545" 858 } 859 }] 860}, 861{ 862 id:"touch", 863 parents:["perceive"], 864 summary:"Touch something", 865 arg_description:"target entity", 866 example:[{ 867 objtype:"op", 868 parents:["touch"], 869 arg:{ 870 id:"cloth_3545" 871 } 872 }] 873}, 874{ 875 id:"appearance", 876 parents:["sight"], 877 summary:"Character sees something appearing: it literally appears or has it come in visible range", 878 arg_description:"object or event character sees", 879 example:[{ 880 objtype:"op", 881 parents:["appearance"], 882 arg:{ 883 id:"grass1", 884 stamp:989.24 885 } 886 }] 887}, 888{ 889 id:"disappearance", 890 parents:["sight"], 891 summary:"Character sees something disappearing: it literally disappears or has it gone too far to be visible", 892 arg_description:"object or event character sees", 893 example:[{ 894 objtype:"op", 895 parents:["disappearance"], 896 arg:{ 897 id:"grass1", 898 stamp:989.24 899 } 900 }] 901} 902] 903