<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class]]></title><description><![CDATA[<p>When PowerCreeps were first released, there was a lot of code duplication between PCs and Creeps, particularly the movement piece. This makes it more difficult for players to deal with certain things, including their own homebrew movement code. Is there any intent to refactor all of the movement code into a &quot;Movable&quot; object type, and make Creeps and PowerCreeps extensions of that? I know that <a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/7">@WarInternal</a> has made a patch that does just that, but it's inefficient for players to do that, when it would be better for the game itself to do it.</p>
<p>In particular, I'd like to hear from the devs whether that was brainstormed and discarded (and why), or if it simply never came up in the decision making.</p>
]]></description><link>http://screeps.com/forum/topic/2762/make-creeps-and-powercreeps-inherit-from-a-movable-class</link><generator>RSS for Node</generator><lastBuildDate>Sun, 14 Jun 2026 19:29:24 GMT</lastBuildDate><atom:link href="http://screeps.com/forum/topic/2762.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Jul 2019 16:16:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>When PowerCreeps were first released, there was a lot of code duplication between PCs and Creeps, particularly the movement piece. This makes it more difficult for players to deal with certain things, including their own homebrew movement code. Is there any intent to refactor all of the movement code into a &quot;Movable&quot; object type, and make Creeps and PowerCreeps extensions of that? I know that <a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/7">@WarInternal</a> has made a patch that does just that, but it's inefficient for players to do that, when it would be better for the game itself to do it.</p>
<p>In particular, I'd like to hear from the devs whether that was brainstormed and discarded (and why), or if it simply never came up in the decision making.</p>
]]></description><link>http://screeps.com/forum/post/13936</link><guid isPermaLink="true">http://screeps.com/forum/post/13936</guid><dc:creator><![CDATA[SemperRabbit]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>We've done something like that for the Kotlin types, but we included actions like transfer and withdraw in the GenericCreep class.</p>
]]></description><link>http://screeps.com/forum/post/13937</link><guid isPermaLink="true">http://screeps.com/forum/post/13937</guid><dc:creator><![CDATA[Vipo]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>I feel the lack of an inherited movable-object potentially sets a bad precedent. Avoiding code duplication is a key measure in programming, regardless of language. I'll be the first to admit that if I'd implemented this, I wouldn't have thought to split off the movement prototype- it is extremely easy to get target fixation when working on a new feature. Nevertheless, the duplication here is inconsistent with the rather aggressive prototyping seen elsewhere. While Screeps is indeed a game about programming, this should be focused in areas that are more... productive. Unexpected behavior is already extremely problematic in Javascript- let us not make it worse with inconsistent prototype design.</p>
<p>The unlikely case that a third type of creep is to be added must be considered- must then players patch their way around three separate movement systems? Four? While some might argue this is slippery-slope reasoning, I feel that the unreasonableness of such an approach for ten different systems is proof enough of it's unreasonableness for two.</p>
<p>I would be extremely curious to hear the thought process behind this development choice- if it was overlooked at the time, considered and rejected, considered out of scope, etc.</p>
]]></description><link>http://screeps.com/forum/post/13938</link><guid isPermaLink="true">http://screeps.com/forum/post/13938</guid><dc:creator><![CDATA[Knightshade]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/2509">@vipo</a> yeah, that's my point. If lots of players are doing it, why not just get the game itself to take care of it instead. It's like the <code>mem_hack</code> that lots of players are doing. The devs expressed interest in doing it on the server-side, to save <code>Memory</code> parsing if the player doesn't need it. Perhaps they should express interest in doing this too, and following through.</p>
]]></description><link>http://screeps.com/forum/post/13939</link><guid isPermaLink="true">http://screeps.com/forum/post/13939</guid><dc:creator><![CDATA[SemperRabbit]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>As vipo said, proper inheritance has made my life easier when using the same kotlin screeps interface he mentioned.
Shouldn't be a surprise to anyone that proper code structuring is a great help in many factors such as readability and reducing code duplication.
However due to the nature of Javascript, as opposed to for for example kotlin since that's the example already used by Vipo, I understand it may not be as straightforward so I also understand knightshade's position.
In short, I believe that if it is properly implemented it can be a great addition.</p>
]]></description><link>http://screeps.com/forum/post/13940</link><guid isPermaLink="true">http://screeps.com/forum/post/13940</guid><dc:creator><![CDATA[AWRyder]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>My main issue is the cross-prototype calls in the power creep like this:</p>
<pre><code>   PowerCreep.prototype.moveTo = register.wrapFn(function(firstArg, secondArg, opts) {
        if(!this.room) {
            return C.ERR_BUSY;
        }
        return globals.Creep.prototype.moveTo.call(this, firstArg, secondArg, opts);
    });
