#Screeps Sandbox
1 messages · Page 4 of 1
ok started moving
I''ll be at home in 15 minutes
i think it might be related to when you spawn a defender
when new one popped out, they started to move i think
Oh
yup, looks like it's that
Wonder why that room don't be funneled
I think I found the bug for spawning
Now time to debug funnel
Hmm... It will be better to send energy that room in this situation? That can make my bot completely drained(if this situation was real)
Past me coded like, "help other rooms if you have enough"
And 100k is not enough for rcl7
Is your quad movement auto? Or flagged
Now defender is working even when it's spawning something
ye, so only if it's near hostile i guess
I got it
My bot just let miners and haulers to keep mining/hauling things, just do not spawn new ones if they die
Where is blue path??
Ah path of texts
Who's your anchor?
Bottom left?
top-right
Will your bot prefer blue over purple?
yes
How?
now a bit less optimal
Two path has same costs
ye, but more ramparts to go through
OK. I just wonder if there is some nice way to consider that
I wrote code to consider that which uses 30.0 + CPU for one pathFinding
😅
So I gave up
Looks like my room drained again
i mean i dont know why it would do the bottom-right to make a V
Hmm It was just theoratical example
In this picture, it would be better to go left straight until it reaches cost 1
not much
anchor is top-right, so no additional ramparts need to be destroye
so just the diagonal would need to be improved, but since it repaths every tick it'll self-fix after breaching
I experienced some edge cases like this
Blue square is ramparts, red square is quad. Sry for bad drawing
Which cannot be fixed after destroying left-bottom 2 ramparts
hm
btw not sure what happened in E9N6 because in theory my bot should not go anywhere beyond flag
and i see some stuff got destroyed inside
yup, not my creeps did that i think
also, labs are doing boost in it
Your creeps did not destory ramparts?
Yeah. Not sure how I wrote code for that situation
Maybe... "I am screwed. Whatever!"?
like "wreck own structuresby own creeps" thing ?
Is it attacking its own structures?
no defenders so idk
hmm yeah
honestly didn't think nor write any code for after break
except for activating safemode
Building ramparts again would be helpful I guess
i still have quad parked there
also room rebuild logic is not best
E11N4 still struggling after wipe 12h ago
not sending rebuilders/helpers from other room ?
Yeah I saw that and fixed it. Since there was link around source, that bot thought it doesn't need hauler😅
It should be rebuilding rn
what's happening in E13N5 with combat creeps ?
Wdym?
Hmm. Err code tells me that my Memory has circular structure
Hmm weird. Can't understand what happened.
rcl7 bit early for tackling t5 stronghold, and dunno where else this combat creeps would go
Maybe just for invaders in SK rooms?
just hanging around in own room then :p
I guess they completed their job and there's nothing left to do
nope, SK defenders are there :p
also quite some things seems to be bricked (some miners in rcl6 rooms not mining despite source having energy etc)
Not defenders but invaders. #world-help message this broke my memory lol
btw can you not upgrade controller in E9N6 ?
testing against rcl6 is cheaper than against rcl7 :p
Maybe I can turn on the test mode against you?
No tower shot & spawn small defenders
Hmm I see. I'll try to block that when I get up
how do you decide which rampart to repair ?
blue-highlighted is lowest one
Pick the lowest one and don't change too often is what I intended
1st repairer went to the one on screenshot, 2nd directly to blue one
my quad was attacking the 1st one few ticks earlier though
Maybe that's the cause
ok should be 3 quads soon coming to E9N6
oh god, wtf
[17:49:20]
Siege for E9N2 active
[17:49:20]
E8N4-8581 spawning [4/4] creep {"tough":0,"heal":1,"move":10,"ranged":39,"boosts":["XLHO2","XZHO2","XKHO2"],"attack":0,"work":0}
@sullen condor~~ something strange happening in E9N6~~ nvm that are not defenders but Name: a_-y9ck53
could reuse them though
Hmm it should use attackers as defenders. Can't understand why it didn't
You completely block them?
Yes, to big risk (for my code at the moment at least) to bump into active defender
Also escaping from such area is tricky, since it causes quad to traverse room edge thus opening it to towers due to half-heal every-other tick
That's true. My quads die a lot there. If that room gets rcl6 and mine some minerals, I'll be able to make some boosts. Are my defenders boosted?
They were in other rooms i attacked few days ago
i think you overcommit on repairers
for quad {"tough":0,"heal":7,"move":3,"ranged":5,"boosts":["XLHO2","XZHO2","XKHO2"],"attack":0,"work":0} you pop-out 9 8W17C13M repairers
that's 7.2k repair/tick
and your defenders have bit problem of priority / multi targets
oki they split, after quite-some ticks, just to come back again to focus on 1 quad
It's been a while since I've seen this server, how's your bot doing @sullen condor
It's growing on it's own. Iirc it got 4 rooms
I think my bot will be able to spawn boosted quad in few days
I'm on the travel now for 2 weeks
Oh. Should look into that. Thanks!
So did they work well, eventually?
hard to say, because my step-off logic broke somewhere along changes so 2-quad situation was not that long to validate it
i think when there are 2 defenders 1 will bounce between quads before 3rd one is spawned
cries in not even having working duo code at the moment
quads work even good, but half the time they got stuck in my own room when trying to form a snake 🙈
they are easy
@sullen condor tf are you doing there 🤣
Raising a new room 🙂
tbh, I couldn't expect my bot would claim that room
I thought you talking about this
Oh yeah, I've just seen it
Was like "what in the… is that remote" and it's not actually a remote
We were... good, you know
I feel stepped on
I feel like I should work on my bot's room selection logic
And baffled that it's still throwing silly creeps at it, and not even tried to claim it back
It's really really bad
A bit aggressive, I'd say 🤣
Tbh, I manually picked every room in season 7
And picking rooms myself at mmo too
Just didn't care much about sandbox... and look what my stupid bot did
That tower placement tho
I should get Grafana going on that one, just so I can see if that has any effect on the global health…
Doesn't look like it really made a dent in energy stores, but I'm not exactly tracking the numbers
I realize I don't even have a working counter-siege directive for that :/
uwu?
LOL
Still, I broke the quad code so much I spawned like… 30 fully boosted quad, but couldn't assemble them. Now I'm just waving around the biggest blob of boosted stuff like a monkey to make them actually work
Wonder how my bot would react to them - I have no idea
I don't think it really had a chance to do much
That's like 24 creeps stampeding in the room at once
It will be better to give up but I'm not sure they will
I found bugs in the controller attack code, so I didn't follow really closely the 🔥
I lost 2 fully boosted zerglings and 2 healers to a source keeper 
It didn't 😅
Oddly, it's ignoring all that tasty energy, too
Not focusing on the spawn as well
Yeah, my bootstrap code is... meh
Not that my attack code is doing any better
I have no idea why it decided that this miner, all the way on the other side, was the first creep that shall die
Hello? There's a blinky to take out, boys
@kind trench Poor reserver 🥲
Now it's stacking units in the highway, waiting for its time. I like that, that's scary~
🤔
They attacked!
Took them sooo long
Sooo bad at combat 
I keep noticing small mistakes. Creep low on hitpoint, heals, but doesn't step out onto an exit tile nearby, dies on it next tick
Creep tries to kite north. Into a wall, three ticks in a row. Gets blasted, and dies
I want to revisit my claim logic
It's hard to test something in sandbox since it doesn't have history though
I could try reenabling the mod, but I'm afraid it might break again
Cause is unknown?
I think, since it's collecting about 200-300 ticks worth of room events, then dumping them to storage every 100 ticks, that causes the server heap usage to balloon up until the GC freaks out and dies
That's my theory at the moment, I haven't exactly looked any closer, but given disabling it made the crash go away, and there's more and more rooms active across the map, that's what brought it to its knees
It fled for some reason 🤔
I think it's the boosted pair I sent?
@sullen condor What does 🎧 mean?
Yea right
That means they lost their job and chilling
It will give up the room in 6k tick I guess
Hmm. I guess I should put more fail check
Got it
I made a change so my bot will think it failed if a room is unclaimed
for this one event you need a specialised creep just to take that energy
where is this
W1N5
hum i love pathing creativity
Maybe your quad wanted to clear my remotes before siege
Opinions on providing infinite-CPU-as-a-Service to people who wanna run the profiler on their big empire? The plan would be that if someone asks, I give them like 10000 CPU, they can run with the profiler active for a few 10/100/1000s ticks, then I set them back to the default value and the get to have pretty flamegraph of what their bot is doing.
(mostly because I'm at 8 colonies, 218 creeps, and I consistently eat 100 CPU)
But I'm thinking it'd be really useful for sandbox purposes, too
I think that idea fits well with being a sandbox server for testing stuff.
I think it does. That's how I generally look at stuff. My main worry is that I'm not sure how the server reacts to a 10000 CPU player when there's more than one around (also, the server itself).
not sure that's of any benefit honestly :c
the fixed 100cpu serves as a limit for how big a player can grow
players can still do the 500 cpu burst for debugging/running their planner/running really cpu-hungry code
so imo temporarily enhancing bucket to idk 100k would be better
Hmm… Not sure I can change the bucket size like that tho. Especially not accurately. I suspect it's a constant somewhere, and updating it would just change everyone's
because just allowing for Xcpu more will make ppl to just "do-more" without improving their code to account for CPU limits
and most ppl cpu-bound already knows what their bot is burning cpu-wise :p
and giving them more cpu wont change much
Well the idea is to give me a time: "I want to profile for… say 30 minutes". It's definitely supposed to be temporary, for debugging purposes
Because the profiler itself is a lot of overhead (At least the screeps-profiler one)
not on my machine in my bot
Depends how extensive the profiler is.
I'll let that simmer a bit, see what people think then
It's likely the server is gonna go through a bunch of pauses/reboots. I'm gonna re-enable the history mod and try to make it not crash
Eeep. A 6Gb SQLite database
ye, i'm aware that ppl have the "big" one that counts all functions calls and their timings
@bitter lava You're crash-looping, for some reason
I'm re-enabling history
ah ok, because i'm getting anxious when i push code and server stops doing stuff in similar timeframe
works on my steamless-client though
[historyWorker] Saved 735 rooms
Lowered it to 20 per chunk, and it sneaked through
[backend] invalid room
Filed under "Weird stuff the server whispers to you"
Seems to be going though
Just added batteries to the market 'cause I forgot to set a price on those
@slender compass Why the face claim?
You really want me to look at OM's combat code, is that it? 😅
uhh, it seems my auto expansion is underweighting being close to other claims, gotta take a look at that, my bad!
It's okay, it's a sandbox after all~
oh wow, i just saw the room
how did it ever think that was a good idea
¯_(ツ)_/¯
I mean… I had absolutely 0 reaction to that
Which is like… something, I guess
…not even sure why that's a changeling there :/
My bot did the same thing to gadjung
There's a funny extension (top source) fight where you keep trying to build, but I have haulers side-stepping your miner, so they always stomp it. Placed at http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W5N2?t=7510334, and I believe to this day it's still trying to build it
Bit over-reacted
lol what a peaceful co-existence
thats pretty funny, i wonder if i should first place a rampart on it
yeah, I'm searching for the safemore reason
Pretty sure an invader crops up
And then that's taken as an aggression
Mhm. I'll have to check how the database is though
oh no, its even worse, it does manage to build it once but then an angry drone destroys it and then it immediately starts rebuilding again, hahahaha
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W5N2?t=7550267
Oh, history bug. http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W5N2?t=7521854 there's two construction sites, one with an ID, one without
Okay, that is weird. I'm not even sure why it would do that
Possibly interpreted as a blocked source, and decided to take it out, but IIRC it's just doing a path back to the colony and dismantling anything that's in the way, and that's isn't really in the way
Love how the energy pile keeps growing lol. 4.2K
and my bot doesn't know how to pick it up either..
im really surprised at how peaceful it has been
yeah, it's like 7551974 - 7507326 => 44648 ticks of haulers just chugging along in the middle of an "hostile" room
Not sure why it's still sending in drones though. They can't harvest, that should have triggered suspension of both of them
the whole extension thing caused a tower to never be built at RCL 3
and that probably makes this a pretty safe room to travel through
Ahah, that's the weirdest defense tactic ever~
Zergling pops up in room, no idea why: http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W5N2?t=7550943
Fucking heals a damaged hauler: http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W5N2?t=7550960
Safemode goes down
So I'm guessing invaders popped up in the next room over
That's like… crazy
A safemode because of a heal 🤣
Maybe not, actually. I have a damaged drone that just wandered really close to the controller
But timing is weird.
Maybe drone(which can dismantle your spawn) get in range 3 to his spawn?
this is probably the cause
Yeah. But that's fair enough safemode pop up situation
No defender, no tower, dismantler close to spawn
Extension finally comes up: http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W5N2?t=7551337
On top of my creep 🤣
that is a very unique sight
this whole room/scenario is a mess
That was a fun watch indeed
looks like it?
Not sure if it's a bug on my end or a creep is actually stuck when that happens…
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W5N2?t=7551846
oh, seems like it steps off around here
it just doesn't know what to do
i doubt it, my tower code is very dumb and there is no active defence
a single boosted blinky could probably take it back
i feel like there hasn't been a single time lately where i look at my bot and i do not find more bugs to fix...
Yeah, that's a pretty common occurrence here as well. I just try and take notes when I notice something really silly
Now I now I'm missing some detection check for that sort of thing happening
Like, a peaceful takeover
Tower up. I'm lucky it didn't start blasting at my useless drones
it might once safe mode runs out, i forgot what condition i gave it to attack non-combat creeps
Oh, true, forgot about the safemode 
Taught it to drop mines when the outpost is gone
Though I'm not sure how I feel about that cut-out room now…
An interesting conundrum 😅
indeed
All these steamless links, I really need to figure out why I can't get my container to run
dont need container for steamless
just clone repo and do node .\dist\clientApp.js (after npm install and whatever the build command is ofc)
or npx screepers-steamless-client
Ya but docker just makes it so much cleaner 🫠
dunno, that feels like a lot of things unnecessarily involved 😅
Okay, taught it to drop remotes if for some reason they end up disconnected
welp finally mining power again on sandbox.. didn't realize I had completely removed storing power bank info in my intel cache refactor
Cleans the room, then proceeds to wedge itself into the room edge: http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/jaysee/W5N2?t=7571676
I think it's trying to path to the creeps bottom left, but that takes it out of the room and it's not supposed to do that 
No clue why an infestor popped up and started attacking the controller: http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/jaysee/W5N2?t=7573129
Invader gnawing at the healer 🤣 http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/jaysee/W5N2?t=7574071
Just takes it
lol, it only died because the next generation came through, and that one then freaked out on the edge
At that point I'm back, so the pair is retired and I plant down a clearRoom that kicks in at http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/jaysee/W5N2?t=7574716
And then fails to unclaim, so a colonize gets dropped 
Manually cancelled that, then fixed a bug I just created when I added code to enforce there's no non-mine room blocking outpost reachability (that room to the right was dropped because of that)
did not expect it to survive this long in the first place, so losing the room was very much expected
i do question why it decided to unclaim at this moment, it should have done so once all spawns are gone...
feels totally random to me why it decided to to do it here, very weird
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/jaysee/W5N2?t=7574024
Heh, I didn't even notice that
That is a bit odd, but tbh, I had my fair share of odd things to look at from that little kerfuffle
Was definitely great for some bug hunting, alot of things broke or where just behaving weirdly
I should totally tell it to face claim again and find more bugs 🙃
i absolutely need to take a look at the unclaim code... why did it unclaim D:
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/jaysee/W6S19?t=7586488
so it both unclaims too late and now it unclaims a perfectly fine room ._.
i should maybe keep some logs as to why it does what it does...
@bitter lava Not sure what's going on with the colony spam around http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/room/jaysee/W9N8
oh all the dead rooms are abandoned ones
likely cause is it cannot get enough energy
okay then ^^
well, im now having the exact same issue on MMO and its breaking the entire room!
since now all source paths go through a hostile room, therefore no sources can be mined..
i should have learned from your bugs and not make the same mistakes!
time to go fix it aswell...
Hmm, that is an odd case of karma…
I did a bunch of Game.map.findRoute calls to handle it
Like, every time it "rebuilds" (happens every 20 ticks, IIRC, or on request), it'll compare the list of outposts a colony has with the list it had (from memory). If there are any that are "lost", it'll run that structure check, pathing from the main room over to all outposts, with a findRoute callback that fails if the room it's pathing in is blocked, or if it's straying too far from an outpost. And outpost managers themselves will deactivate and clean up if they're in a room that doesn't appear in their colony's outpost list (now updated)
i fixed it now by adjusting the distance map calculating to assume hostile remotes/claims are fully walled off
now it just wants to walk across the edge, but thats totally fineee, i needed to fix edges anyway
thats a pretty interesting way to do it!
for my implementation any time a room nearby changes its status it does a full recalculation of all remote paths
paths are deterministic so recalculating and ignoring existing paths should hopefully not be too much of an issue but time will tell on that one
Ah, yeah, if you have hard-cached paths that would be a bit different. I do soft-caching, the nuance being that it's never explicit; any pathing request gets cached, and reused if someone else pathes from the same A to B (hard-caching would be saving the path somewhere and just handing it out as needed).
The moment the outpost drops, anything in it will stop processing anyway, so there's no pathing happening anymore (maybe haulers, if they were on the way, but then the manager requesting pick up is gone anyway so I'd lose a couple)
hard-cached / soft-cached? whats the difference?
soft-cached being timed and hard cached being an event that invalidates it?
Some people put the path on… say the source itself and use that anytime they need to go to/from it
(I'm just coming up with those names)
I guess you could see it that way as well, yeah
ahh, i see, makes sense!
currently im only building roads on the planned paths and using it for harvester spawning and hauler assignment
actual movement is still based of path finding and its eating its fair share of cpu that i should really fix sometime soon...
…actually, I'm wrong. I don't cache paths. I cache distances. There's a few commented leftovers of a time where OM did actual path-caching, but I've been meaning to check out what has gone missing and maybe bring that back.
so pathing back to the storage involves doing some lookups in a distance map for example?
Not even. It's just using the pathing library, which doesn't cache those. But if you ask for a distance that will get computed (generating a path) and then cached for a while.
interesting!
Almost. I have a few places that need a few different distances (with or without terrain, with or without accounting for a creep's carry/fatigue)
Think knowing when a deposit miner should head back so it has some hope at not dying on the way back
But that gets cached into the deposit manager
probabilistic clearing.. thats new for me
is it just randomly clearing a couple cached values every now and then based on the bucket?
There's the commented full path version just below
thats pretty cool, i already know quite a few places in my code that could benefit from something like this
Movement, Pathing and MatrixLib are files I spent quite some time in, fixing a few oddball issues
Mostly around portal handling, IIRC, but a couple of cleanups as well
(IIRC that's a heavily modified Traveler)
recently i've been working on my own pathfinder, still gotta figure out better heuristics in a practical way to optimize it even more
#pathfinding message
for portal pathing i've already got everything pretty much covered, even doing crazy intershard shard0 fast travel 😄 (although that mess of code definitely needs some much needed optimizations and cleanup)
I haven't finished my intersharding code. I stole some idea from someone else in the fork network who had some basic stuff, but integrated it so that it's generic given OM's management system.
Got stuck on how to properly handle InterShardMemory exchange tho, and last time I enabled it, it filled up its memory and broke
what is the InterShardMemory exchange supposed to do?
intershard code was for me one of the most fun things to work on, very similar challenges to making peer to peer applications imo
Looks like that at the moment: ```ts
const enum InterShardPacketType {
HEARTBEAT = "hb",
CREEP_MEMORY = "cm",
PUBLISH_DIRECTIVE = "pd",
UNPUBLISH_DIRECTIVE = "ud",
CREEP_REPORT = "cr",
}
/* snip the actual packets */
interface InterShardMemory {
[peer: string]: InterShardMemoryContents;
}
interface InterShardMemoryContents {
packets: InterShardPacket[];
acks: { [packetId: string]: number };
time?: number;
}
(with a bunch of different "packet" types)
ahhh, packets!
one simplification i made for packet handling is that the ack can simply be "i received all packets send before tick X from shard Y"
even handles acks of acks nicely if you wanna go crazy (:
Yeah, I considered doing that, but then I'd have stalls because of the creep memory being out of sync
mhh?
Like, I can't ack those before the creep has showed up on the other side
ohh, thats a interesting one
i've never had to deal with that since i store a creeps memory in their name (don't really recommend it tbh)
added my packet types ☝️
How it works is that I'd drop, say a colonize directive on top of a shard portal, with a special syntax indicating the target room on the other side. Pioneers start going out, cross the portal, and on the other side the true colonize directive gets placed, and then pings back the "creep report" (role, current, needed), so that the other side knows it can stop sending whatever the directive needed.
I've only tested it with colonization, but technically I could place down whatever
the whole creep report thing im pretty sure ive majorly overcomplicated in my implementation, sounds like a smart way to do it
It's derived from how OM handles its spawning, so that was easy
I guess I could make spawn groups work with that as well, but I've just thought about it 😅
for my implementation:
each creep (or spawn, or queued spawn) would promise what that its gonna do something, and aslong as something is promising that the room gets build (or anything else it was gonna do) its won't ask again to do that task
the promises that are being handled on the current shard are then broadcast too all other shards, so all shards know whats being done
for example:
shard0 wants asks shard1 to promise that its gonna claim room X on shard0, then shard0 promises that its gonna do that
from then shard0 won't ask any other shard to claim room X as something is promising to claim room X already
Sounds like a nice alternative
this nicely handles a claimer spawning from shard3 going to shard0, 5 portals, then hopping to shard1 and back to shard0 then more portals into shard2 for a claim on the other side of shard2...
but it really feels overcomplicated for what it does
I mean, if it handles it, all the better 😅
I just expected to have shard-to-shard working, at least. Nothing more complicated than that
Also, it starts to get messy if I need to share portals coordinates across shards…
mhhh?
that was the "can't be easier" part for me, what was the issue?
maybe the rust API has some magic that makes it relatively painless to share coordinates
oh wait, portal coordinates, i misread, oh no
that is a very big mess yes...
Yeah. I'm pretty much handing out one directive and a bunch of creep to another OM, and that's where I stopped
Mainline OM's not exactly aware of portals. That's one part I had to write intel management code for
makes sense, i don't think you get that much more value out of it if you already have "simple" 1 hop intershard code
I mean, to be fair, given how frequent those are, I could just shove them in the intershard memory as static data and let the others see all of it…
thats what i did, and its still a mess
I bet. You'd need to have the terrain data around. That's the point where I just stopped 😅
im just assuming all rooms are plain open for portal pathing, the "good enough" approach
i've toyed with the idea of requesting other shards to do pathfinding from 1 portal to another though
Heh. Robalian stole the room I was planning to colonize back then
random side question: do you hardcode the available shard names?
(quad-portals: https://screeps.com/a/#!/room/shard1/W30N30)
I did, yeah
i tried to make it dynamic but it was a massive pain and just hardcoded it now, good decision 😛
I guess that's something else that could go live in the intershard memory; have each of them drop their Game.map.shard name or whatever it is. But you don't run if there's no creep. I guess I could use the portal destinations I see and stash that as well…
…I should finish my portals mod. I'd love to toy with those on pservers, at least the normal ones
i'd love it if that was working!
testing on PTR isn't exactly great when its broken half the time
I don't know why they have ptr up at all tbh.. if there's a constant balancing act of server resources to keep world shards at acceptable tick rates why are they wasting any resources on a PTR server that isn't actually being used to test any game changes when private servers exist.
there is no way for me to properly test intershard code without PTR though, i really appriciate that its working every now and then
Intershard is pretty much the only exception. Market code, too. That's what I found the PTR most useful for
If it at all takes away resources from world, not worth it imo
Actually, scrap the market code, that's not true ('cause everyone but you is frozen on there)
Not that we really have any to begin with, apart from the infrastructure :/
changed my badge so my old man eyes can actually see my reserved rooms now 👴
Logging in, logging in~
I suppose it's time to finally re-enable my sk mining code
Ah, clearly more visible now
it.. wasn't great before 😂
I think that just leaves Harabi
Also, are the terrain tiles broken just for me or…
On sandbox?
seems fine for me
Nevermind. I moved the map and they loaded 🤔
The history worries me a bit…
-rw-r--r-- 1 node node 32.0G Jan 26 19:29 history.db
I feel like that's a bit much
I mean, it was 6Gb when I looked at restarting it. Slashed the chunking size from 100 to 20, so like *5
Sounds about right
wonder if the history mod could be changed to only log history in rooms with a specific flag rather than any room with a creep. I don't need history in 95% of my rooms.
I guess? I'd much prefer fixing the heap leak tho
I mean that works too 😂 . Having a flag only mode would help with overhead for servers that want history but don't want to spend the resources for full history.
IIRC it's saving any rooms that are active at the moment
(Trying to see if I can mount the docker data volume back on the host so I can poke at that database)
Oh, I'm a Docker n00b. Of course it's just already there 
(storing that for later 501500)
24350602|W18S5|5053800||2024-12-03 15:35:39.116 +00:00|2024-12-03 15:35:39.116 +00:00
It's storing quite a few more than that 🤣
ye, i'd say a day-max-two would be good enough
Deleted all of 2024
Pretty sure some of those are from the previous server
sqlite> SELECT COUNT(*), MIN(createdAt), MAX(createdAt) FROM histories;
8014163|2025-01-17 19:39:21.805 +00:00|2025-01-26 20:03:31.811 +00:00
I'm just impressed at how many rows there are…
That's one per room per 20 ticks, but still
It's important for something like PTR to exist to allow the testing of certain things that are impossible to test on pservers. And it has a system to remove CPU from people who don't log in to it, so it's only using resources for people who actually use it to test.
PTR allows for testing stuff like memory / layout migration
which you usually cannot replicate well on private/community server
…cannot replicate? Just do that in prod, and then write the code to revert if you don't like the results 🤣
Me?
Your creeps are really hard to see
@scarlet fossil How much aggressive your bot is at power harvesting?
It's not
depends what you mean by aggressive. It's not gonna defend
Good. I want to test power harvesting
Attack my power duos?
Are you willing to turn on / write code to make them aggressive later?
My power duos are nonviolent now
Yeah, just like mine
Cool
I can drop a guard directive, if you want some bumps
Actually, that would also give me some data about my skeletal skirmish tracking stuff…
Not sure if I want to use the drills to defend power banks… There's this in in: ```ts
private getHostileDrill(powerBank: StructurePowerBank) {
return (
powerBank.hits < powerBank.hitsMax &&
powerBank.pos.findInRange(FIND_HOSTILE_CREEPS, 2)[0]
);
}
private handleHostileDrill(
hostileDrill: Creep,
powerBank: StructurePowerBank
) {
Game.notify(
`${hostileDrill.owner.username} power harvesting ${powerBank.room.name}, competing for same power bank.`
);
// this.directive.remove();
}
Not called from anywhere
It's currently recovering its bucket, but there should be 2 broodlings hanging out there pretty soon
highway, I guess?
In that case I guess we can make W0N0 as hill and play some king of the hill game?
Sure, sounds good
Cool. I'll drop the occupy mission on that room, which will try to keep the control over that room (used in season7 to get control over score collector, but never seriously used)
Okay, 2 broodlings headed to W0N0
For me, it's one 1m1r creep lol
Had to fix a couple of bugs. OM doesn't really like its directives forcibly moved like I just did 😅
But "energybath" incoming 👀
Do you have some sort of "long range scanning/tracking" of stuff?
With observer?
Mhm
I have a dumb system that goes through all observers and scans a 10x10 around each, and that's about it. I have a manual "over there" thing for special cases, and that's about it
insert cowboy face-off music
I guess my little creeps will be quite scared
Such positioning, much wow
They are waiting for... bigger ones
And at the same time first power mining is going on
I'm resetting bucket again 😅
That's gonna be a interesting fight
I'm getting too much pathing failures in the SK rooms, and that causes the bucket to sometime drop hard
Yeah. That's kinda annoying
Did quite a debugging last week and it's hard to find pathing issue now
@sullen condor It's on!
Cool
Aaaand they ded
Yeah. Your bot keeps sending creeps?
CPU: used: 129.487, bucket: 2407 (delta: -33, est: 371, avg: -30), tick limit: 500
Yup
But my bucket isn't exactly happy
Not adjusting size/number with enemy creeps?
Nope, that's the dumb invader-only directive
I mean, that's on me, I picked the first one I could think of 😅
CPU: used: 132.435, bucket: 1288 (delta: -30, est: 368, avg: -9), tick limit: 500
What a bunch of pathfinding work can do to your bucket average 🤩
…not that it's exactly better, but still
Let me swap it out for the correct one
[koth!>outpostDefense] enemy potentials: {"attack":55.00000000000001,"ranged":26,"heal":18,"dismantle":0}
allies potentials: {"attack":46,"ranged":19,"heal":10,"dismantle":0}
unit: {"attack":23,"ranged":19,"heal":33,"dismantle":0}
counts: {"attackCount":3,"rangedCount":2,"healerCount":1}
[koth!>outpostDefense] wishlisting 2 hydralisk to [koth!>outpostDefense:SG]: {"reassignIdle":true}
[koth!>outpostDefense] requesting 2 hydralisk@250, current: 1, to spawn: 1
[koth!>outpostDefense] wishlisting 1 transfuser to [koth!>outpostDefense:SG]: {"reassignIdle":true}
[koth!>outpostDefense] requesting 1 transfuser@250, current: 0, to spawn: 1
[koth!>outpostDefense] wishlisting 3 zergling to [koth!>outpostDefense:SG]: {"reassignIdle":true}
[koth!>outpostDefense] requesting 3 zergling@250, current: 2, to spawn: 1
Cool
That's a bit more people
So it would be fight => A win -> B spawn bigger -> B win -> A spawn bigger
Wdym by tracking
It's only based on the strength of what's currently in the room
I see
@scarlet fossil lol my bot decided to spawn T3 boosted creeps... it's a bit too fast
I mean… I tickled it wrong ^^
[koth!>outpostDefense] enemy potentials: {"attack":127.60000000000001,"ranged":88.4,"heal":108,"dismantle":0}
allies potentials: {"attack":138,"ranged":76,"heal":61,"dismantle":0}
unit: {"attack":23,"ranged":19,"heal":33,"dismantle":0}
counts: {"attackCount":6,"rangedCount":5,"healerCount":4}
[koth!>outpostDefense] wishlisting 5 hydralisk to [koth!>outpostDefense:SG]: {"reassignIdle":true}
[koth!>outpostDefense] requesting 5 hydralisk@250, current: 4, to spawn: 1
[koth!>outpostDefense] wishlisting 4 transfuser to [koth!>outpostDefense:SG]: {"reassignIdle":true}
[koth!>outpostDefense] requesting 4 transfuser@250, current: 1, to spawn: 3
I don't have anything set up to push it to boost tho
Has it been 6 fights?
It cannot consider boost?
It should
The big bump in enemy potential looks to me like it did account for them
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W0N0?t=7650961
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W0N0?t=7651258
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W0N0?t=7651740
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W0N0?t=7652417
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W0N0?t=7652506
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W0N0?t=7653201
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W0N0?t=7653354
so far
I'm at 6, but I might have missed the first one (I compressed my skirmish memory keys, so I lost the data that was already there)
How is it on your end?
I'm confused how I have visibility of that room sometimes, even when I have no more creep in it…
because tombstone
Heh, it just clicked
Sounds weird that a dead creep would do that
I mean… free intel for me, I'm not gonna complain~
Tombstones give vision so you can see what killed your creeps, I think. Since you need vision to get the event log.
Technically they only need one tick of vision for that.
That room is pure chaos at the moment
@sullen condor You won!
too much firepower needed to fight: {"attackCount":1,"rangedCount":10,"healerCount":9}
Oh, I've kept it running
It got scared by the T3s at one point, but once those stopped coming it went right back in
I would have been more interesting if I disabled boosts
I've worked a lot on combat intel, that was nice having the data around
Cool
Still trying to find a good serialization format for creep data though
Yeah, you fought really well
Or I fought really badly 😅
Would have loved to have actual kill tracking, but I wasn't looking at that
Yeah, I think zerglings has very bad body composition. You should put attack first to chase enemy. And since you can't heal and attack at the same time, it's better to attach healers to them. I think that's the biggest difference. Plus, your creeps don't heal each others?
Plus, hydralisks only heal after they got hurt. It'll be better if they preheal
Noted~ The creep bodies are old, so a lot of the meta has stabilized since those were implemented
Yeah I see
Finally got around to wiring PandaScreeps and it's not pretty 😟
😅 I would not want to see my bucket on a graph for sandbox. I have a bunch of CPU issues I need to fix before I can finally start working on my combat code (not to mention my sudden inability to stockpile energy)
But.. my sk mining code is mostly working so, that's something
Power mining is a bit more of an issue, they're out there attacking the deposits but I don't think I've successfully cracked one in time yet 🫠
I get the feeling of not wanting to see that. What's funny to me is that I get the exact opposite on MMO; That big upward vertical yellow line is the bucket rebuilding itself via the whole bot suspending its main loop. MMO has it the other way; there's a big downward vertical line indicating a pixel being generated
To be fair, I just suspended a colony, for the sake of stopping the bleeding, and that seems to have at least stabilized it
I don't know if kaldri is in discord, but I accidentally put your broken room out of its misery 😅
@cerulean wadi badge buddies?
[00:45:17]INFO 7872261 Terminal network activity:
‣ W4N8 ⟶ 3000 ZH ⟶ W12N5
[00:45:21]INFO 7872263 Terminal network activity:
‣ W2N8 ⟶ 3000 ZH ⟶ W4N8
[00:45:26]INFO 7872265 Terminal network activity:
‣ W7N2 ⟶ 3000 ZH ⟶ W2N8
[00:45:28]INFO 7872266 Terminal network activity:
‣ W3N5 ⟶ 3000 ZH ⟶ W7N2
[00:45:30]INFO 7872267 Terminal network activity:
‣ W8N5 ⟶ 3000 ZH ⟶ W3N5
[00:45:32]INFO 7872268 Terminal network activity:
‣ W6N7 ⟶ 3000 ZH ⟶ W8N5
[00:45:34]INFO 7872269 Terminal network activity:
‣ W12N5 ⟶ 3000 ZH ⟶ W6N7
[00:45:39]INFO 7872271 Terminal network activity:
‣ W4N8 ⟶ 3000 ZH ⟶ W12N5
Watch the ZH go round n' round, round n' round, round n' round 🎶
Ha I don't have that.. I do have a lot of "Factory decides to make this!", "Factory isn't making this anymore!", "Factory decides to make this!", "Factory isn't making this anymore!", "Factory decides to make this!", "Factory isn't making this anymore!", "Factory decides to make this!", "Factory isn't making this anymore!"
Oh, I got those. "Factory has been waiting for 50 ticks for biomass. Resetting…"
I just fixed an issue where the Terminal Network wasn't pulling resources from storage to terminal (forgot active providers), and now it's going on a loop because I suspect it's sending the recipent above the threshold, so they each become an active provider in turn
Suspending server for a bit. I wanna know if I can somehow manage to get the history database to be a little less bloated
Server running again. Not really a success, I'm afraid
Gonna do a bit of brain surgery to try and hopefully collect some data on those broken history chunks, so server is gonna do a few restarts (hopefully ones I cause and not random crashes 😅)
@kind trench Can you siege me for a while? I think there is some severe bug in my defense code
quad on the way but tick duration is quite loong
@kind trench Big Thanks
quad in E8N3
This server is doing a good job of reminding me that my CPU usage when at my GCL cap is atrocious 🫠
And that's after I made pathing failures forcibly sleep the responsible creep for a few ticks
I need to ramp down my rcl8's more. They don't need to each be having 25 creeps and remotes
Eyy glad you are all enjoying this so much still 🙂
Oh hi! Yeah, it's been running pretty smoothly
@kind trench Defenders are not working
at least rampart has 40m, gives me some time to debug
Yeah
ah ok, i'm not takingaccount of tough when calculating
fixed @sullen condor
Cool
now to somewhow make your quads more miserable than my room
What are they doing😂
working well
for some reason, my defenders are not attacking on tick that they both can but are notin position
wdym? They don't attack when they can?
I see
hm so my one defender is blocking 2 of your quads
according to my math, it's not strong enough to do anything to them
as-in though + outheal is bigger than what it would deal with towers
Effect of ra is more than double at point blank
That situation doesn't look good... maybe I should make them to change target if it's been too long to shoot watergun
what's the "cost" for quad to path around
because that's few M of walls to go through
a right, they are boosting (or should be)
nope RA
for meager 2 T3 RA-boosts i seem to save 30 T1 Attack ones
whooping 80dmg at range 1
Lol yeah
got some data finally from event log, and seems i heavily underestimated dmg 🙈
[11:41:16]Siege Data: 💥9240💥 🛠️3000🛠️
ok now it ramps properly
Siege Data: 💥8700💥 🛠️8500🛠️ 🛡️17769🛡️
What that numbers mean?
attacker dmg, my repair, ticks-to-breach
(as of previous tick)
and all debug data 🙈
I see lol
funnily enough, it's fairly cheap
like 1cpu for getting all dmg/repair of all attacked ramparts here
lol. you have 15 rooms! How this attack made you drained
9
because most of them does not have remotes
because of cpu throttle and because of you :p
I have become Harabi, Destroyer of energy stockpiles
also also, quads did ~100m of rampart damage despite repair
and few bugs somehow happening in other rooms
ok can stably outrepair your dmg as long as i have enough energy
how the siege stats / outlook is your side @sullen condor ?
What stats? Energy/resource usage?
yes
or progress if you have any metric on that
also,is it like "send quads till room is down" type of attack ?
Yeah. Don't have special metric.
Not tracking spent resources
also, the _disallowedCoords from your traffic library seems to not work "i think"
private keepToRamparts(c: ActiveRepairerCreep): void {
const onRampart = c.pos.lookFor(LOOK_STRUCTURES).find((s) => s.structureType === STRUCTURE_RAMPART);
if (!onRampart) {
return;
}
const nonRampartedArea = sUtils
.getPositionsAroundRoomObject(c)
.filter(
(p) => !Game.rooms[c.pos.roomName].lookForAt(LOOK_STRUCTURES, p.x, p.y).find((s) => s.structureType === STRUCTURE_RAMPART),
);
c.setWorkingArea(c.pos, 1, nonRampartedArea);
}
despite this code they still get pushed into your quads i think, will need to recheck if they are really pushed into quad or just walk into it
I use that feature in my own defense and I thought they work as intended
You should use costs and threshold instead of setWorkingArea
should be also
hence "i think" ;p
god, i see i pass "avoidSpots" into my pathfinder but it's completely unused 🙈
hum definitely got pushed 🤔
and definitely walked into quad also 🙈
so i guess a stalemate
I think I should improve logic to find position to get formed
for now it seems that there's a stalemate
as in ramparts breach time is not falling down
(not to say that i do not bleed energy)
hum ok, took you 2 days but you've chewed through
Oh. I didn't expect my bot to afford that
a lot to improve still but very satisfied with outcome
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/E8N4?t=8446120
Cann't see that now. Can you explain?
i survived 4 days of having 2 quads attacking room 24/7
while having energy issues
and the logic did not horribly break when you finally dug through to open another ramparts for quads
Yeah. Nice defense
@severe sun Did you spawn in sandbox?
There was a bad loop...
- Spawn remote defender for W7N4, which both traxusBot and my bot think as its own remote
- After killing invaders, they join the cool harasser club
- Traxus sends another invader
- Go back to 1
Will it be better to keep them as remote defenders for like, one hundred ticks?
Let them be harassers after that
i'd calculate time by distance to closest "owned hostile room"
can be (linear + 1) * 50
maybe with some buffer extra depending on body-size
Isn't it better to wait longer when enemy room is closer?
Since there is higher chance of revenge
no, because then the time that enemy shows up is shorter
I see the point
so i.e 50 (for hostile-room adjecent remote) + idk 120 (since defender was 40bodyparts, we assume same-one-ish would be sent) + idk. 50 on-top since spawn could be busy doing something else
So, wait and see if enemy sends back combatants, and change them to be harassers after that?
yes
How about send them to one of the enemy remotes that's not mine?
Enemy can be busy handling them, so cannot send combatants to the contested remotes. Maybe I can harvest contested remotes while doing that
invader? I was here first, sir! /j
But yeah, it's a complete bloodbath, and that pretty much drained me because OM stoopid
You are the zerg. Zergs are invaders!
shrieks in zergling noises
Sadly I'm not planning to try and fix any of that, so I guess it's just gonna keep sending fodder
Yeah, I'm sorry, but that's definitely zerg-like behavior 🤣
Oh, It seems that I said wrong. I mean, it's my bot that is problematic
This loop is making things more and more bad
I mean, it's a bit of mine. The issues I see:
- the idling creeps are just dead as soon as the directive gets removed (which happens once there hasn't been any hostile around for a few hundred ticks. A new one will get placed when it detects you, but at the moment the whole "idle" pool is just completely ignored. Hence, they dead.
- I won't stop; there's nothing in OM to abandon a conflicted remote like that. The only case where that will happen is for the case I added where someone pops in the middle of my "remote territory" and cuts out part of it in a way it can't easily be reached.
- I'm not tracking the resource expense of shoveling creeps in there to just stop when it gets too bloodbath-y
- There's no escalation; you will always get the same set of creeps, in a loop. Only the amount of it will change depending on how much is being detected
Idling : my bot sends them as harassers.
my bot won't stop too, unless you sends ridiculously big army
my bot do not track the expense too
my bot has escalation
So, in terms of bloodbath-y, my bot is better at going crazy 🤣
Currently the things I have in place to mitigate this are keeping squads separate rather than combining them into a bigger one (although I want to add ways to combine and split them intelligently eventually) and having squads get re-assigned back to defense from attack if defense is needed.
why not have predefined count of harass missions ?
with max creeps cap
so i.e max cap of 300bodyparts , to be capped at idk. 5-10cpu max
and then you just generate missions like room-x-harass needs 25bp so a single creep with 1cpu, room-y costs 200bp so 5 creeps 5 cpu and other rooms need 120bp+/3+cpu so dont get harass mission
@polar path I added you as ally in sandbox and your creeps are killing mine 🥲
Oh, I will add you
Not sure how it will handle remote overlap tbh
My ally code is untested
Better test here than thunderdrone!
Fair. I probably won't be supervising it as closesly on sandbox though. XD
Vote for a reset?
Server reset, I'm making a map right now
6x6, except I'm gonna punch a hole in the middle 'cause I feel fancy
I should have generated the 6x6 on the server. Maptool is a bit slow for so many rooms
Server's ticking if you wanna make some sand castles
Portals? Aspect I wanted to work on after seeing them this td
Portals from the inner edge of the ring to the outer edge of the same section to make it a donut. :P
I could? It's just that doing it manually is a bit of a slog
…hence why I wanted to make a mod out of those
I also second portals, even just a couple.
I'm working on the mod. I'm just done with the core "make me a portal pair from here to there" function
Oddly enough, I can't get the client to show the neat "unstable portal" message
…not sure what the rules on that are, tbh
Oh. It only shows the "portal is stable yet" on shard portals
Well that explains it
Ya no rush on them, just whenever the mods done ADD THEM OR I WILL RIOT 
I'm gonna dogfood my shiny new mod a bit, so server's gonna be taken down for a bit
Portals are in
The current rules are: they're all stable for one day, then will go through a PORTAL_DECAY-ticks long decay before vanishing
I think 30000 ticks?
Things I have not yet finished: sliders mode, where it could make a one-way portal only. And stray mode, where it might drop a portal into a non-core/crossroads
And stray mode, where it might drop a portal into a non-core/crossroads
Oh god
Imagine one dropping onto a hauling route for a bot that doesn't have portal code
Tragedy
Yeah, the reason I didn't finish that is how brutal it could be
"Portal pops up behind your ramparts"
I think if I do something like that, I'll make it skip owned/reserved rooms
Do tell if you see them doing weird things. I've reused a lot of the server's helpers for things like finding empty spaces so hopefully it's not gonna jam them into walls, but you never know
Ohh that was risky
Oh seems that not many spawned in sandbox. Maybe because of thunderdrone?
Oh I didn't realize it was live yet lol
Yeah, I misplaced my first spawn, then went on doing the portal mod. I wrote that code a while back and I think it's the first time it runs unsupervised; there's a few other special cases like terminal/storage moving, where I'll force some sort of special conditions to be fulfilled before it'll let the delete happen
Generally "make sure we have the energy around" and "make sure we have extra workers spawned in"
I've just started untangling the room planner from the colony, so that I can try and wire in a dynamic one in
Sadly I broke something and the initialization order is now wrong, so my test branch is a startup crash 😭
I have some updates I want to do before I spawn in to sandbox.
Is there a grafana page up for sandbox?
The server stats? Not that I'm aware of
You can set up pandascreeps against it tho
http://jayseegames.localhost:8080/(http://jayseegames.com:21025)/#!/history/shard0/W2N17?t=157929 RCL5 Before safeMode with all the structures and ramparts from rcl4 🙂
Nice!
Bumped the portal pair limit to 90
@cerulean wadi you have a core portal close to you now~
And one south of your east highway
nice, my explorers should take them when they find them (and store the portal info in my intel cache). I just need to figure out how to make my routing account for portals
That's another level on top of airports. Underground airports
Don't worry, those csites are more roads
Most people adapt their room plan to the terrain. This guy takes the modern human approach of adapting the terrain to their room plan.
Modern problems require modern solutions
Saving that for later. It's not yet in the history, but that's the moment the room architect noticed me replanning the room so it wouldn't be squished against the eastern exits
Am I the only one getting ```
TypeError: this.calcTransactionCost is not a function
at <runtime>:21583:41
at Object.Game.market.deal (main:2249:22)
at TraderJoe.buyDirect (main:15378:42)
at TraderJoe.buy (main:15501:33)
at TerminalNetwork.handleRequestInstance (main:45761:47)
at TerminalNetwork.handleRequestors (main:45953:38)
at TerminalNetwork.run (main:46003:14)
at try (main:48210:45)
at _Overmind.try (main:48055:17)
at _Overmind.run (main:48210:17)
at Object.main [as loop] (main:49359:16)
at __mainLoop:1:52
at __mainLoop:2:3
at Object.exports.evalCode (<runtime>:15381:76)
at Object.exports.run (<runtime>:20865:24)
on resets?
Getting wild with portals around here
Oh yeah, it's gonna be a bit random. IIRC the only limitation I've put in right now is that there can't be two different portals to the same room
Like, two from one room that both lead to the same room?
I don't mind portals all over the place though. Makes it easier to test
Yeah, that's the only case I thought was a bit silly when I was testing things locally
Tbf I had to set the limit pretty high because I'm not sure I handle detecting those "core" portals really well right now
So I think they end up taking 8 spots into the "pair queue"
Oof, makes sense
Yeah, it's one of the crazier things I have to do; tell a core portal from a non-core portal
I am actually detecting those, but not that I'm looking at it, I'm not sure it's actually working like I intended it to 😅
// We make a list of all the portals we know about
const oneWay = new Set<PortalObject>();
const pairs = new Map<PortalObject, PortalObject>();
const portals = (await db['rooms.objects'].find({ type: 'portal' })) as PortalObject[];
const corePortals = new Set<PortalObject>();
for (const portal of portals) {
const pair = portals.find((p) => isSamePos(p, portal.destination));
const roomPortals = portals.filter((p) => p.room === portal.room);
// Core portal detection
if (corePortals.has(portal)) {
continue;
}
const walls = (await db['rooms.objects'].find({ type: 'constructedWall', room: portal.room })) as WallObject[];
if (walls.length && roomPortals.length) {
const closePortals = roomPortals.filter((p) => walls.some((w) => isInRangeTo(p, w, 1)));
if (closePortals.length === 8) {
closePortals.forEach((p) => corePortals.add(p));
}
}
if (pair) {
pairs.set(portal, pair);
pairs.set(pair, portal);
} else {
oneWay.add(portal);
}
}
I'm saddened to report that my manual hacking of the auth timeouts doesn't appear to have done anything
IIRC I set those to 1h long, and yet it's timing out way earlier than that
lol, Jasper and Neon fighting over trying to sign the whole map with portal-capable scouts.
I spawned in near Harabi after making some planner tweaks. I'll probably try to work through some stuff on my to-do list with Sandbox as the test environment.
Cool
Yeah, I've been told. I should try and see how modified they really are but ugh
Ok wow, it's old
It's neither one of Muon's current versions
It's before the rename of the Strategist class
I have no idea, I'd have to grab random commits from Muon, build them, and diff his version against that to find a likely branch point
Was already a pain to get their code out into something I could diff against
Fair
Okay, confirmed it's a 0.5.2.1. I don't see much in terms of actual differences, so looks like it's vanilla
I've disabled them after sending a message
Nice portal colonize, @slender compass
My bot is now aware of users and gives them each a numerical ID so I can save the ownership of each room I scout with a single UTF character.
Oh I like that!
Oh I like that.
What's your plan if someone is wiped or respawned?
what are the details for pushing code? I can connect to game, with steamless client, but pushing code gives me connection refused, when using: "protocol":"https", "hostname":"jayseegames.com", "port":"443",
It is not https, just http iirc, and port is 21025
hmm, I tried that too. Also port 80 and 8080
I've created an account. Set my password under account settings
double checked email and password too
Hmm I have no idea then. What's the error says?
sandbox: {
options: {
token: undefined,
server: {
host: "jayseegames.com",
port: 21025,
http: true,
},
},
src: ["src/*.js"],
},
This is what I'ma using
In grunt
ok thanks, I figured it out. Was my push code not being able to handle http.
So far my plan is to keep that key populated forever. The number of valid keys I could have is many times greater than the total number of screeps players, so I don't think it will become an issue. If it does, I guess I can deal with it then. :P
I could just wipe that list and my temp scout map and restart scouting from scratch if it gets too bloated in the long run.
Stealing that lmao
Oh I can even default the first three to myself, Invaders, and SKs. Which actually cleans up a few things in my code
Could always have a "tick last seen" and if you don't see their creeps or an owned room in some godawful long time you remove them
Yeah, the issue is that gaps in the list of keys are not at all handled currently. XD
is darklorde a unmodified overmind user? They seem to have some telltales of it
No bunker would be modified
The ramparts in E28N5 outside the wall do look like a bug I had
Yeah, uses walls, has its own fast filler system, I don't think it's one
kk
me and darklorde have been duking it out for this one remote, i've mostly been winning but rn is a contentious moment
No, but he is an NCP. That's Mirroar's Hivemind.
Right across the map from the original, lol.
I thought his name sounded familiar, he is also a Hivemind NCP on MMO, near me.
…is messaging broken for you too? Here at least, clicking the Message option in the sidebar results in a JS error
User disabled. Not sure how different his code is from Hivemind tho
As far as I could tell, it looked like standard Hivemind, but there may be changes that I missed.
Ye I tried to talk to tunnel man, broke for me
Okay, so not just me. It's weird, you can get to the messaging if you send a message through someone's profile, but the main page is just broken
I'm not even sure what happen if someone sends you a message… Could someone send me one so I can maybe have a look?
Messaged
Also did not break, I clicked on your profile and hit Message
Attempting to view messages, either from the sidebar or User profile > message > back button to messages, seems broken
Well if the ping works, and the individual messaging pages work, then all folks have to do is go click on the user profile > message for everyone until they find the person who sent them something
lol
Oh wow, it is a mod error
I've just been through a bit of a rabbit hole before actually going to check on the server logs, and lo and behold
screeps-1 | 2025-03-19T15:37:42.753679131Z [backend] TypeError: _.indexBy is not a function
screeps-1 | 2025-03-19T15:37:42.753700271Z at db.users.find.then.users (/screeps/mods/node_modules/screepsmod-mongo/lib/backend/api/index.js:42:41)
screeps-1 | 2025-03-19T15:37:42.753712851Z at _fulfilled (/screeps/mods/node_modules/q/q.js:854:54)
screeps-1 | 2025-03-19T15:37:42.753716771Z at /screeps/mods/node_modules/q/q.js:883:30
screeps-1 | 2025-03-19T15:37:42.753720461Z at Promise.promise.promiseDispatch (/screeps/mods/node_modules/q/q.js:816:13)
screeps-1 | 2025-03-19T15:37:42.753724421Z at /screeps/mods/node_modules/q/q.js:624:44
screeps-1 | 2025-03-19T15:37:42.753728251Z at runSingle (/screeps/mods/node_modules/q/q.js:137:13)
screeps-1 | 2025-03-19T15:37:42.753732031Z at flush (/screeps/mods/node_modules/q/q.js:125:13)
screeps-1 | 2025-03-19T15:37:42.753735821Z at process._tickCallback (internal/process/next_tick.js:61:11)
aaand there's even a set of authlib monkeypatches in there. You know, the ones with the session expiration timeouts? Now I guess I know why my change to the server didn't do anything 
Gonna laugh when a messaging bug leads to fixing the timeout issue that's been plaguing this for ages lol
Okay, messaging fixed
Oddly enough, someone changed keyBy into indexBy (the lodash v3 version of the name 7 years ago), then lodash was pinned to v4 last year, causing the bug
@scarlet fossil are you able to share the fix to this bug? I noticed newbieland has this problem too and sent a ping over to audite to check this thread
I filed a few other ones as well, but nothing that's like… obvious
@sullen condor I think your power harvesters are passing through my room on sandbox. At least, there's random attack/heal duos passing through, so I assume they're probably power harvesters.
I registered you as ally in sandbox
🥲
You did not?
I did that during test period
Oh, I see. I can mark you as an ally for now as well. I figured we would want to test sparring with each other at some point, but we can turn off the ally status for that later.
Yeah. I almost forgot that I registered you as ally, tbh
I added you to my ally list on sandbox
I have public ramparts on my to-do list as well so maybe I can implement them soon and see if they work with your creeps passing through.
I'm basically just planning to port my V1 bot's behavior for that.
public ramparts is really easy
Yeah, that's going to be a quick item on my to-do list. Although my version of it is a bit fancy.
It's basically
- Set all ramparts public if there is no enemy in the room and has not been for some time.
- If there are enemies in the room, set ramparts in range 2 of the enemies to private.
So the ramparts get put up right in front of the enemy.
And it can save some intents compared to switching all of them
That's going to look pretty cool
Like a Tron thing
The intent cost is pretty heavy
I'm probably going to just allocate a few "entrances" to keep open
How so?
Isn't it 0.2 per rampart
Yeah. But the method I use reduces how much switching is required compared to most methods I've seen. Like, probably the worst example I've seen is Trep's ramparts switching completely from public to private and back again every other tick when a creep is bouncing on the exit. Not to pick on him, but he should probably fix that. That's a lot of intents. XD
Yeah I see. I'm probably going to switch like 2-4 ramparts. Just enough to provide an "in" and "out"
That relies somewhat on your allies behaving a certain way. If they treat all your ramparts as walkable they may get stuck.
If you miss two ticks aren't you scared of enemies getting in?
I prefer the Saruss thing where you only make public those close to allies and the rest are private
If I do that, though, that requires pathing allies to just trust that the ramparts will open when they get there. Which is the opposite of what they have to assume for Mike's idea. 😂
Yeah, just make them trust that. They have to do that anyways since some people do the Saruss thing
I think open by default is preferable for maximum compatibility with ally code. My system could be dangerous if I drop ticks, but that just means I need to avoid dropping ticks. And I think my bot is solid at doing that (except when I am testing in production).
If my bot is dropping ticks while under siege I have a problem anyways. just not as big of a problem.
Do you not drop ticks for a little after a global reset?
Or your bot isn't using global enough
It does cost extra CPU to reboot some things but it defers those things until it has CPU for them.
And it generally operates with bucket to dip in to
Hmm I'm suspicious that you aren't peaking 500 CPU after a reset for a few ticks. I guess if you make those rampart stuff giga priority you're basically fine
This is on Sandbox, I was at 10k bucket before and I spend 1k on the reset stuff. But, as I said, that stuff get deferred if it there isn't enough CPU for it. It will just muddle through without those things until there is CPU to do them.
If CPU crashes low enough, haulers will skip their job search code before allowing there to be an actual time out error.
Paths are on global
Huh
Maybe when I get a big empire on MMO I will have to put more measures in place. I would still rather have more things defer execution than have it actually time out. Timing out can cause lots of issues.
I should really add respecting ally remotes. It is on my to-do list, just not done yet. 🙃
Your remote? Our remote.
After thinking way too hard about potential deposit harvesting methods, I think I've landed back on a relatively simple method that I want to implement. 😂
I proceed to immediately rethink that decision again.
Identify deposit
Send harvester(s) from closest room
Harvester(s) submit pickup requests to closest room, which sends haulers to collect
That's mine. Not the most efficient but about the simplest I could think of XD
Yeah, the thing is, I'm trying to go for most efficient rather than simplest. XD
Yeah, that involves nonsense like calculating* hauler capacities and arrival times. Hard pass lmao
Some methods I've considered:
-
Orbs: 49w1c miner, 50m mover, 50c mobile container. When first arriving, there would be a train pulling both the miner and two mobile containers, since empty mobile containers don't have any weight for fatigue. I like this idea pretty well, but my biggest concern is how it would break down on the TTL front. I can't really match the TTLs of the creeps involved, and if their TTLs aren't matched then managing them so they don't die at the wrong time could be very tough. I might be able to do it, though.
-
Full infrastructure: The room that's harvesting it builds a container at the deposit and a road to it, so I can use a full 50w orb to mine it and drop it in the container, and have regular road haulers pick it up. The problem with that is how to efficiently put up that infrastructure, without energy being provided by the end of the road. I'd have to haul out energy from the base, probably. And, also, I'm not sure if it would be worth the investment. And I would have to haul out more energy and some sort of creep to repair it if the mining operation lasts longer than 5000 ticks.
-
Moderation?: Instead of trying for an orb, use a 25w25c miner and 25c25m haulers. That way, the miner can be its own living container, and I don't need haulers to idle near the miner. The downside is that it would mine slower than a 49w/50w miner, but maybe that doesn't really matter. This is what I think I will go with.
#3 is closest to what most people do based on what I've seen. #1 seems optimal if you can manage it, but definitely harder.
From what I've seen, most people (me in my V1 bot included) do something like a 23w23m4c miner, and then have the haulers idle next to them waiting to be filled. That has a couple of clear inefficiencies, though. Move parts on the miner can easily be eliminated since I already have good pulling, and idling haulers like that are basically acting as living containers with extra unneeded move parts. So #3 is basically that strat with those inefficiencies stripped out.
If I want faster mining, I could use multiple miners and/or give the miners harvest boosts, as well
How about swnding 49w1c + 50m + 50c so 50c creep act like a container and after that sending 25m25c haulers?
I considered that as well. But the issue I see with that is that the 50m creep is mostly wasted (only doing one one-way pull trip).
Then the next thing I considered was using two 25c25m haulers to pull the 49w1c + 50m combo. But then it would potentially break down if the deposit is slow enough that only one hauler is needed. Maybe that could work if I only consider deposits that need two or more haulers to service them as being worth mining.
On my V1 bot I think it often mines deposits with only one hauler, though.
Maybe using multiple miners or boosts could mitigate that limitation, though.
How about that 50m creep round trip to move other miners too
As long as there is open space
150 path length and 3 round trip is 900 ttl so not bad I guess
Fair enough. I suppose that afterwards, it could try to take pulling jobs that would otherwise be taken by regular haulers, also.
Maybe it could be renewed to have enough TTL to do another round of miners and then die shortly afterwards.
So the move parts for two rounds are paid for with, like, 1.5 rounds worth of energy/spawn time.
It also wouldn't be carrying anything on the return trips, though. 🤔
Haulers also carrying nothing when they move to pick something up
So I guess that's fair use rate of move parts
True. Which is why I like ideas that reuse those trips.
Like, if haulers use the trip out to pull or dedicated pullers use the trip back to pull filled creeps.
I think my idea #3 from here has the best parts efficiency and lack of downsides. The main downside would just be the slower mining speed, but I think that's probably acceptable.
It would still be slightly more work parts per spot than standard strats. Just less than if I went all-out on big miners.
As cooldown goes high, maybe you can make them has more work parts than carry
Yeah, I could probably be somewhat dynamic with it. Like, for low cooldown I only do one miner with full carry parts, then as the cooldown goes up I do multiple miners (if there are spots) and fewer carry parts. Just enough carry to fill up during a hauler round-trip, probably.
That sounds good
Can you do a stacked pull? Have hauler a pull hauler b which pulls the work creep? Removes the need for a dedicated tow truck
I don't know if pull works like that
Probably should considering how many 0 move creeps I use
That does work, yes
I'm getting global resets on every tick @scarlet fossil
hey was my code paused?
May be a server issue