mirror of
https://github.com/evennia/evennia.git
synced 2026-03-19 14:26:30 +01:00
825 lines
No EOL
62 KiB
HTML
825 lines
No EOL
62 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
|
<title>Evennia Devblog</title>
|
|
<link rel="shortcut icon" type="image/x-icon" href="../images/favicon.ico">
|
|
<link rel="stylesheet" href="../stylesheets/styles.css">
|
|
<link rel="stylesheet" href="../stylesheets/pygment_trac.css">
|
|
<link href='https://fonts.googleapis.com/css?family=Open Sans' rel='stylesheet'>
|
|
<link href='https://fonts.googleapis.com/css?family=Arvo' rel='stylesheet'>
|
|
<script src="../javascripts/scale.fix.js">
|
|
</script>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
|
<meta name="description" content="
|
|
Latest Evennia dev blog: Tutorial-writing and Attributes galore: It has been a while since I wrote anything for the dev blog of Evennia, the MU creation system - so it's about time! ...
|
|
---
|
|
Evennia is a modern Python library and server for creating text-based
|
|
multi-player games and virtual worlds (also known as MUD, MUSH, MU,
|
|
MUX, MUCK, etc). While Evennia handles all the necessary things every
|
|
online game needs, like database and networking, you create the game of
|
|
your dreams by writing normal Python modules."> <!--[if lt IE 9]>
|
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js">
|
|
</script>
|
|
<![endif]-->
|
|
</head>
|
|
<body>
|
|
<div class="wrapper">
|
|
<header>
|
|
<p>
|
|
<img class="logo" src="../images/evennia_logo.png" alt="Evennia logo">
|
|
</p>
|
|
<h1 class="header">Evennia</h1>
|
|
<p class="header header-text">The Python MU* Development Library</p>
|
|
<div class="linksection">
|
|
<ul>
|
|
<div class="buttonsection">
|
|
<li>
|
|
<a class="buttons" href="../index.html">Back to Evennia</a>
|
|
</li>
|
|
<li>
|
|
<a class="buttons devblog-calendar-tooltip"
|
|
href="https://github.com/evennia/evennia/discussions">Discuss (GitHub)</a>
|
|
</li>
|
|
</div>
|
|
</ul>
|
|
</div>
|
|
<div class="devblog-calendar">
|
|
<ul>
|
|
|
|
<li>
|
|
<a href="2022.html"> 2022 (2)
|
|
|
|
<ul class="devblog-calendar-open">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore">Jul 5
|
|
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans">Jan 6
|
|
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2021.html"> 2021 (3)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2021.html#2021-11-18-the-blog-moved!">Nov 18
|
|
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2021.html#2021-03-21-where-do-i-begin?">Mar 21
|
|
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2021.html#2021-01-01-happy-new-years-2021!">Jan 1
|
|
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2020.html"> 2020 (3)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Nov 14
|
|
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">Oct 20
|
|
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Apr 14
|
|
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2019.html"> 2019 (7)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Sep 30
|
|
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2019.html#2019-07-04-evennia-0.9-released">Jul 4
|
|
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">May 26
|
|
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">May 18
|
|
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2019.html#2019-05-09-podcast-about-evennia">May 9
|
|
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Apr 25
|
|
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2019.html#2019-01-02-into-2019">Jan 2
|
|
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2018.html"> 2018 (4)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2018.html#2018-09-30-evennia-0.8-released">Sep 30
|
|
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Aug 18
|
|
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Jan 27
|
|
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2018.html#2018-01-05-new-year,-new-stuff">Jan 5
|
|
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2017.html"> 2017 (6)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Oct 29
|
|
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Oct 1
|
|
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2017.html#2017-09-20-evennia-0.7-released">Sep 20
|
|
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app">Aug 25
|
|
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">Apr 23
|
|
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2017.html#2017-02-05-news-items-from-the-new-year">Feb 5
|
|
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2016.html"> 2016 (7)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2016.html#2016-11-30-birthday-retrospective">Nov 30
|
|
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2016.html#2016-10-13-season-of-fixes">Oct 13
|
|
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">Jul 1
|
|
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2016.html#2016-05-31-evennia-in-pictures">May 31
|
|
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2016.html#2016-05-22-evennia-0.6!">May 22
|
|
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2016.html#2016-03-24-technical-stuff-happening">Mar 24
|
|
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2016.html#2016-02-14-climbing-up-branches">Feb 14
|
|
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2015.html"> 2015 (13)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-12-17-a-summary-of-a-year">Dec 17
|
|
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-11-12-mit-uses-evennia!">Nov 12
|
|
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-10-11-illustrations-and-soaps">Oct 11
|
|
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-10-02-emoting-system">Oct 2
|
|
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`">Sep 29
|
|
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-09-24-pushing-through-a-straw">Sep 24
|
|
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">Aug 27
|
|
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve"">Jun 22
|
|
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-06-15-need-your-help!">Jun 15
|
|
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-05-30-dreaming-big?">May 30
|
|
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-05-11-things-goin-on">May 11
|
|
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">May 9
|
|
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Jan 19
|
|
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2014.html"> 2014 (7)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2014.html#2014-10-02-slowly-moving-through-town">Oct 2
|
|
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2014.html#2014-08-04-dance-my-puppets">Aug 4
|
|
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2014.html#2014-06-30-webby-stuff">Jun 30
|
|
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2014.html#2014-06-15-bringing-back-python-memory">Jun 15
|
|
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1">May 16
|
|
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Feb 8
|
|
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Jan 24
|
|
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2013.html"> 2013 (5)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Dec 16
|
|
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2013.html#2013-11-28-out-of-band-mergings">Nov 28
|
|
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">Oct 22
|
|
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2013.html#2013-05-13-one-to-many">May 13
|
|
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Jan 29
|
|
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="2012.html"> 2012 (13)
|
|
|
|
<ul class="devblog-calendar-closed">
|
|
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Oct 28
|
|
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-10-05-community-interest">Oct 5
|
|
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-08-31-combining-twisted-and-django">Aug 31
|
|
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-08-16-taking-command">Aug 16
|
|
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-06-26-extending-time-and-details">Jun 26
|
|
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-06-11-coding-from-the-inside">Jun 11
|
|
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things">May 30
|
|
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Mar 26
|
|
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Feb 22
|
|
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-02-17-commands-and-you">Feb 17
|
|
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-02-15-such-a-small-thing-...">Feb 15
|
|
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks">Feb 5
|
|
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
|
<a href="2012.html#2012-02-05-about-this-dev-blog">Feb 5
|
|
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</div>
|
|
</header>
|
|
<section>
|
|
<div class="devblog-rss">
|
|
<a href="feed.rss">
|
|
<img src="images/rss-icon.png" alt="RSS feed">
|
|
</a>
|
|
</div>
|
|
<h1>
|
|
<a name="evennia-mudmu-creation-system" class="anchor" href="#evennia-mudmu-creation-system">
|
|
<span class="octicon octicon-link">
|
|
</span>
|
|
</a>Evennia Dev Blog<div class="sponsor">
|
|
<div class="sponsor-column">
|
|
<a href="https://www.patreon.com/griatch">
|
|
<img class="patreon" src="../images/evennia_patreon_100x100.png" alt="Patreon">
|
|
</a>
|
|
<form action="https://www.paypal.com/donate" method="post" target="_top">
|
|
<input type="hidden" name="hosted_button_id" value="YQDKB8JT2GXLS" />
|
|
<input type="image" src="https://www.paypalobjects.com/en_US/SE/i/btn/btn_donateCC_LG.gif" border="0" name="submit" title="PayPal - The safer, easier way to pay online!" alt="Donate with PayPal button" />
|
|
<img alt="" border="0" src="https://www.paypal.com/en_SE/i/scr/pixel.gif" width="1" height="1" />
|
|
</form>
|
|
</div>
|
|
</h1>
|
|
|
|
<em>Various Evennia- and MUD-related musings by Griatch, the Evennia lead developer.</em>
|
|
|
|
|
|
|
|
<div class="blog_post">
|
|
<h1 id=2022-07-05-tutorial-writing-and-attributes-galore>
|
|
Tutorial-writing and Attributes galore
|
|
<a class="devblog-headerlink" href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore" title="Permalink to this blog post">¶</a>
|
|
<div class="devblog-title-date">- July 5, 2022</div>
|
|
</h1>
|
|
<p><img src="images/tutorial.jpg" alt="Tutorial sign" /></p>
|
|
<p>It has been a while since I wrote anything for the dev blog of Evennia, the MU creation system - so it's about time!</p>
|
|
<p>It's been a busy spring and early summer for me, with lots of real-life work going on away from Evennia land. But that hasn't meant activity on the Evennia code base has slowed!</p>
|
|
<h2>Many eyes on Evennia 1.0-dev</h2>
|
|
<p>Earlier this year I <a href="https://github.com/evennia/evennia/discussions/2640">invited people to try the Evennia develop branch</a> - what will become Evennia 1.0. A lot of bold beta-testers have since swapped to using the 1.0 branch. While there are plenty of issues being reported, most seem pretty happy about it so far. As mentioned in earlier dev blogs, Evennia 1.0 has a <a href="https://github.com/evennia/evennia/blob/master/CHANGELOG.md">lot of improvements and new features</a>!</p>
|
|
<p>As part of this, the amount of PRs being made against develop branch has increased a lot, with awesome community members stepping up to fix bugs and even address long-standing annoyances. This includes everything from big improvements in ANSI parsing, fixes to the 1.0 FuncParser, RPSystem contrib optimizations and much more - <a href="https://github.com/evennia/evennia/pulls?page=2&q=is%3Apr+is%3Aclosed">the list of closed PRs is long</a>.</p>
|
|
<p>Another big part are everyone helping to answer questions in chat and suggesting improvements to the community in general. Thanks everyone!</p>
|
|
<h2>The upcoming beginner tutorial</h2>
|
|
<p>On my end, I'm working on the Beginner Tutorial for the new 1.0 documentation. This will be a multi-part tutorial where you get to make a little MUD game from scratch. It goes through the basics of Evennia all the way to releasing your little game and I hope it will help people get started. This will also lead to a new contrib - the <code>evadventure</code> package, which should (I plan) have everything the tutorial needs to run. This is useful for those that prefer picking apart existing code over reading about it.</p>
|
|
<p>The tutorial game itself is based on <a href="https://www.gmbinder.com/share/-LZGcbbCQaqjIV0TmLx3">Knave</a>, an light Old-School-Renaissance (OSR) tabletop roleplaying ruleset inspired by early editions Dungeons & Dragons. It's simple enough to fit in a tutorial but with enough wrinkles to showcase how to create some basic rpg systems in Evennia:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Using Attributes (STR, DEX etc)</p>
|
|
</li>
|
|
<li>
|
|
<p>Rules (dice rolls, advantage, contested rolls etc)</p>
|
|
</li>
|
|
<li>
|
|
<p>Character generation (Knave chargen is mostly random, but it still showcases Evennia's menu system EvMenu).</p>
|
|
</li>
|
|
<li>
|
|
<p>Inventory management and equipment (including limited storage as well as items worn or wielded).</p>
|
|
</li>
|
|
<li>
|
|
<p>Turn-based combat system (menu based)</p>
|
|
</li>
|
|
<li>
|
|
<ul>
|
|
<li>Attacking with wielded weapons (or spell rune)</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<ul>
|
|
<li>Stunts to give you advantages for later turns or give enemies disadvantage for later turns</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<ul>
|
|
<li>Using items for healing or other effects</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<ul>
|
|
<li>Fleeing and chasing</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>Alternative Twitch-based combat system (might be a stretch goal)</p>
|
|
</li>
|
|
<li>
|
|
<p>NPCs with very simple AI, Death and respawn</p>
|
|
</li>
|
|
<li>
|
|
<p>Simple Questing system with NPC quest givers and quest states</p>
|
|
</li>
|
|
<li>
|
|
<p>A small example world (tech-demo)</p>
|
|
</li>
|
|
</ul>
|
|
<p>I won't include how to make a Crafting system, since I've added a full <a href="https://www.evennia.com/docs/1.0-dev/Contribs/Contrib-Crafting.html">Crafting contrib</a> to Evennia 1.0 for devs to be inspired by or tear apart.</p>
|
|
<h2>Some nice new things about Attributes</h2>
|
|
<p>In general news, Evennia 1.0 will see two big improvements when it comes to <a href="https://www.evennia.com/docs/1.0-dev/Components/Attributes.html">Attributes</a>.</p>
|
|
<h3>AttributeProperty</h3>
|
|
<p>This is a new way to write - and particularly initialize - Attributes. Traditionally in Evennia you need to initialize your object's Attributes something like this:</p>
|
|
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #008000; font-weight: bold">from</span> <span style="color: #0000FF; font-weight: bold">evennia</span> <span style="color: #008000; font-weight: bold">import</span> DefaultCharacter
|
|
|
|
|
|
|
|
<span style="color: #008000; font-weight: bold">class</span> <span style="color: #0000FF; font-weight: bold">Character</span>(DefaultCharacter):
|
|
|
|
<span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">at_object_creation</span>(<span style="color: #008000">self</span>):
|
|
|
|
<span style="color: #008000">self</span><span style="color: #666666">.</span>db<span style="color: #666666">.</span>strength <span style="color: #666666">=</span> <span style="color: #666666">10</span>
|
|
|
|
<span style="color: #008000">self</span><span style="color: #666666">.</span>db<span style="color: #666666">.</span>mana <span style="color: #666666">=</span> <span style="color: #666666">12</span>
|
|
</pre></div>
|
|
|
|
<p>This still works. But with the new <code>AttributeProperty</code> you can now write it like this instead:</p>
|
|
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #008000; font-weight: bold">from</span> <span style="color: #0000FF; font-weight: bold">evennia</span> <span style="color: #008000; font-weight: bold">import</span> DefaultCharacter
|
|
|
|
<span style="color: #008000; font-weight: bold">from</span> <span style="color: #0000FF; font-weight: bold">evennia.typeclasses.attributes</span> <span style="color: #008000; font-weight: bold">import</span> AttributeProperty
|
|
|
|
|
|
|
|
<span style="color: #008000; font-weight: bold">class</span> <span style="color: #0000FF; font-weight: bold">Character</span>(DefaultCharacter):
|
|
|
|
strength <span style="color: #666666">=</span> AttributeProperty(<span style="color: #666666">10</span>)
|
|
|
|
mana <span style="color: #666666">=</span> AttributeProperty(<span style="color: #666666">10</span>)
|
|
</pre></div>
|
|
|
|
<p>This makes Attributes look more like Django fields, sitting directly on the class. They can also have <code>category</code> and all other values you'd expect. You can still access those Attributes like normal:</p>
|
|
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>strength <span style="color: #666666">=</span> char<span style="color: #666666">.</span>db<span style="color: #666666">.</span>strength
|
|
|
|
mana <span style="color: #666666">=</span> char<span style="color: #666666">.</span>attributes<span style="color: #666666">.</span>get(<span style="color: #BA2121">"mana"</span>)
|
|
</pre></div>
|
|
|
|
<p>But you can now also do just</p>
|
|
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span>strength <span style="color: #666666">=</span> char<span style="color: #666666">.</span>strength
|
|
|
|
mana <span style="color: #666666">=</span> char<span style="color: #666666">.</span>mana
|
|
</pre></div>
|
|
|
|
<p>directly (you'll need to be careful to not override any existing properties on objects this way of course).</p>
|
|
<p>An interesting feature of using an <code>AttributeProperty</code> is that you can choose to <em>not</em> actually create the <code>Attribute</code> under the hood unless the default changed:</p>
|
|
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #008000; font-weight: bold">class</span> <span style="color: #0000FF; font-weight: bold">Character</span>(DefaultCharacter):
|
|
|
|
strength <span style="color: #666666">=</span> AttributeProperty(<span style="color: #666666">10</span>, autocreate<span style="color: #666666">=</span><span style="color: #008000; font-weight: bold">False</span>)
|
|
|
|
mana <span style="color: #666666">=</span> AttributeProperty(<span style="color: #666666">10</span>, autocreate<span style="color: #666666">=</span><span style="color: #008000; font-weight: bold">False</span>)
|
|
</pre></div>
|
|
|
|
<p>When you now access <code>char.strength</code> you will get <code>10</code> back but you won't actually be hitting the database to load anything - it's just giving you the default. Not until you <em>change</em> the default will the actual <code>Attribute</code> be created. While this can be very powerful for optimization, note that you can of course not access such data via <code>char.db</code> or <code>char.attributes.get</code> either (because no <code>Attribute</code> yet exists). So this functionality can be confusing unless you know what you are doing. Hence <code>autocreate</code> defaults to <code>True</code>.</p>
|
|
<h3>Saving Attributes with hidden database objects</h3>
|
|
<p>This is one of those classical quirks of Evennia that many have encountered. While Evennia can save a lot of things in an <code>Attribute</code>, including database objects, it cannot do so if it doesnt <em>know</em> those database objects are there. This is fine if you are saving a list or a dict with objects in it - Evennia will go through it and make sure to serialize each db-object in turn.</p>
|
|
<p>But if you "hide away" your db-object you will be in trouble:</p>
|
|
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #008000; font-weight: bold">class</span> <span style="color: #0000FF; font-weight: bold">MyStore</span>:
|
|
|
|
<span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">__init__</span>(<span style="color: #008000">self</span>, dbobj):
|
|
|
|
<span style="color: #008000">self</span><span style="color: #666666">.</span>dbobj <span style="color: #666666">=</span> dbjobj
|
|
|
|
|
|
|
|
char <span style="color: #666666">=</span> Character<span style="color: #666666">.</span>objects<span style="color: #666666">.</span>get(<span style="color: #008000">id</span><span style="color: #666666">=1</span>)
|
|
|
|
obj<span style="color: #666666">.</span>db<span style="color: #666666">.</span>mystore <span style="color: #666666">=</span> MyStore(char) <span style="color: #3D7B7B; font-style: italic"># leads to Traceback!</span>
|
|
</pre></div>
|
|
|
|
<p>This fails because we store <code>char</code> inside <code>MyStore</code> and there is no way for Evennia to know it's there and to handle it properly.</p>
|
|
<p>For the longest time, this was just a limitation you had to accept. But with Evennia 1.0-dev you can now help Evennia out:</p>
|
|
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span><span style="color: #008000; font-weight: bold">from</span> <span style="color: #0000FF; font-weight: bold">evennia.utils.dbserialize</span> <span style="color: #008000; font-weight: bold">import</span> dbserialize, dbunserialize
|
|
|
|
|
|
|
|
<span style="color: #008000; font-weight: bold">class</span> <span style="color: #0000FF; font-weight: bold">MyStore</span>:
|
|
|
|
<span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">__init__</span>(<span style="color: #008000">self</span>, dbobj):
|
|
|
|
<span style="color: #008000">self</span><span style="color: #666666">.</span>dbobj <span style="color: #666666">=</span> dbobj
|
|
|
|
<span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">__serialize_dbobjs__</span>(<span style="color: #008000">self</span>):
|
|
|
|
<span style="color: #008000">self</span><span style="color: #666666">.</span>dbobj <span style="color: #666666">=</span> dbserialize(<span style="color: #008000">self</span><span style="color: #666666">.</span>dbobj)
|
|
|
|
<span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">__deserialize_dbobjs__</span>(<span style="color: #008000">self</span>):
|
|
|
|
<span style="color: #008000">self</span><span style="color: #666666">.</span>dbobj <span style="color: #666666">=</span> dbunserialize(<span style="color: #008000">self</span><span style="color: #666666">.</span>dbobj)
|
|
|
|
|
|
|
|
char <span style="color: #666666">=</span> Character<span style="color: #666666">.</span>objects<span style="color: #666666">.</span>get(<span style="color: #008000">id</span><span style="color: #666666">=1</span>)
|
|
|
|
obj<span style="color: #666666">.</span>db<span style="color: #666666">.</span>mystore <span style="color: #666666">=</span> MyStore(char) <span style="color: #3D7B7B; font-style: italic"># now OK!</span>
|
|
</pre></div>
|
|
|
|
<p>With the new <code>__serialize_dbobjs__</code> and <code>__deserialize_dbobjs__</code>, Evennia is told how to properly stow away the db-object (using the tools from <code>evennia.utils</code>) before trying to serialize the entire <code>MyStore</code>. And later, when loading it up, Evennia is helped to know how to restore the db-object back to normal again after the rest of <code>MyStore</code> was already loaded up.</p>
|
|
<h2>Moving forward ...</h2>
|
|
<p>For Evennia 1.0, the tutorial-writing is the single biggest project that remains - that and the general documentation cleanup of our entirely rewritten documentation.</p>
|
|
<p>After that I will dive back in with the issues that has popped up during beta-testing of 1.0-dev and try to wrap up the most serious ones before release. Still some time away, but it's getting there ... slowly!</p>
|
|
|
|
<footer class="devblog-footer">
|
|
<span class="devblog-copyrights">
|
|
<p><a href="http://alphastockimages.com/">Alpha Stock Images</a> (released under <a href="https://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a> )</p>
|
|
|
|
</span>
|
|
<a class="devblog-to-toplink" href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore" title="Link to top of post">⇬(top)</a>
|
|
</footer>
|
|
</div>
|
|
|
|
<hr>
|
|
<div class="blog_post">
|
|
<h1 id=2022-01-06-into-2022-with-thanks-and-plans>
|
|
Into 2022 with thanks and plans
|
|
<a class="devblog-headerlink" href="2022.html#2022-01-06-into-2022-with-thanks-and-plans" title="Permalink to this blog post">¶</a>
|
|
<div class="devblog-title-date">- January 6, 2022</div>
|
|
</h1>
|
|
<p><img src="https://www.nafcu.org/sites/default/files/inline-images/2022-blog.png" alt="2022 getting started" /></p>
|
|
<br>
|
|
<p>I didn't write an end-of-the year summary for 2021, so this first devblog of 2022 will also look back a bit at the past year. It also helps me get used to using this new blog platform I wrote about in the previous post.</p>
|
|
<h2>On Evennia 1.0</h2>
|
|
<p>Speaking of 2021, you may have noticed that there was no new versioned Evennia release last year. Last one was 0.9.5 back in 2020. This may make it seem like little is happening in Evennia-land ... but the fact is that while little has happened in <code>master</code> branch over the past year, all the more has been going on in Evennia's <code>develop</code> branch - the branch which will become Evennia 1.0.</p>
|
|
<p>Now, it's not really so good to have a development branch run so long. This is because in the interim people report errors in <code>master</code> branch that has since been resolved in <code>develop</code>. It's becoming more and more cumbersome to backport which means that <code>master</code> is not getting updated all that much right now.</p>
|
|
<p>Post 1.0, I'll likely switch to a faster release cycle, but at least for now, it has been hard to avoid, this is because I'm reworking the entire documentation site alongside the code, with new autodocs and tutorials. Releasing an intermediary version with some sort of mid-way documentation version is just not practical for me. So I hope you can be patient a bit further!</p>
|
|
<p>Soonish™, I hope to have finished the code changes needed for 1.0 and then I'll invite adventurous folks to use the branch more extensively while the docs are still in flux.</p>
|
|
<h3>So what's still to do for Evennia 1.0?</h3>
|
|
<p><a href="https://github.com/evennia/evennia/projects/9">This is the current TODO list</a>.</p>
|
|
<p>The big one I'm currently doing is to refactor the <code>contrib/</code> folder to have more structure (it has grown organically until now). After this, there are a series of bugs and minor features to do. I will also go back and address the low-hanging <code>master</code> branch bugs that haven't already been resolved in <code>develop</code>.</p>
|
|
<p>Most remaining points are then documentation fixes. Those will be handled in one go as the docs are finalized.</p>
|
|
<h3>So ...</h3>
|
|
<p>I won't/can't commit to a deadline for Evennia 1.0, but I'll keep chipping away at it as fast as I can. If you want things to move quicker you are more than welcome to join the other contributors that have chipped in with PRs over the past year. Check out the TODO list and consider investigating a bug or implementing a feature - some may be pretty straight forward.</p>
|
|
<h3>... some thanks!</h3>
|
|
<p>A big thanks to those that dropped an encouraing buck in my hat (aka <a href="https://www.patreon.com/griatch">patreon</a> or with a one-time paypal donation) over the year. Everyone has different economical situations and I hope I've been very clear that noone should feel obligated to pay anything. But those of you that could and did - know that you have my thanks - it's very encouraging.</p>
|
|
<p>But - just as big thanks go out to <em>everyone</em> that contributed to Evennia in 2021! "Contribution" means so many things - we have the troopers that contributed code and made PRs (best Hacktoberfest yet!), but also those that dilligently reported bugs and pointed out problems as well as (and this is just as important) were active and helpful in the support chat and github discussion!</p>
|
|
<p>You guys make the community, that's all there is to it. Thanks a lot.</p>
|
|
<p>Now onward into this new, fresh year and towards that elusive Evennia 1.0 ...</p>
|
|
|
|
<footer class="devblog-footer">
|
|
<span class="devblog-copyrights">
|
|
<p>Image by <a href="https://pixabay.com/users/tumisu-148124/?utm_source=link-attribution&utm_medium=referral&utm_campaign=image&utm_content=6786741">Tumisu</a> from <a href="https://pixabay.com/?utm_source=link-attribution&utm_medium=referral&utm_campaign=image&utm_content=6786741">Pixabay</a></p>
|
|
|
|
</span>
|
|
<a class="devblog-to-toplink" href="2022.html#2022-01-06-into-2022-with-thanks-and-plans" title="Link to top of post">⇬(top)</a>
|
|
</footer>
|
|
</div>
|
|
|
|
</section>
|
|
</body>
|
|
</html> |