</code></pre>
<p>It looks innocuous but there's a problem here; It goes against expectations (and general OOP). <code>Creep.prototype.moveTo</code> is expected to only be called on creeps. Therefore any overrides, any internal behavior of moveTo, expects <code>this</code> to be an instance of a <code>Creep</code>, or a <em>class derived from one</em>. A PowerCreep is neither, it's an entirely separate class abusing the scope of a Creep method. There are several methods and properties like this, that could be written once and reused, but the only common base is <code>RoomObject</code> which for obvious reasons is too abstract for this.</p>
<p>I understand why a PowerCreep can't simply be a child class of Creep, too many differences. But If you find yourself writing calls like this it's time to consider writing a shared based class.</p>
<p>This would allow for things like <code>hits</code>, <code>carry</code>, <code>moveTo</code>, <code>my</code>, <code>owner</code>, etc and any other methods or properties identical between the two to be written once and reused across as many types of actors as you want.</p>
<p>I'm a strong proponent for having a shared base class. Due to the way prototype inheritance works, adding such a prototype to the engine would <strong>not</strong> cause any breaking changes to existing player code.</p>
]]></description><link>http://screeps.com/forum/post/13941</link><guid isPermaLink="true">http://screeps.com/forum/post/13941</guid><dc:creator><![CDATA[WarInternal]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Tue, 16 Jul 2019 00:06:37 GMT]]></title><description><![CDATA[<p>I support a base class as well: the typescript types use <code>AnyCreep</code> as a base to proxy this for e.g. methods like <code>Tower.attack</code> which should be able to attack <code>Creep | Structure | PowerCreep</code> (note: the current documentation does not include PowerCreep as a valid target type)</p>
]]></description><link>http://screeps.com/forum/post/13942</link><guid isPermaLink="true">http://screeps.com/forum/post/13942</guid><dc:creator><![CDATA[Kotarou]]></dc:creator><pubDate>Tue, 16 Jul 2019 00:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>I can understand why they didn't do this - literally EVERY player's code is heavily reliant on creeps being a certain way, and now a lot of code also depends on power creeps being a certain way. If you're the kind of person who messes with prototypes, first why? secondly, changing this to a base class will likely break your code - it's not something that can be easily deprecated. Also, there's inactive players you need to think about - if you leave the game for two months and come back to find everything has been broken for a month, I'd be pretty pissed and never come back.</p>
<p>On the other hand, I totally agree with what you're saying: creeps and power creeps should inherit from a common base class, not just for simplicity, but as a general rule of programming too. I'd definitely prefer my code to simply &quot;work&quot; with little to no modification once I reach the power creep stage.</p>
<p>The real problem is that this isn't a cut-and-dry issue. There are nuances that need to be considered at all levels. I can totally understand the player base wanting something, and the developers simply being unable to deliver. They're really stuck between a rock and a hard place here.</p>
<p>But that's my view as a gamedev myself, so I may be biased.</p>
]]></description><link>http://screeps.com/forum/post/13943</link><guid isPermaLink="true">http://screeps.com/forum/post/13943</guid><dc:creator><![CDATA[Ratstail91]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/3313">@ratstail91</a> That doesn't really explain why they didn't do this to begin with though. &quot;Legacy Code&quot; is a poor excuse for bad design when you get to start from scratch (and they did get to start from scratch).</p>
<p>This wouldn't be the first time they made a breaking change- it wouldn't even be the first time they made a breaking change without pushing it to PTR first. Yeah, it's possible that inactive players will suffer for that, but realistically if you're not paying attention to the PTR and whatnot, you don't really have any right to get upset. You're actively not participating in the game- does it make a difference if you get wiped because one of your neighbors started eyeballing your territory vs because you didn't pay attention to patch notes?</p>
<p>User error is not a valid excuse for bad design either.</p>
<p>Personally, I disagree- this is absolutely a cut and dried issue. I'm all for recognizing the nuance in complex situations, but the truth is that the longer this is left unchanged the more problematic is becomes. Precedent exists for pushing breaking changes.</p>
<p>Besides, note- Both Warinternal and Semp are players that use prototypes heavily. <a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/7">@WarInternal</a> I know for certain uses, for lack of a better phrase, a &quot;Prototype-based architecture&quot;. The idea that these changes shouldn't be made for the sake of players who rely heavily on prototypes is completely swatted down by the fact that those very players <em>are the ones asking for these changes</em>.</p>
]]></description><link>http://screeps.com/forum/post/13945</link><guid isPermaLink="true">http://screeps.com/forum/post/13945</guid><dc:creator><![CDATA[Knightshade]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>One quirk of power creeps is that if you change a method on the <code>Creep</code> prototype which is also used on <code>PowerCreep</code>, then power creeps will use that method as well. I'm not sure whether this should be kept or removed. Personally, I think the proper behavior would be to remove this quirk, but I don't know whether anyone depends on it (intentionally or accidentally).</p>
]]></description><link>http://screeps.com/forum/post/13946</link><guid isPermaLink="true">http://screeps.com/forum/post/13946</guid><dc:creator><![CDATA[JBYoshi]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/55">@knightshade</a> OK, fair enough. Like I said, I'm totally on the side of refactoring the creeps, and I've only been playing for two weeks, so I don't know about any precedents, but it was just my view as a gamedev, and how I would run the game.</p>
]]></description><link>http://screeps.com/forum/post/13947</link><guid isPermaLink="true">http://screeps.com/forum/post/13947</guid><dc:creator><![CDATA[Ratstail91]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>Bumping because the devs never responded, although they responded to other stuff. Giving them the benefit of the doubt that they missed it...</p>
]]></description><link>http://screeps.com/forum/post/13968</link><guid isPermaLink="true">http://screeps.com/forum/post/13968</guid><dc:creator><![CDATA[SemperRabbit]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>I recently started with power creeps and I completely agree that there should be a shared base class. The fact that power creeps call methods on <code>Creep</code> caused me lots of issues.</p>
]]></description><link>http://screeps.com/forum/post/13969</link><guid isPermaLink="true">http://screeps.com/forum/post/13969</guid><dc:creator><![CDATA[SystemParadox]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Thu, 25 Jul 2019 09:33:30 GMT]]></title><description><![CDATA[<p>Introducing a new base class behind Creep class is a major breaking change for userspace code. Not just <em>a</em> breaking change, but a <em>major</em> breaking change, it will affect too many things (not in the engine, but in players' code). We will only consider such changes in some opt-in backward-incompatible versions of the game API, like 2.0 or something, but not in the current version.</p>
]]></description><link>http://screeps.com/forum/post/13980</link><guid isPermaLink="true">http://screeps.com/forum/post/13980</guid><dc:creator><![CDATA[artch]]></dc:creator><pubDate>Thu, 25 Jul 2019 09:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Mon, 29 Jul 2019 18:57:36 GMT]]></title><description><![CDATA[<p>With Iso-VM being a thing, this should be a viable option, no?</p>
<p>EDIT: Actually, <em>would</em> this even be a significantly breaking change? Only players who had gone into the power creep move prototype would be having problems with the change breaking, and those players would <em>explicitly</em> be the ones trying to fix this problem.</p>
<p>Not only that, was removing preboosting not a breaking change? And that was a hell of a lot more widespread than people mucking about in the power creep movement prototype.</p>
<p><img
      src="http://screeps.com/forum/plugins/nodebb-plugin-emoji/emoji/android/1f914.png?v=a1k070tfs06"
      class="not-responsive emoji emoji-android emoji--thinking_face"
      title=":thinking_face:"
      alt="🤔"
    /> Come to think of it, you could just as easily just point both the power creep and regular creep <code>move</code> commands to the prototype they're inheriting from and mark them as depreciated. That both wouldn't break anything and allow would allow people to get their code fixed.</p>
]]></description><link>http://screeps.com/forum/post/13987</link><guid isPermaLink="true">http://screeps.com/forum/post/13987</guid><dc:creator><![CDATA[Knightshade]]></dc:creator><pubDate>Mon, 29 Jul 2019 18:57:36 GMT</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Mon, 29 Jul 2019 20:15:26 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/3">@artch</a> Due to how prototype inheritance works I don't believe this would break <em>anything.</em></p>
<p>If we introduce a LivingEntity (choose any name) class between RoomObject and PowerCreep/Creep, the empty class by itself will change exactly nothing in the behavior. Existing properties and methods will still be inherited.</p>
<p>If we then move the method <code>move</code> to it, both classes would inherit the method as-is. The move methods on PowerCreep could be removed entirely, as instead of a hacky cross-prototype call, they'd inherit them from the LivingEntity class. And If you ever wanted to introduce a third type of movable actor you'd already have a decent base class to work with.</p>
<p>As for the common monkey-patching that we do that is 1) never been officially supported I thought and 2) surprise, still not broken. If you monkey-patch move on the Creep method, it will still inherit from the super class, only now it's not breaking PC because they have their own copy of move, from the LivingEntity class, and we have the <em>option</em> of patching that if we want to affect both.</p>
<p>If anybody can think of something it <em>would</em> break, I'm all ears.</p>
<p>Edit:</p>
<p>As for the <code>if (!this.room)</code> check in PC move, a prototype call can still be made but it needs to stay within it's own chain. If PC inherited from LivingEntity, something like:</p>
<pre><code>PowerCreep.prototype.moveTo = register.wrapFn(function(firstArg, secondArg, opts) {
        if(!this.room) {
            return C.ERR_BUSY;
        }
        return globals.LivingEntity.prototype.moveTo.call(this, firstArg, secondArg, opts);
    });
