mirror of
https://github.com/evennia/evennia.git
synced 2026-03-18 05:46:31 +01:00
791 lines
No EOL
74 KiB
HTML
791 lines
No EOL
74 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">
|
||
<!--[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="2023.html"> 2023 (1)
|
||
|
||
<ul class="devblog-calendar-closed">
|
||
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Evennia 2.0.0 released today</span>
|
||
<a href="2023.html#2023-06-10-evennia-2.0.0-released-today"> Evennia 2.0.0 rel...
|
||
</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="2022.html"> 2022 (4)
|
||
|
||
<ul class="devblog-calendar-closed">
|
||
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Evennia 1.0 released!</span>
|
||
<a href="2022.html#2022-12-03-evennia-1.0-released!"> Evennia 1.0 relea...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Project plans and Splitting a Setting in two</span>
|
||
<a href="2022.html#2022-09-17-project-plans-and-splitting-a-setting-in-two"> Project plans and...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Tutorial-writing and Attributes galore</span>
|
||
<a href="2022.html#2022-07-05-tutorial-writing-and-attributes-galore"> Tutorial-writing ...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Into 2022 with thanks and plans</span>
|
||
<a href="2022.html#2022-01-06-into-2022-with-thanks-and-plans"> Into 2022 with th...
|
||
</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">
|
||
<span class="devblog-calendar-tooltip-text"> The blog moved!</span>
|
||
<a href="2021.html#2021-11-18-the-blog-moved!"> The blog moved!
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Where do I begin?</span>
|
||
<a href="2021.html#2021-03-21-where-do-i-begin?"> Where do I begin?
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Happy New Years 2021!</span>
|
||
<a href="2021.html#2021-01-01-happy-new-years-2021!"> Happy New Years 2...
|
||
</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">
|
||
<span class="devblog-calendar-tooltip-text">Evennia 0.9.5 released</span>
|
||
<a href="2020.html#2020-11-14-evennia-0.9.5-released">Evennia 0.9.5 rele...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">On using Markdown with Sphinx</span>
|
||
<a href="2020.html#2020-10-20-on-using-markdown-with-sphinx">On using Markdown ...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Spring updates while trying to stay healthy</span>
|
||
<a href="2020.html#2020-04-14-spring-updates-while-trying-to-stay-healthy">Spring updates whi...
|
||
</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">
|
||
<span class="devblog-calendar-tooltip-text">Blackifying and fixing bugs</span>
|
||
<a href="2019.html#2019-09-30-blackifying-and-fixing-bugs">Blackifying and fi...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Evennia 0.9 released</span>
|
||
<a href="2019.html#2019-07-04-evennia-0.9-released">Evennia 0.9 released
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 2</span>
|
||
<a href="2019.html#2019-05-26-creating-evscaperoom-part-2">Creating Evscapero...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Creating Evscaperoom Part 1</span>
|
||
<a href="2019.html#2019-05-18-creating-evscaperoom-part-1">Creating Evscapero...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Podcast about Evennia</span>
|
||
<a href="2019.html#2019-05-09-podcast-about-evennia">Podcast about Even...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Steaming on Eating Jam</span>
|
||
<a href="2019.html#2019-04-25-steaming-on-eating-jam">Steaming on Eating...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Into 2019</span>
|
||
<a href="2019.html#2019-01-02-into-2019">Into 2019
|
||
</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="2018.html"> 2018 (4)
|
||
|
||
<ul class="devblog-calendar-open">
|
||
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Evennia 0.8 released</span>
|
||
<a href="2018.html#2018-09-30-evennia-0.8-released">Evennia 0.8 released
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Inline building in upcoming Evennia 0.8</span>
|
||
<a href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8">Inline building in...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Kicking into gear from a distance</span>
|
||
<a href="2018.html#2018-01-27-kicking-into-gear-from-a-distance">Kicking into gear ...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> New year, new stuff</span>
|
||
<a href="2018.html#2018-01-05-new-year,-new-stuff"> New year, new stuff
|
||
</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">
|
||
<span class="devblog-calendar-tooltip-text">Getting a MUD RP scene going</span>
|
||
<a href="2017.html#2017-10-29-getting-a-mud-rp-scene-going">Getting a MUD RP s...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Evennia in Hacktobergest 2017</span>
|
||
<a href="2017.html#2017-10-01-evennia-in-hacktobergest-2017">Evennia in Hacktob...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Evennia 0.7 released</span>
|
||
<a href="2017.html#2017-09-20-evennia-0.7-released">Evennia 0.7 released
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Renaming Django's Auth User and App</span>
|
||
<a href="2017.html#2017-08-25-renaming-django's-auth-user-and-app"> Renaming Django's...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">The luxury of a creative community</span>
|
||
<a href="2017.html#2017-04-23-the-luxury-of-a-creative-community">The luxury of a cr...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">News items from the new year</span>
|
||
<a href="2017.html#2017-02-05-news-items-from-the-new-year">News items from th...
|
||
</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">
|
||
<span class="devblog-calendar-tooltip-text">Birthday retrospective</span>
|
||
<a href="2016.html#2016-11-30-birthday-retrospective">Birthday retrospec...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Season of fixes</span>
|
||
<a href="2016.html#2016-10-13-season-of-fixes">Season of fixes
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">The art of sharing nicks and descriptions</span>
|
||
<a href="2016.html#2016-07-01-the-art-of-sharing-nicks-and-descriptions">The art of sharing...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Evennia in Pictures</span>
|
||
<a href="2016.html#2016-05-31-evennia-in-pictures">Evennia in Pictures
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Evennia 0.6!</span>
|
||
<a href="2016.html#2016-05-22-evennia-0.6!"> Evennia 0.6!
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Technical stuff happening</span>
|
||
<a href="2016.html#2016-03-24-technical-stuff-happening">Technical stuff ha...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Climbing up Branches</span>
|
||
<a href="2016.html#2016-02-14-climbing-up-branches">Climbing up Branches
|
||
</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">
|
||
<span class="devblog-calendar-tooltip-text">A summary of a year</span>
|
||
<a href="2015.html#2015-12-17-a-summary-of-a-year">A summary of a year
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> MIT uses Evennia!</span>
|
||
<a href="2015.html#2015-11-12-mit-uses-evennia!"> MIT uses Evennia!
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Illustrations and soaps</span>
|
||
<a href="2015.html#2015-10-11-illustrations-and-soaps">Illustrations and ...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Emoting System</span>
|
||
<a href="2015.html#2015-10-02-emoting-system">Emoting System
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Evennia on `podcast.__init__`</span>
|
||
<a href="2015.html#2015-09-29-evennia-on-`podcast.__init__`"> Evennia on `podca...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Pushing through a straw</span>
|
||
<a href="2015.html#2015-09-24-pushing-through-a-straw">Pushing through a ...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">A wagon load of post summer updates</span>
|
||
<a href="2015.html#2015-08-27-a-wagon-load-of-post-summer-updates">A wagon load of po...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Announcing the Evennia example-game project "Ainneve"</span>
|
||
<a href="2015.html#2015-06-22-announcing-the-evennia-example-game-project-"ainneve""> Announcing the Ev...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Need your help!</span>
|
||
<a href="2015.html#2015-06-15-need-your-help!"> Need your help!
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Dreaming big?</span>
|
||
<a href="2015.html#2015-05-30-dreaming-big?"> Dreaming big?
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Things goin on</span>
|
||
<a href="2015.html#2015-05-11-things-goin-on">Things goin on
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Documenting Python without Sphinx</span>
|
||
<a href="2015.html#2015-05-09-documenting-python-without-sphinx">Documenting Python...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Building Django proxies and MUD libraries</span>
|
||
<a href="2015.html#2015-01-19-building-django-proxies-and-mud-libraries">Building Django pr...
|
||
</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">
|
||
<span class="devblog-calendar-tooltip-text">Slowly moving through town</span>
|
||
<a href="2014.html#2014-10-02-slowly-moving-through-town">Slowly moving thro...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Dance my puppets</span>
|
||
<a href="2014.html#2014-08-04-dance-my-puppets">Dance my puppets
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Webby stuff</span>
|
||
<a href="2014.html#2014-06-30-webby-stuff">Webby stuff
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Bringing back Python memory</span>
|
||
<a href="2014.html#2014-06-15-bringing-back-python-memory">Bringing back Pyth...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Imaginary Realities volume 6, issue 1</span>
|
||
<a href="2014.html#2014-05-16-imaginary-realities-volume-6,-issue-1"> Imaginary Realiti...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Moving from Google Code to Github</span>
|
||
<a href="2014.html#2014-02-08-moving-from-google-code-to-github">Moving from Google...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Looking forwards and backwards</span>
|
||
<a href="2014.html#2014-01-24-looking-forwards-and-backwards">Looking forwards a...
|
||
</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">
|
||
<span class="devblog-calendar-tooltip-text">Imaginary Realities is back</span>
|
||
<a href="2013.html#2013-12-16-imaginary-realities-is-back">Imaginary Realitie...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Out of band mergings</span>
|
||
<a href="2013.html#2013-11-28-out-of-band-mergings">Out of band mergings
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">A list of Evennia topics</span>
|
||
<a href="2013.html#2013-10-22-a-list-of-evennia-topics">A list of Evennia ...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">One to Many</span>
|
||
<a href="2013.html#2013-05-13-one-to-many">One to Many
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Churning behind the scenes</span>
|
||
<a href="2013.html#2013-01-29-churning-behind-the-scenes">Churning behind th...
|
||
</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">
|
||
<span class="devblog-calendar-tooltip-text">Evennia changes to BSD license</span>
|
||
<a href="2012.html#2012-10-28-evennia-changes-to-bsd-license">Evennia changes to...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Community interest</span>
|
||
<a href="2012.html#2012-10-05-community-interest">Community interest
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Combining Twisted and Django</span>
|
||
<a href="2012.html#2012-08-31-combining-twisted-and-django">Combining Twisted ...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Taking command</span>
|
||
<a href="2012.html#2012-08-16-taking-command">Taking command
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Extending time and details</span>
|
||
<a href="2012.html#2012-06-26-extending-time-and-details">Extending time and...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Coding from the inside</span>
|
||
<a href="2012.html#2012-06-11-coding-from-the-inside">Coding from the in...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Dummies doing (even more) dummy things</span>
|
||
<a href="2012.html#2012-05-30-dummies-doing-(even-more)-dummy-things"> Dummies doing (ev...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Shortcuts to goodness</span>
|
||
<a href="2012.html#2012-03-26-shortcuts-to-goodness">Shortcuts to goodn...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Dummies doing dummy things</span>
|
||
<a href="2012.html#2012-02-22-dummies-doing-dummy-things">Dummies doing dumm...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">Commands and you</span>
|
||
<a href="2012.html#2012-02-17-commands-and-you">Commands and you
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Such a small thing ...</span>
|
||
<a href="2012.html#2012-02-15-such-a-small-thing-..."> Such a small thin...
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text">About this dev blog</span>
|
||
<a href="2012.html#2012-02-05-about-this-dev-blog">About this dev blog
|
||
</a>
|
||
</li>
|
||
|
||
<li class="devblog-calendar-post devblog-calendar-tooltip">
|
||
<span class="devblog-calendar-tooltip-text"> Evennia's open bottlenecks</span>
|
||
<a href="2012.html#2012-02-05-evennia's-open-bottlenecks"> Evennia's open bo...
|
||
</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=2018-09-30-evennia-0.8-released>
|
||
Evennia 0.8 released
|
||
<a class="devblog-headerlink" href="2018.html#2018-09-30-evennia-0.8-released" title="Permalink to this blog post">¶</a>
|
||
<div class="devblog-title-date">- September 30, 2018</div>
|
||
</h1>
|
||
<p><a href="https://4.bp.blogspot.com/-2Axqwk9ps84/Ui8fvdZ3ReI/AAAAAAAAB-M/mNkREiXqmJM8Ilz-VmP3V-4YhazaZJIIQCPcBGAYYCw/s1600/evennia_logo_small.png"><img src="https://4.bp.blogspot.com/-2Axqwk9ps84/Ui8fvdZ3ReI/AAAAAAAAB-M/mNkREiXqmJM8Ilz-VmP3V-4YhazaZJIIQCPcBGAYYCw/s1600/evennia_logo_small.png" alt="" /></a>After about a year of work and almost 540 commits from close to 20 contributors, <a href="http://www.evennia.com/">Evennia</a> 0.8 is out! Evennia is a Python game server for creating text-based multiplayer games (MUDs, Mushes, etc) using Django and Twisted.</p>
|
||
<p>Some of the upcoming improvements have been covered by previous dev blogs, such as the <a href="https://evennia.blogspot.com/2018/01/kicking-into-gear-from-distance.html">completely reworked server infrastructure</a>:</p>
|
||
<p><a href="https://4.bp.blogspot.com/-R0ziGF8cMPc/Wmz0ppbJkQI/AAAAAAAAH9s/e1D6DVBVwMMia04OubZi5nvO1h8RfdRoACPcBGAYYCw/s1600/portal_server_reboot_develop.png"><img src="https://4.bp.blogspot.com/-R0ziGF8cMPc/Wmz0ppbJkQI/AAAAAAAAH9s/e1D6DVBVwMMia04OubZi5nvO1h8RfdRoACPcBGAYYCw/s320/portal_server_reboot_develop.png" alt="" /></a></p>
|
||
<p>as well as the new <a href="https://evennia.blogspot.com/2018/08/inline-building-in-upcoming-evennia-08.html">Online Creation System</a> that allows for editing in-game prototypes using a powerful menu system:</p>
|
||
<p><a href="https://3.bp.blogspot.com/-ht9SIPcUxfc/W3f0xcl2HdI/AAAAAAAAJIw/cZt90znG82sSNg7Y-dpdiG5f1EXefZiNACPcBGAYYCw/s1600/Screenshot%2Bfrom%2B2018-08-18%2B12-26-12.png"><img src="https://3.bp.blogspot.com/-ht9SIPcUxfc/W3f0xcl2HdI/AAAAAAAAJIw/cZt90znG82sSNg7Y-dpdiG5f1EXefZiNACPcBGAYYCw/s400/Screenshot%2Bfrom%2B2018-08-18%2B12-26-12.png" alt="" /></a></p>
|
||
<p>Other improvements are in the web client, which supports split-panes out of the box. The user can split the output area in any number of panes, resize as desired and then assign different types of content to each pane. You can also have panes that absorb "all the rest" or "all" of the content.</p>
|
||
<p><a href="https://4.bp.blogspot.com/-BKHBV0L443U/W7EgLdZIQmI/AAAAAAAAJZo/Dzv_aD80B-80GgxzZsyq6XUSzAzv86IwQCLcBGAs/s1600/Screenshot%2Bfrom%2B2018-09-30%2B21-09-55.png"><img src="https://4.bp.blogspot.com/-BKHBV0L443U/W7EgLdZIQmI/AAAAAAAAJZo/Dzv_aD80B-80GgxzZsyq6XUSzAzv86IwQCLcBGAs/s400/Screenshot%2Bfrom%2B2018-09-30%2B21-09-55.png" alt="" /></a></p>
|
||
<p>There are still some bits which are a bit shaky and there is still much to do with the web client (for example, not that many outgoing messages yet defaults to being tagged in a way that the webclient recognizes). But it's a step forward!</p>
|
||
<p>There are many other improvements for developers, such as easier tools for running debuggers and a lot of new utilities and helper functions. The menu-creation tool (EvMenu) has seen a lot of improvements and also sport a few new decorators for quickly creating multi-page menus with full functionality to flip through and select large numbers of options.</p>
|
||
<p>The community has also chipped in with a large number of optional contributions for developers to use for their own game, such as a full turn-based combat system (divided into convenient chunks for the dev to pick and choose support for everything from magic and potions to equipment and ranged attacks). There are also a range of helper functions for creating simpler menus and build commands as well as auditing tools and additions making better use of Django's very mature security features.</p>
|
||
<p>The more detailed list of improvements and changes can be found in the announcement <a href="https://groups.google.com/forum/#%21category-topic/evennia/evennia-news/teSx6ICHSTU">here</a>. As usual, please report any issues to the issue tracker on github.</p>
|
||
<h3>Future</h3>
|
||
<p>In the immediate future, we'll focus on resolving any bugs that may have slipped through the cracks and also resolve some other issues in the pipeline.</p>
|
||
<p>But beyond that, work on Evennia 0.9 will begin. And before you ask - yes Evennia 0.9 is the version where we'll move fully to Python3. Our dependencies have now reached a point where this is possible and there will be no intermediary Python2/3 version. There is no timeline for the 0.9 release but it should hopefully not be too tricky for the community to make the jump when the time comes.</p>
|
||
|
||
<footer class="devblog-footer">
|
||
<span class="devblog-copyrights">
|
||
|
||
</span>
|
||
<a class="devblog-to-toplink" href="2018.html#2018-09-30-evennia-0.8-released" title="Link to top of post">⇬(top)</a>
|
||
</footer>
|
||
</div>
|
||
|
||
<hr>
|
||
<div class="blog_post">
|
||
<h1 id=2018-08-18-inline-building-in-upcoming-evennia-0.8>
|
||
Inline building in upcoming Evennia 0.8
|
||
<a class="devblog-headerlink" href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8" title="Permalink to this blog post">¶</a>
|
||
<div class="devblog-title-date">- August 18, 2018</div>
|
||
</h1>
|
||
<p><a href="https://4.bp.blogspot.com/-h2OiulcCLIY/W3gLw-UzGgI/AAAAAAAAJKI/bS_gTmOcQoAgaGmCOnx-b4x60zTr1pVCgCLcBGAs/s1600/773px-Industrial_Trust_Building_Providence_RI.jpg"><img src="https://4.bp.blogspot.com/-h2OiulcCLIY/W3gLw-UzGgI/AAAAAAAAJKI/bS_gTmOcQoAgaGmCOnx-b4x60zTr1pVCgCLcBGAs/s200/773px-Industrial_Trust_Building_Providence_RI.jpg" alt="" /></a></p>
|
||
<p><a href="http://www.evennia.com/">Evennia</a>, the Python MUD-server game development kit, is slowly creeping closer to its 0.8 release.</p>
|
||
<p>In our development branch I've just pushed the first version of the new OLC (OnLine Creator) system. This is a system to allow builders (who may have limited coding knowledge) to customize and spawn new in-game objects more easily without code access. It's started with the <strong>olc</strong> command in-game. This is a visual system for manipulating Evennia <em>Prototypes</em>.</p>
|
||
<h3>Briefly on Prototypes</h3>
|
||
<p>The <em>Prototype</em> is an Evennia concept that has been around a good while. The prototype is a Python dictionary that holds specific keys with values representing properties on a game object. Here's an example of a simple prototype:</p>
|
||
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%;"><span></span> {"key": "My house",
|
||
"typeclass": "typeclasses.houses.MyHouse"}
|
||
</pre></div>
|
||
|
||
<p>By passing this dict to the spawner, a new object named "My house" will be created. It will be set up with the given typeclass (a 'typeclass' is, in Evennia lingo, a Python class with a database backend). A prototype can specify all aspects of an in-game object - its attributes (like description and other game-specific properties), tags, aliases, location and so on. Prototypes also support inheritance - so you can expand on an existing template without having to add everything fresh every time.</p>
|
||
<p>There are two main reasons for the Prototypes existing in Evennia:</p>
|
||
<ul>
|
||
<li>They allow you to customize <em>individual</em> objects easier. For example you could have a 'Goblin' base prototype with inheriting prototypes Goblin Wizard" and "Goblin Chieftain" - all using the same Typeclass, but with different Attributes, equipment etc.</li>
|
||
<li>Prototypes can be manipulated and scripted by builders without needing full Python access. This means that while the Typeclasses are designed and supplied by the Python developer, the builders can then use that typeclass to make very different types of object instances in-game.</li>
|
||
</ul>
|
||
<h3>What's new</h3>
|
||
<p>As said, Prototypes have been around for a good while in Evennia. But in the past they were either manually entered directly as a dict on the command line, or created in code and read from a Python module. The former solution is cumbersome and requires that you know how to build a proper-syntax Python dictionary. The latter requires server code access, making them less useful to builders than they could be.</p>
|
||
<p><em>Note: If you are visually impaired, each image is also a link to a text-only version.</em></p>
|
||
<p><a href="https://pastebin.com/raw/3YNtAdvz"><img src="https://2.bp.blogspot.com/-ht9SIPcUxfc/W3f0xcl2HdI/AAAAAAAAJIk/VSk4VaBMhTc3J8ZaTnar9X2Rws-LOMiqACLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B12-26-12.png" alt="OLC index" title="OLC index 1" /></a></p>
|
||
<p>In Evennia 0.8, while you can still insert the Prototype as a raw dict, <strong>spawn/menu</strong> or the new <strong>olc</strong> command opens a new menu-driven interface.<br />
|
||
<a href="https://pastebin.com/raw/4UbUNGmG"><img src="https://3.bp.blogspot.com/-tdauL-B6j1E/W3f01ltKlzI/AAAAAAAAJIs/Q5-cIY6AcGU_IXXasdzPWec7cxN061WrwCLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B12-27-37.png" alt="Select a prototype to load. This will replace any prototype currently being edited! ___________________________________________________________________________________________________ Select with <num>. Other actions: examine <num> | delete <num> Back (index) | Validate prototype | Quit 1: goblin_archer 5: goblin_archwizard 2: goblin_wizard 3: goblin 4: archwizard_mixin " title="Prototype loading" /></a></p>
|
||
<p>More importantly, builders can now create, save and load prototypes in the database for themselves and other builders to use. The prototypes can be tagged and searched as a joint resource. Builders can also lock prototypes if others are not to be able to read or use them to spawn things. Developers can still supply module-based "read-only" prototypes (for use as starting points or examples to their Builders, for example).</p>
|
||
<p><a href="https://pastebin.com/raw/dUGiSLDL"><img src="https://2.bp.blogspot.com/-XFm3KqhLBwE/W3f93upyVLI/AAAAAAAAJJA/eZDWGPHM93MWvt2T5W8Ytr4cHstGg8iXACLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B13-04-48.png" alt="Found 1 match. (Warning: creating a prototype will overwrite the current prototype!) ____________________________________________________________________________________ Actions: examine <num> | create prototype from object <num> Back (index) | Quit 1: Griatch(#1)" title="Load prototype from object" /></a></p>
|
||
<p>You can now also use the menu to search for and create a new Prototype based on <em>an existing object</em> (if you have access to do so). This makes it quick to start up a new prototype and tweak it for spawning other similar objects. Of course you could spawn temporary objects without saving the prototype as well.</p>
|
||
<p><a href="https://pastebin.com/raw/VspKN3xf"><img src="https://1.bp.blogspot.com/-DYcYStEWXKk/W3f_-bnH4vI/AAAAAAAAJJY/iv4-GN8NTpUCpBvyXBwMUABG8TTPJYN9ACLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B13-15-44.png" alt="The Typeclass defines what 'type' of object this is - the actual working code to use. All spawned objects must have a typeclass. If not given here, the typeclass must be set in one of the prototype's parents. [No typeclass set] ______________________________________________________________________________________________________________________________________________ Back (prototype-parent) | Forward (key) | Index | Validate prototype | Quit 1: evennia.contrib.tutorial_world.mob.Mob 7: evennia.contrib.tutorial_world.objects.TutorialObject 2: evennia.contrib.tutorial_world.objects.Climbable 8: evennia.contrib.tutorial_world.objects.Weapon 3: evennia.contrib.tutorial_world.objects.CrumblingWall 9: evennia.contrib.tutorial_world.objects.WeaponRack 4: evennia.contrib.tutorial_world.objects.LightSource 10: evennia.contrib.tutorial_world.rooms.BridgeRoom 5: evennia.contrib.tutorial_world.objects.Obelisk current: (1/3) 6: evennia.contrib.tutorial_world.objects.Readable next page " title="Typeclass selection, miltipage" /></a></p>
|
||
<p>Builders will likely not know which typeclasses are available in the code base. There are new a few ways to list them. The menu display makes use of Evennia 0.8's new EvMenu improvements, which allows for automatically creating multi-page listings (see example above).</p>
|
||
<p>There is also a new switch to the <strong>typeclass</strong> command, <strong>/list</strong>, that will list all available typeclasses outside of the OLC.</p>
|
||
<h3>Protfuncs</h3>
|
||
<p>Another new feature are <em>Protfuncs.</em> Similarly to how <em>Inlinefuncs</em> allows for calling for the result of a function call inside a text string, Protfuncs allows for calling functions inside a prototype's values. It's given on the form $funcname(arguments), where arguments could themselves contain one or more nested Protfuncs.</p>
|
||
<p>As with other such systems in Evennia, only Python functions in a specific module or modules (given by settings) are available for use as Protfuncs in-game. A bunch of default ones are included out of the box. Protfuncs are called at the time of spawning. So for example, you could set the Attribute</p>
|
||
<blockquote>
|
||
<p><strong>Strength = $randint(5, 20)</strong></p>
|
||
</blockquote>
|
||
<p>to automatically spawn objects with a random strength between 5 and 20.</p>
|
||
<p><a href="https://pastebin.com/raw/3VLMEPFd"><img src="https://1.bp.blogspot.com/-qHeRpEQTEzU/W3gFpJ9ge5I/AAAAAAAAJJw/-PVcelDk2CsIW1nJwWvMjazcJ9LyKx5pgCLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B13-40-04.png" alt="prototype-key: goblin, -tags: [], -locks: spawn:all();edit:all() -desc: Built from goblin prototype-parent: None key: goblin aliases: monster, mob attrs: desc = You see nothing special. strength = $randint(5,20) agility = $random(6,20) magic = 0 tags: mob (category: None) locks: call:true();control:id(1) or perm(Admin);delete:id(1) or perm(Admin);edit:perm(Admin);examine:perm(Builder);get:all();puppet:pperm(Developer) ;tell:perm(Admin);view:all() location: #2 home: #2 No validation errors found. (but errors could still happen at spawn-time) ______________________________________________________________________________________________________________________________________________ Actions: examine <num> | remove <num> Back (index) | Validate prototype | Quit 1: Spawn in prototype's defined location (#2) 2: Spawn in Griatch's location (Limbo) 3: Spawn in Griatch's inventory 4: Update 2 existing objects with this prototype" title="Spawning screen" /></a></p>
|
||
<p>When spawning, the olc will validate the prototype and run tests on any Protfunc used. For convenience you can override the spawn-location if any is hard-coded in the prototype.</p>
|
||
<p><a href="https://pastebin.com/raw/K0a1z23h"><img src="https://4.bp.blogspot.com/-mkpUmXNQsWQ/W3gKE-5nnlI/AAAAAAAAJJ8/S65RiLXa6BcSstru3ePZmMna38cnWGRYQCLcBGAs/s400/Screenshot%2Bfrom%2B2018-08-18%2B13-58-27.png" alt="https://pastebin.com/raw/K0a1z23h" /></a></p>
|
||
<p>The system will also allow you to try updating existing objects created from the same-named prototype earlier. It will sample the existing objects and calculate a 'diff' to apply. This is bit is still a bit iffy, with edge cases that still needs fixing.</p>
|
||
<h2>Current status</h2>
|
||
<p>The OLC is currently in the develop branch of Evennia - what will soon(ish) merge to become Evennia 0.8.</p>
|
||
<p>It's a pretty big piece of code and as such it's still a bit unstable and there are edge cases and display issues to fix. But it would be great with more people trying it out and reporting errors so the childhood issues can be ironed out before release!</p>
|
||
|
||
<footer class="devblog-footer">
|
||
<span class="devblog-copyrights">
|
||
|
||
</span>
|
||
<a class="devblog-to-toplink" href="2018.html#2018-08-18-inline-building-in-upcoming-evennia-0.8" title="Link to top of post">⇬(top)</a>
|
||
</footer>
|
||
</div>
|
||
|
||
<hr>
|
||
<div class="blog_post">
|
||
<h1 id=2018-01-27-kicking-into-gear-from-a-distance>
|
||
Kicking into gear from a distance
|
||
<a class="devblog-headerlink" href="2018.html#2018-01-27-kicking-into-gear-from-a-distance" title="Permalink to this blog post">¶</a>
|
||
<div class="devblog-title-date">- January 27, 2018</div>
|
||
</h1>
|
||
<p><a href="https://3.bp.blogspot.com/-63mc2ur3Gyk/Wmz6puNzMGI/AAAAAAAAH94/vsXKZcCu2MwKlEaoCi7IjzWHJnPvGAQKgCLcBGAs/s1600/karate-312470_640.png"><img src="https://3.bp.blogspot.com/-63mc2ur3Gyk/Wmz6puNzMGI/AAAAAAAAH94/vsXKZcCu2MwKlEaoCi7IjzWHJnPvGAQKgCLcBGAs/s200/karate-312470_640.png" alt="" /></a></p>
|
||
<p>The last few weeks I have reworked the way <a href="http://www.evennia.com/">Evennia</a>'s startup procedure works. This is now finished in the <em>develop</em> branch so I thought I'd mention a little what's going on.</p>
|
||
<p>Evennia, being a server for creating and running text-games (MU*s), consists of two main processes:</p>
|
||
<ul>
|
||
<li>The <em>Portal</em> - this is what players connect to with their clients.</li>
|
||
<li>The <em>Server</em> - this is the actual game, with the database etc. This can be shutdown and started again without anyone connected to the Portal getting kicked from the game. This allows for hot-adding new Python code into the running Server without any downtime.</li>
|
||
</ul>
|
||
<p>Since Evennia should be easy to set up <em>and</em> also run easily on Windows as well as on Linux/Mac, we have foregone using the linux process management services but instead offered our own solution. This is how the reload mechanism currently looks in master branch:</p>
|
||
<p><a href="https://1.bp.blogspot.com/-U98LnVTJF7Y/WmzvHbQN2NI/AAAAAAAAH9U/10u8n91y56MdyW4Fmuv9k5Abk79TCCtUgCLcBGAs/s1600/portal_server_reboot_master.png"><img src="https://1.bp.blogspot.com/-U98LnVTJF7Y/WmzvHbQN2NI/AAAAAAAAH9U/10u8n91y56MdyW4Fmuv9k5Abk79TCCtUgCLcBGAs/s400/portal_server_reboot_master.png" alt="" /></a></p>
|
||
<p>Here I've excluded connections irrelevant to reloading, such as the Twisted AMP connection between Portal and Server. Dashed lines suggest a more "temporary" connection than a solid line.</p>
|
||
<p>The <strong><em>Launcher</em></strong> is the evennia program one uses to interact with the Server in the terminal/console. You give it commands like evennia start/stop/reload.</p>
|
||
<ul>
|
||
<li>When <strong>starting</strong>, the Launcher spawns a new program, the <em><strong>Runner</strong></em>, and then exits. The Runner stays up and starts the Portal and Server. When it starts the Server, it does so in a blocking way and sits waiting in a stalled loop for the Server process to end. As the Server and Portal start they record their current process-ids in <em><strong>.pid files</strong></em>.</li>
|
||
<li>When <strong>reloading</strong>, the Launcher writes a flag in a little <em><strong>.restart</strong></em> <em><strong>file</strong></em>. The Launcher then looks up the Server's .pid file and sends a SIGINT signal to that process to tell it to gracefully shut down. As the Server process dies, the Runner next looks at the Server's .restart file. If that indicates a reload is desired, The Runner steps in its loop and starts up a new Server process.</li>
|
||
<li>When <strong>stopping,</strong> everything happens like when reloading, except the .restart file tells the Runner that it should just exit the loop and let the Server stay down. The Launcher also looks at the Portal's .pid file and sends a SIGINT signal to kill it. Internally the processes catch the SIGINT and close gracefully.</li>
|
||
</ul>
|
||
<p>The original reason for this Server-Portal-Runner setup is that the Portal is <em>also</em> reloadable in the same way (it's not shown above). But over time I've found that having the Portal reloadable is not very useful - since players get disconnected when the Portal reloads one can just as well stop and start both processes. There are also a few issues with the setup, such as the .pid files going stale if the server is killed in some catastrophic way and various issues with reliably sending signals under Windows. Also, the interactive mode works a little strangely since closing the terminal will actually kill the Runner, not the Server/Portal - so they will keep on running except they can no longer reload ...<br />
|
||
It overall feels a little ... fiddly.</p>
|
||
<p>In develop branch, this is now the new process management setup:</p>
|
||
<p><a href="https://4.bp.blogspot.com/-R0ziGF8cMPc/Wmz0ppbJkQI/AAAAAAAAH9o/2BNcUTEqvBwkmlZAy7Q74Xmww_LkpB3wgCLcBGAs/s1600/portal_server_reboot_develop.png"><img src="https://4.bp.blogspot.com/-R0ziGF8cMPc/Wmz0ppbJkQI/AAAAAAAAH9o/2BNcUTEqvBwkmlZAy7Q74Xmww_LkpB3wgCLcBGAs/s400/portal_server_reboot_develop.png" alt="" /></a></p>
|
||
<p>The Portal is now a Twisted <a href="https://twistedmatrix.com/documents/current/api/twisted.protocols.amp.html">AMP</a> server, while the Evennia Server and Launcher are AMP clients. The Runner is no more.</p>
|
||
<ul>
|
||
<li>When <strong>starting</strong>, the Launcher spawns the Portal and tries to connect to it as an AMP client as soon as it can. The Portal in turn spawns the Server. When the Server AMP client connects back to the Portal, the Portal reports back to the Launcher over the AMP connection. The Launcher then prints to the user and disconnects.</li>
|
||
<li>When <strong>reloading</strong>, the Launcher connects to the Portal and gives it a reload-command. The Portal then tells the Server (over their AMP connection) to shutdown. Once the Portal sees that the Server has disconnected, it spawns a new Server. Since the Portal itself knows if a reload or shutdown is desired no external .restart (or .pid) files are needed. It reports the status back to the Launcher that can then disconnect.</li>
|
||
<li>When <strong>stopping</strong>, the Launcher sends the "Stop Server" command to the Portal. The Portal tells the Server to shut down and when it has done so it reports back to the Launcher that the Server has stopped. The Launcher then sends the "Stop Portal" command to also stop the Portal. The Launcher waits until the Portal's AMP port dies, at which point it reports the shutdown to the user and stops itself.</li>
|
||
</ul>
|
||
<p>So far I really like how this new setup works and while there were some initial issues on Windows (spawning new processes does not quite work they way you expect on that platform) I think this should conceptually be more OS-agnostic than sending kill-signals.</p>
|
||
<p>This solution gives much more control over the processes. It's easy to start/stop the Server behind the portal at will. The Portal knows the Server state and stores the executable-string needed to start the Server. Thus the Server can also itself request to be reloaded by just mimicking the Launcher's instructions.<br />
|
||
The launcher is now only a client connecting to a port, so one difference with this setup is that there is no more 'interactive' mode - that is the Server/Portal will always run as daemons rather than giving log messages directly in the terminal/console. For that reason the Launcher instead has an in-built log-tailing mechanism now. With this the launcher will combine the server/portal logs and print them in real time to easily see errors etc during development.</p>
|
||
<p>The merger of the develop branch is still a good bit off, but anyone may try it out already here: https://github.com/evennia/evennia/tree/develop . Report problems to the issue tracker as usual.</p>
|
||
|
||
<footer class="devblog-footer">
|
||
<span class="devblog-copyrights">
|
||
|
||
</span>
|
||
<a class="devblog-to-toplink" href="2018.html#2018-01-27-kicking-into-gear-from-a-distance" title="Link to top of post">⇬(top)</a>
|
||
</footer>
|
||
</div>
|
||
|
||
<hr>
|
||
<div class="blog_post">
|
||
<h1 id=2018-01-05-new-year,-new-stuff>
|
||
New year, new stuff
|
||
<a class="devblog-headerlink" href="2018.html#2018-01-05-new-year,-new-stuff" title="Permalink to this blog post">¶</a>
|
||
<div class="devblog-title-date">- January 5, 2018</div>
|
||
</h1>
|
||
<p><a href="https://1.bp.blogspot.com/-Cos98gc1wVU/Wk9Qdu2v6pI/AAAAAAAAH3U/O29xABaYrPYxPT3xubw79li5zU-kj_HVACLcBGAs/s1600/child-1539341_640.jpg"><img src="https://1.bp.blogspot.com/-Cos98gc1wVU/Wk9Qdu2v6pI/AAAAAAAAH3U/O29xABaYrPYxPT3xubw79li5zU-kj_HVACLcBGAs/s200/child-1539341_640.jpg" alt="" /></a></p>
|
||
<p>Happy 2018 everyone! Here's a little summary of the past Evennia year and what is brewing.</p>
|
||
<p><em>(Evennia is a Python server- and toolbox for creating text-based multiplayer games (MU*)).</em></p>
|
||
<p>The biggest challenge for me last year Evennia-wise was the release of Evennia 0.7. Especially designing the migration process for arbitrary users migrating the Django auth-user took a lot of thought to figure out <a href="http://evennia.blogspot.se/2017/08/renaming-djangos-auth-user-and-app.html">as described in my blog post here.</a> But now 0.7 <a href="http://evennia.blogspot.se/2017/09/evennia-07-released.html">is released</a> and a few initial minor adjustments could be made after feedback from daring pilot testers. <a href="https://groups.google.com/forum/#%21category-topic/evennia/evennia-news/0JYYNGY-NfE">The final process</a> of migrating from 0.6 to 0.7 is, while involved, a step-by-step copy&paste list that has worked fine for most to follow. I've gotten far fewer questions and complains about it than could be expected so that's a good sign.</p>
|
||
<p>Working away on the boring but important behind-the-scenes stuff made me less able to keep up with more "mundane" issues and bugs popping up, or with adding new "fun" features to existing code. Luckily the Evennia community has really been thriving this year; It feels like new users pop up in the support channel all the time now. The number of pull requests both fixing issues and offering new features and contribs have really picked up. A bigger part of my time has been spent reviewing Pull Requests this year than any other I think. I would like to take the opportunity to thank everyone contributing, it's really awesome to see others donating their time and energy adding to Evennia. The <a href="http://evennia.blogspot.se/2017/10/evennia-in-hacktoberfest-2017.html">Hacktoberfest</a> participation was also surprisingly effective in getting people to create PRs - I have a feeling some were just happy to have an "excuse" for getting started to contribute. We should attend that next year too.</p>
|
||
<p>One thing we added with 0.7 was a more formal branching structure: Evennia now uses fixed <strong>master</strong> and <strong>develop</strong> branches, where master is for bug-fixes and develop is for new features (things that will eventually become evennia 0.8). This is simple but enough for our needs; it also makes it easier to track new from old now that we are actually doing releases.</p>
|
||
<p>Now that Twisted is at a point where this is possible for us to do, we also now have a <a href="https://groups.google.com/forum/#%21category-topic/evennia/evennia-news/GbLh1GF-ZaY">sort-of plan</a> for finally moving Evennia to Python 3. I won't personally be actively working on it until after 0.8 is out though. I don't expect both Evennia 0.8 and 0.9 (which will be pure py3) to get released this year, but we'll see - so far contributors have done all the work on the conversion.</p>
|
||
<p>At any rate, this coming year will probably be dominated by catching up on issues and edge cases that are lining our <a href="https://github.com/evennia/evennia/issues">Issue tracker</a>. One side effect of more newcomers is more eyes on the code and finding the creaky-bits. At least for me, most of my Evennia-time will be spent resolving bugs and issues. The fun thing is that unlike previous years this is not only up to me anymore - hopefully others will keep helping to resolve issues/bugs to broaden our bandwidth when it comes to keeping Evennia stable. The faster we can handle the backlog of issues the faster we can focus on new shiny features after all.</p>
|
||
<p>Finally, a continued great thank you to those of you contributing to the <a href="https://www.patreon.com/griatch">Patreon</a>. Even small donations have a great encouraging value when working on something as niche as a Python MU* game server in 2018 - thanks a lot!</p>
|
||
|
||
<footer class="devblog-footer">
|
||
<span class="devblog-copyrights">
|
||
|
||
</span>
|
||
<a class="devblog-to-toplink" href="2018.html#2018-01-05-new-year,-new-stuff" title="Link to top of post">⇬(top)</a>
|
||
</footer>
|
||
</div>
|
||
|
||
</section>
|
||
</body>
|
||
</html> |