</code></pre>
<p>would be acceptable, <em>if LivingEntity were the parent class to PowerCreep</em>.</p>
]]></description><link>http://screeps.com/forum/post/13988</link><guid isPermaLink="true">http://screeps.com/forum/post/13988</guid><dc:creator><![CDATA[WarInternal]]></dc:creator><pubDate>Mon, 29 Jul 2019 20:15:26 GMT</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/3">@artch</a>, <a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/183">@o4kapuk</a>, check out <a href="https://github.com/semperrabbit/screeps_engine/tree/BaseCreep" rel="nofollow">this fork of the engine</a>. I have successfully tested this with creeps with both my and an Overmind codebase for approx 160k ticks each. neither of them broke at all. I had to build it with the <code>refact-remove-ivm</code> branch of the driver repo, but <code>master</code> for everything else... <a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/1347">@GimmeCookies</a> said he would test PowerCreep code on it later today. so far, we have not found <strong>any</strong> breaking changes in the slightest. I would love for others to test it too (ideally including the devs), to see if there is anything to break.</p>
]]></description><link>http://screeps.com/forum/post/13990</link><guid isPermaLink="true">http://screeps.com/forum/post/13990</guid><dc:creator><![CDATA[SemperRabbit]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>Honestly, this idea makes a lot of sense.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/77">@SemperRabbit</a> has a working branch of the code, and I can't see a single thing that would break if done properly (since seamless inheritance like this is literally the point of objects)</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/3">@artch</a> can you name a single thing that would actually break with this change?</p>
]]></description><link>http://screeps.com/forum/post/13991</link><guid isPermaLink="true">http://screeps.com/forum/post/13991</guid><dc:creator><![CDATA[Dignissi]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>I can think of several things which <em>wouldn't</em> break with this?</p>
<ul>
<li>grabbing <code>Creep.move</code> with <code>var x = Creep.prototype.move</code>.</li>
<li>grabbing <code>Creep.moveTo</code> with <code>var x = Creep.prototype.moveTo</code>.</li>
<li>grabbing <code>Creep.moveByPath</code> with <code>var x = Creep.prototype.moveByPath</code>.</li>
<li>calling <code>c.moveTo()</code> with any arguments</li>
<li>replacing the Creep move prototype with <code>Creep.prototype.move = x;</code> and having creep movement use the new function</li>
<li>replacing the Creep moveByPath prototype with <code>Creep.prototype.moveByPath = x;</code> and having creep movement use the new function</li>
<li>replacing the Creep moveTo prototype with <code>Creep.prototype.moveTo = x;</code> and having creep movement use the new function</li>
</ul>
<p>The only thing which would break, as far as I can tell, are:</p>
<ul>
<li>overwriting <code>Creep.prototype.moveTo = x;</code> and then expecting <code>somePowerCreep.moveTo()</code> to use the new creep moveTo function</li>
<li>overwriting <code>Creep.prototype.moveByPath = x;</code> and then expecting <code>somePowerCreep.moveByPath()</code> to use the new Creep <code>moveByPath</code> function</li>
</ul>
<p>Both of these things are breaking only to people who've written PowerCreep code in the time since they've been out, and both have the easily fixable solution of overwriting <code>Moveable.moveTo</code> / <code>Moveable.moveByPath</code>. There's no way this can affect idle users, even if they extensively use the prototype system.</p>
]]></description><link>http://screeps.com/forum/post/13992</link><guid isPermaLink="true">http://screeps.com/forum/post/13992</guid><dc:creator><![CDATA[daboross]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/47">@daboross</a> yeah, at best, it'd be a <em>minor</em> breaking change... and seeing as modifying <code>Creep.prototype.move</code> etc affecting <code>PowerCreep</code> stuff is not documented in the API, no one has any right to get butt hurt about it changing. it's like if someone were to rely on the exact order of a <code>.find()</code>. if that changes and breaks their code, who's fault is that? Never trust anything that's not in the API...</p>
]]></description><link>http://screeps.com/forum/post/13993</link><guid isPermaLink="true">http://screeps.com/forum/post/13993</guid><dc:creator><![CDATA[SemperRabbit]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>I would argue that <code>Creep.move</code> affecting <code>PowerCreep.move</code> is itself a bug. This surprised me when I encountered it and I fully expected it to be fixed at some point. Anyone relying on this behaviour is relying on a bug and should expect it to be fixed. For what it's worth, fixing this will break my code, but I still want it to be fixed.</p>
<p>All you need to do is publish an announcement far enough in advance that this is the plan and anyone relying on it can prepare for it by doing this:</p>
<pre><code>PowerCreep.prototype.move = Creep.prototype.move;
PowerCreep.prototype.moveTo = Creep.prototype.moveTo;
PowerCreep.prototype.moveByPath = Creep.prototype.moveByPath;
PowerCreep.prototype.transfer = Creep.prototype.transfer;
PowerCreep.prototype.withdraw = Creep.prototype.withdraw;
PowerCreep.prototype.drop = Creep.prototype.drop;
PowerCreep.prototype.pickup = Creep.prototype.pickup;
PowerCreep.prototype.say = Creep.prototype.say;
</code></pre>
<p>For anyone who does this or isn't relying on the buggy behaviour there are <em>no</em> breaking changes!</p>
<p>Note: I would strongly suggest that <em>all</em> of the offending methods above should be fixed, not just the move ones, so the class should probably be called <code>BaseCreep</code> or something rather than <code>Movable</code>.</p>
]]></description><link>http://screeps.com/forum/post/13994</link><guid isPermaLink="true">http://screeps.com/forum/post/13994</guid><dc:creator><![CDATA[SystemParadox]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>Here is a behavior change. <code>Object.getOwnPropertyNames(Creep.prototype)</code> would no longer return <code>move</code> or <code>moveTo</code>.</p>
<p>I assumed it would break more stuff. I was surprised that <code>Creep.prototype.move</code> still worked the same.</p>
<p>I really think this is a good idea. And it fixes the bug of changes to <code>Creep.move</code> affecting <code>PowerCreep.move</code>.</p>
]]></description><link>http://screeps.com/forum/post/13995</link><guid isPermaLink="true">http://screeps.com/forum/post/13995</guid><dc:creator><![CDATA[deft-code]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p>Ok everyone, <a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/17">@ags131</a> very graciously set up a pServ at <a href="http://prtest.screepspl.us" rel="nofollow">prtest.screepspl.us</a> as a test with my fork/branch of <code>engine</code> with a <code>BaseCreep</code> class. He and <a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/7">@WarInternal</a> already helped me identify/fix 1 error in it, and it is running pretty smoothly right now. Please spawn in and post results if you can <img
      src="http://screeps.com/forum/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=a1k070tfs06"
      class="not-responsive emoji emoji-android emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/3">@artch</a>, idk if you have any code, but you and <a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/183">@o4kapuk</a> are more than welcome to spawn in too. I'd love to get feedback on what the devs think. btw, figuring out the <code>data()</code> call was more tricky than I thought (see the commits from today lol)</p>
<p>Again, everyone can take a look at my branch here: <a href="https://github.com/semperrabbit/screeps_engine/tree/BaseCreep" rel="nofollow">https://github.com/semperrabbit/screeps_engine/tree/BaseCreep</a></p>
]]></description><link>http://screeps.com/forum/post/13998</link><guid isPermaLink="true">http://screeps.com/forum/post/13998</guid><dc:creator><![CDATA[SemperRabbit]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Wed, 31 Jul 2019 01:42:47 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/77">@semperrabbit</a> Thank you for taking the initiative on this Semp. This is huge.
I'd like to recommend adding a FIND_MOVEABLES or something similar so there can be a unified lookup, and probably others I'm not thinking of.</p>
<p>How is pull handled here?</p>
]]></description><link>http://screeps.com/forum/post/13999</link><guid isPermaLink="true">http://screeps.com/forum/post/13999</guid><dc:creator><![CDATA[Davaned]]></dc:creator><pubDate>Wed, 31 Jul 2019 01:42:47 GMT</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/77">@SemperRabbit</a> No pull request so I'll leave code review comments here.</p>
<p>Use braces on all multi line if statements. That seems to be the style in the rest of the repo.</p>
<p>Consider breaking this up into two PRs.
The first one creates the new base-creep type in the existing creep file renaming classes but otherwise not moving code around. The second one moves it all to the new file. This would be far easier to review as the unchanged functions would be nearly diff free. The second one would have tons of diffs but very little new code. The easier the PR is to review the more likely the devs will accept it.</p>
<p>We're still having memory problems with high room counts. I suspect the indexes are to blame. <code>FIND_MOVEABLES</code> is a fine idea but I would discourage a new index just concat the <code>FIND_POWER_CREEPS</code> and <code>FIND_CREEPS</code> calls. For completeness add a <code>FIND_MY_MOVEABLES</code> as well.</p>
]]></description><link>http://screeps.com/forum/post/14002</link><guid isPermaLink="true">http://screeps.com/forum/post/14002</guid><dc:creator><![CDATA[deft-code]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Reply to Make Creeps and PowerCreeps inherit from a &quot;Movable&quot; class on Invalid Date]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="http://screeps.com/forum/uid/77">@SemperRabbit</a> It looks like this is branched from main. It should branch from PTR, otherwise this will force all the new <code>Store</code>  to code to rebased (merge-hell).</p>
]]></description><link>http://screeps.com/forum/post/14003</link><guid isPermaLink="true">http://screeps.com/forum/post/14003</guid><dc:creator><![CDATA[deft-code]]></dc:creator><pubDate>Invalid Date</pubDate></item></channel></rss>