First of all this selection box should be have some graphics not some green lines (or it is only debug thing?).The cursor is a paceholder which will be eventually replaced with proper graphics.
Second is to show not visible tiles as black, right now edge of visibility look too "sharp" (tiles look like they hangs in space because you do not see other around).Yeah. Fog of war needs future improvements. But for now it is of lower priority, than implementing features. I'm curious how Magic & Mayhem and XCOM games implement FOW. I did it though bruteforce raycasting. But I doubt original XCOM used such resource intensive routine.
Some thing like that is done by OXC. Probably best version would be if tile is show as black only if it is adjacent to visible tile. With this edges will look more pleasing and you will see this star background too
Yeah. Fog of war needs future improvements. But for now it is of lower priority, than implementing features. I'm curious how Magic & Mayhem and XCOM games implement FOW. I did it though bruteforce raycasting. But I doubt original XCOM used such resource intensive routine.This depends on number of "rays" you use and more importantly what limitation you can impose on this.
Naive implementation give 1s lag each time you open/close door.Yeah. That will get even more involved if you remove map height restriction. And suddenly you need to use something like octress to traverse the map. For example, I use use height=32, and that already forces me to use a lot of hacks, to avoid traversing every tile for FOW and pathfinding. Gollop was genius to implement that for Amiga! (an 80ies computer)
The "I don't use RNG" is a complete deal breaker to me. It's fine in a card game, but a combat strategy? Sorry, but no.
Thanks, I understand your decision.Yup. It is hard to make a game that will cater to everyone, so for now I'm trying to make something unique.
It's just not a game for me... I don't care for e-sport mechanics. :P
Aw that's a good one! :)I checked this XCOM reboot when it came, and found that the reboot is completely different game from original XCOM. It seems devs looked over screenshots from original XCOM and made unrelated game with the same name. Nice graphics, but everything else is static and scripted so tightly, you may as well watch a TV show instead. It is like visiting paleontology museum vs traveling with time machine to see real dinosaurs. Even worse story happened with System Shock reboot, where devs showed nice demo, made selfies with Warren Spector, collected money and ran away with them.
Man, i wish XCOM:EU2012/EW (not Long War 1) was moddable til 2020s or 2030s instead of 2019/this year. :-\
I checked this XCOM reboot when it came, and found that the reboot is completely different game from original XCOM. It seems devs looked over screenshots from original XCOM and made unrelated game with the same name.
Made a playable preview release:
https://nikitasadkov.itch.io/spell-of-mastery-demo
Suggestions are welcome.
Cool! But it looks like you put lib directory instead of src or a link to github into the .zipYeah I'm a big fan of Lisp, so I decided to write game in Lisp. Spell of Mastery is actually my second game. The first one was Warcraft 2 engine implementation in Common Lisp (SBCL). It was fairly complete with working AI and all spells implemented: https://www.youtube.com/watch?v=-k8jkeFfnl0
Edit: ah, now I get it. It's your own runtime and your own lisp. Very cool.
Some thoughts about mist and fire. Overall I think its look bit out of place and do not fit good rest of graphic. It look bit too much diffused compared to rest of sprites.There is a number of reasons I decided to use non-pixelart effects.
Overall graphic is nice looking pixel art and this effect look like from some 3D game.
My point was that graphic used for this effect was too much blurred compare to rest of graphic. Transparency can have impact on this but I do not think this main reason.Well, it is a fog, it is supposed to be blurry and annoying to players. There are a few spells, like tornado to get rid of it.
(https://i.imgur.com/luhKzVH.gif)
Does it mean we can blow up parts of the map to drain water? :)
The editor was an updated version of the one used for the earlier xcom games.
Every tile was designed to occupy a volume of space. Many tiles had multiple versions showing a succession of destroyed states.
In the description off each tile there was a series of properties such as ‘health value’ and ‘destroyed tile type’. when the health value was eroded away the tile would then be replaced by the ‘destroyed tile type’ (which in turn could have its own health and destroyed type). Chains like this could be as long or short as required. Tiles could of course also bed invulnerable.
This approach meant that potentially anything in the map could be blown apart and destroyed. This was made even more true in Apocalypse as tiles could also be flagged as supportive, and if a supportive tile was destroyed then those above it could also fall.
Tiles were complex data structures. Each one also had a reference to line of sight definition – this was a simple 4x4x4 grid – a sort 3d texture – where each cell was either solid or empty. There were a relatively small number of these solid line of sight definitions, but enough to approximate the 3D shape of any shape of tile created. This meant that the world was effectively broken into a 3d voxel grid where weapon fire could be accurately ray-traced. It was a ball ache to set up initially, as every tile had to have a line of sight definition assigned, but really made life easy later on as collision in game then became automatically generated from the map editor.
It was a genius approach, especially in the years before decent 3d raytracing – and one of the key identifying features of an xcom game. Players always loved being able to snipe enemy forces from right across the map through a couple of windows or blown open walls. It’s also a technique which I think useful to reinvent for use in conjunction with true 3D worlds and can think of lots of good mechanics you could use them for.
While some mission maps were hand crafted (especially apocalypse and the end missions of every game), many other mission maps in XCom games were made procedurally (especially in the earlier games).
The procedural rules would:
1. Decide on the location type (e.g. farm, port, city etc)
2. Then, using a look-up table specific to the location type selected a look up table would let a number of small hand crafted sections be chosen at random (though rules would restrict how often each piece could be chosen).
3. Mix together these sections (with simple rules that specified which sections could be adjacent to which other sections).
The result was a vast number of possible layouts – for all intents and purposes near infinite, and unique to each user.
The procedural nature of these maps made the games feel more personal to each user.
The recent remake eschewed this approach and instead went for a large number of hand crafted maps instead, although with random starting points (which was a shame).
Sadly I don't have screenshots of the tools we used for these isometric games
it only emphasizes why great games are not ever done by big or even medium-sized studios.Yeah. That Terry Green also designed other cool and innovative games, such as http://www.terrygreer.com/xenomorph.html (a System Shock style game long before System Shock). https://www.youtube.com/watch?v=QKVNnnqyuZY
Dude, you are insane in the best way possible.I do consider them as an option, something like hardcore mode.
If only you considered dice rolls... ;)
lighten T E = T + T*E/Factor
where T is the texture's light receptiveness, and E is the light's energy. Of course you need to apply that formula to each of the RGB components, unless you have the stylish black & white soviet TV. I heard they still use B&W TVs in Russia :DVery nice game Nikita, I like it so far.The programming language I use doesn't support unicode.
Will you make a Russian localization for it one day?
I for long time think amount 2.5D graphic engine. This mean that each screen pixel have not only color but depth too. With something like this drawing order will be only secondary thing. You will check for each pixel you draw if you it behind or on front of background pixel.That is called z-buffering. It is slower than draw-order sorting and doesn't solve the problem of higher layer popping through the layer below, or floor in front of a sprite cutting legs off large characters (that is why XCOM tanks are split into several cubes). Here is an example from Daimonin of what happens with naive approach (notice the cut off dragon legs and the poor botched wurm)
You missed one important aspect, EVERY pixel have depth, this mean destination and source too. If unit clip it should look like it dive into water.Triangle rasterizing code is much slower than a direct blit, even if you optimize it with SSE. For each sprite you will have to project 4 vertices, draw 2 triangles, interpolating Z and UV across them. Here is the bare minimum to implement OpenGL-like triangle drawing in software:
And performance will not be very bad, OXC already do half of work that I image will be needed. Overall my idea how it will work is based on my work on OXC.
I already use some custom surfaces to make some special effects, like globe illumination using normal vectors. All done in software.
static void draw_span(lerp *l, int y, int x, int end_x) {
typedef unsigned short fixcol;
#define fix(x) ((fixcol)(signed short)((x)*0xffff))
#define unfix(x) ((float)(x)/(0xffff))
int tt[640];
memset(tt, 0, 4*640);
// color layout: AAAA|RRRR|GGGG|BBBB
Uint16 mm0[4];
mm0[3] = fix(A(l));
mm0[2] = fix(R(l));
mm0[1] = fix(G(l));
mm0[0] = fix(B(l));
Uint16 mm1[4];
mm1[3] = fix(AD(l));
mm1[2] = fix(RD(l));
mm1[1] = fix(GD(l));
mm1[0] = fix(BD(l));
Uint16 mm2[4];
mm2[3] = fix(0.0); // ambient color shouldn't affect alpha
mm2[2] = fix(ambient_r);
mm2[1] = fix(ambient_g);
mm2[0] = fix(ambient_b);
// uv layout: 0000|0000|VVVV|UUUU
Uint16 mm6[4], uv_delta[4], uv_wh[4], uv_bp[4];
mm6[0] = fix(U(l));
mm6[1] = fix(V(l));
mm6[2] = 0;
mm6[3] = 0;
uv_delta[0] = fix(UD(l));
uv_delta[1] = fix(VD(l));
uv_delta[2] = 0;
uv_delta[3] = 0;
uv_wh[0] = texture->w-1;
uv_wh[1] = texture->h-1;
uv_wh[2] = 0;
uv_wh[3] = 0;
uv_bp[0] = texture->format->BytesPerPixel;
uv_bp[1] = texture->pitch;
uv_bp[2] = 0;
uv_bp[3] = 0;
fixcol one[4] = {0xffff, 0xffff, 0xffff, 0xffff};
float z = Z(l);
float zd = ZD(l);
Uint8 *dst = (Uint8*)screen->pixels + y*screen->pitch +
x*screen->format->BytesPerPixel;
// now we have following arrangements:
// EAX is temporary
// EBX points to zbuffer
// ECX is used for debugging
// EDX holds final location in screen buffer
// ESI points to texture
// EDI points to screen buffer
// MM0 holds light color
// MM1 holds delta for light color
// MM2 holds ambient
// MM3 holds resulting color between stages
// MM4 is temporary
// MM5 is temporary
// MM6 holds uv
// MM7 holds 0
// XMM6 holds Z
// XMM7 holds Z Delta
// others are unsed
// MMX code assumes that botch: screen and textrue are in BGRA format
asm (
"movq %0,%%mm0\n\t"
"movq %1,%%mm1\n\t"
"movq %2,%%mm2\n\t"
"movq %3,%%mm6\n\t"
"pxor %%mm7,%%mm7\n\t" // mm7 = 0
"movss %8,%%xmm6\n\t" // z
"movss %9,%%xmm7\n\t" // zd
"jmp loop_start\n\t"
"loop_body:\n\t"
// Z-BUFFER TEST
"test $1, %%ecx\n\t"
"jz skip_ztest\n\t"
"movss (%%ebx), %%xmm5\n\t"
"cmpss $2, %%xmm6, %%xmm5\n\t" // xmm5 <= xmm6
"movd %%xmm5, %%eax\n\t"
"test %%eax, %%eax\n\t"
"jz loop_advance\n\t"
"movss %%xmm6, (%%ebx)\n\t" // save new z-value of this pixel
"skip_ztest:\n\t"
// TEXTURE MAPPING (mm3 holds result)
"movq %%mm6,%%mm3\n\t" // mm3 = uv
"pmulhuw %5,%%mm3\n\t" // mm3 = u*w, v*h
"pand %5,%%mm3\n\t" // mm3 = (u*w)%w,(u*h)%h : wrap
"pmaddwd %7,%%mm3\n\t" // mm3 = linesz*vh+colorsz*uw
"movd %%mm3,%%eax\n\t"
"movd (%%eax,%%esi),%%mm3\n\t" // mm3 = packed_texture
"punpcklbw %%mm7,%%mm3\n\t" // mm3 = texture
// LIGHTS (mm3 holds result)
"test $2, %%ecx\n\t"
//"jz skip_lights\n\t"
"movq %%mm0,%%mm4\n\t" // mm4 = light
"pmulhuw %%mm3,%%mm4\n\t" // mm4 = light*texture
"pmulhuw %%mm2,%%mm3\n\t" // mm3 = ambient*texture
"paddusb %%mm4,%%mm3\n\t" // mm3 = (light + ambient)*texture
"skip_lights:\n\t"
// BLENDING (mm3 holds result)
"test $4, %%ecx\n\t"
"jz skip_blending\n\t"
"pshufw $0xff,%%mm3,%%mm4\n\t" // mm4 = src_alpha
"psllw $8,%%mm4\n\t" // convert mm4 to fixed point
"pmulhuw %%mm4,%%mm3\n\t" // mm3 = src*src_alpha
"movq %6,%%mm5\n\t" // mm5 = 1
"psubw %%mm4,%%mm5\n\t" // mm5 = 1-src_alpha
"movd (%%edi),%%mm4\n\t" // mm4 = dst_packed
"punpcklbw %%mm7,%%mm4\n\t" // mm4 = dst
"pmulhuw %%mm5,%%mm4\n\t" // mm4 = dst*(1-src_alpha)
"paddw %%mm4,%%mm3\n\t" // mm3 = src*src_alpha + dst*(1-src_alpha)
"skip_blending:\n\t"
// ENDING
"packuswb %%mm7,%%mm3\n\t" // pack pixel in mm3...
"movd %%mm3,(%%edi)\n\t" // and puti it to final resting place
// ADVANCE
"loop_advance:\n\t"
"paddw %%mm1,%%mm0\n\t" // advance light
"paddw %4,%%mm6\n\t" // advance uv
"addss %%xmm7,%%xmm6\n\t" // advance z
"add $4,%%edi\n\t" // advance x
"add $4,%%ebx\n\t"
// LOOP CONTROL
"loop_start:\n\t"
"cmp %%edx,%%edi\n\t"
"jl loop_body\n\t" // jmp if edi < edx
"emms\n\t" // reset FPU after MMX
:
:
"m" (*mm0), // 0
"m" (*mm1), // 1
"m" (*mm2), // 2
"m" (*mm6), // 3
"m" (*uv_delta), // 4
"m" (*uv_wh), // 5
"m" (*one), // 6
"m" (*uv_bp), // 7
"m" (z), // 8
"m" (zd), // 9
"c" (flags), // ecx
"b" (zbuffer+y*screen->w+x), "d" (dst+(end_x-x)*4), "D" (dst), "S" (texture->pixels)
);
}
I want 2.5D engine, not 3D engine :>Where will you get the depth surface? 3d software generates it together with sprite? I remember there was some zombie-shooter game demo, where artists hand-drawn such z-surface onto each pixelart sprite, so dynamic light would highlight these sprite properly from any angle. A ton of work, and I havent heard about them since then. Guess their project is dead. And as I said with just z-buffer you will still get wrong draw order like: https://www.youtube.com/watch?v=BJYH-UrQ2xs
I not even try implement drawing triangles. Simply biting 2D sprites with depth (that can be implemented as two normal surfaces but one is not treated as color but as depth).
https://github.com/Yankes/OpenXcom/blob/master/src/Geoscape/Globe.cpp#L987XCOM globe is an actual 3d object, so you get normal vectors for free with it.
https://github.com/Yankes/OpenXcom/blob/master/src/Geoscape/Globe.cpp#L175
This is shading I spoke before, each pixel have predefined normal vector and based on this I calculate sun shading on globe.
And everything still 8bit.
Where will you get the depth surface? 3d software generates it together with sprite? I remember there was some zombie-shooter game demo, where artists hand-drawn such z-surface onto each pixelart sprite, so dynamic light would highlight these sprite properly from any angle. A ton of work, and I havent heard
about them since then. Guess their project is dead.
And as I said with just z-buffer you will still get wrong draw order like: https://www.youtube.com/watch?v=BJYH-UrQ2xsI do not think he use z-buffer in same way as I thinking how it should be used. You could consider each pixel of graphic as voxel in space 3D space. How one voxel with less z can occlude voxel with bigger z? Trick is that flat tiles shroud have ramp in z values, and tile ramps in some cases should have flat z values (this depend on angle of ramp compare to screen). You could even blit together background as one surface and reuse it in each frame.
That guy solved it with two zbuffers, one for draw order, another the usual depth buffer. I solved it with topologically linking objects in a tree of what occludes what, but did that locally and only for specific units. I'm not using zbuffer now (although I had it in the first version), instead just sorting by x,y,z towards frustum.
XCOM globe is an actual 3d object, so you get normal vectors for free with it.globe is not 3d object, its drawn using 2d polygons, all 3d math is done on our side. Normals are only avaialbe because we know that globe is sphere, with this I can precalculate them for each pixel of screen and zoom level.
globe is not 3d object, its drawn using 2d polygons, all 3d math is done on our side. Normals are only avaialbe because we know that globe is sphere, with this I can precalculate them for each pixel of screen and zoom level.Reminds me of Ecstatica, but they actually preserved all 3d geometry from the raytrace stage to properly occlude everything:
I gotta say though, I hate hexes with a passion. The reason is simple: you can go in a straight horizontal line, but not vertical (or vice versa). This feels pretty shitty.That can be remedied a bit by moving units vertically, when that is possible (i.e. there are no blocking units or triggers in the way), but only visually, behind the scenes units would still move on the lattice. In case of RTS, that will require more hacking obviously. Of course wargames, like Panzer General, move units directly in straight line right to their destination.
That can be remedied a bit by moving units vertically, when that is possible (i.e. there are no blocking units or triggers in the way), but only visually, behind the scenes units would still move on the lattice. In case of RTS, that will require more hacking obviously. Of course wargames, like Panzer General, move units directly in straight line right to their destination.
One solution would be not use hex but triangles, if they are arranged in hex then you keep all hex good properties but you still can have orthogonal moment.Yeah. That could work. And you can still reuse the same hex tileset.
Trick is that 1TU allow you to move thought 2 triangles. I added small graphic that show this, All red dots are valid unit positions, black lines are allowed "half" moves. Effective this is multiple hex grids overleaped on each other.
rotate A O P =
| Dir = P-O
| DX,DY = Dir
| CosA = A.cos
| SinA = A.sin
| NX = DX*CosA - DY*SinA
| NY = DY*CosA + DX*SinA
| [NX NY]+O
If I pick it up again, I'd probably need to add some functions after the initial polygon generation to randomize the coastlines a bit, since they tend to bear the hallmark of the great circle lines, making them look boring and obviously computer-generated.I doubt there are any better algorithm than the midpoint displacement, which is very robust, corresponds to real life islands and can fill-in very precise shapes with arbitrary constraints.
wow, looking good.Unfortunatelly it is a bit tricky to generate rivers. One may suggest a simple gradient descent, but then rivers will end at a local minima. So it requires waterflow and erosion simulation to get out of local minima, without flooding like half of the island into a swamp. It is easier with the graph methods, where one can just send waterflow along the edges.
Why not just flood half of the island into a swamp? I see nothing wrong with it. ;)Typical for Troll :>
Typical for Troll :>
Looking god mate, reminds me of Heroes of might and magic.It doesn't really have much in common. HOMM3 obviously used voronoi diagrams to generate maps, judging by the geometrically perfect biome shapes. I'm not using them, because they don't appear to have any advantage over fractals and harder to control. Especially when it comes to placing roads and rivers. With fractals, you have mountains, rivers and forests forming naturally, which give birth to settlements, which are then connected with roads. With voronoi people typically placed rivers/roads along voronoi cell edges. It is also easier to fine-tune fractals by say replacing random with statistically correct data, so you could get islands having curvature similar to that of Ireland, or some Moon crater :D
1. Is this buildable from https://github.com/saniv/spell-of-mastery ?I doub't anyone but myself can build it - few IT skilled people tried but failed. I won't be making the build user-friendly, not until I've finish the programming language design. This game is basically a big unit test for the language design and helped me to find the parts needing improvement :D
2. What is/was your nick at L.O.R. ?What is LOR? Linux.Org.Ru? I've been at LOR long time ago, but they banned me for anti-GPL shilling. I dislike the share-alike clause, which forces one to release all the source code, so he/she cannot monetize any investments into it. For example, you cant take Linux, improve it and sell it, because you don't retain the exclusive copyright (contrast that with BSD). This clause in fact only helps big players, like Microsoft, as long as Linux is inferior to Windows, but superior to any small-player commercial alternative, becasue it makes market-entry harder and suffocates competition.
I dislike the share-alike clause, which forces one to release all the source code, so he/she cannot monetize any investments into it.Do game asserts fall under GPL? If not you can still sell them and add game engine as free bonus.
For example, you cant take Linux, improve it and sell it, because you don't retain the exclusive copyright (contrast that with BSD).This is double edge sword, because it prevent big companies on profiting on your work for free. They need contribute back if they want use your work.
Do game asserts fall under GPL? If not you can still sell them and add game engine as free bonus.Big companies have big budgets - they can easily hire the best engineers and artists of their own. What they are really afraid of is losing their market monopoly.
This is double edge sword, because it prevent big companies on profiting on your work for free. They need contribute back if they want use your work.
Red Hat is not MS but they still can profit from Linux and improve it.
Do game asserts fall under GPL? If not you can still sell them and add game engine as free bonus.AFAIK, GPLed game assets are treated as GPLed DLL files - i.e. the code you load at runtime. Similarly to how you can use GPL-licensed plugin with Photoshop. So they can be good as a value added content, but not something you can really build upon. I.e. you can't take a GPL licensed sci-fi novel and write a sequel to it, because you will still have to publish the sequel under GPL, including the LaTeX source code, and then everyone could print it or get for free - i.e. you have no copyright. That is why people introduced CC-BY license instead, so producers of derivative work still retain their part of copyright.
Big companies have big budgets - they can easily hire the best engineers and artists of their own. What they are really afraid of is losing their market monopoly.I mean case as MS long time ago pulled off: https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish
I mean something else with game assets, they are NOT GPL, and my question was is legal to bundle them together with GPL exe.You can bundle GPL'ed data with any other licensed data. For example, Apple OSX includes BSD, GPL and proprietary code. Although they have replaced the GCC with a BSD license clang compiler. Dunno what was the reason for that, but it broke some of the more tricky code.
You own all Copy Rights to it but none to your code. Image selling Piratez as standalone game as it still need OXCE.
I mean case as MS long time ago pulled off: https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish
They use it to expand they monopoly by consuming smaller markets.
Regarding Piratez, it runs on the OXC engine, which is, AFAIK, a result of reverse engineering the proprietary code, in addition it requires assets from the original game. You can probably replace assets with something from OpenGameArt, but the engine code is still very murky legally, because it has the same abstract structure as the original Gollop's code, even if variable names are different.Only some parts are reverse engineered. Most code was created using https://en.wikipedia.org/wiki/Clean_room_design
Only some parts are reverse engineered. Most code was created using https://en.wikipedia.org/wiki/Clean_room_designGiven that it replicates original very closely, that itself can be problematic. Many Tetris clones were taken down, due to them having exactly the same game design, down to the playfield size: https://forum.unity.com/threads/how-likely-is-a-tetris-like-game-to-be-taken-down-on-the-play-store.398902/
And OXCE is even more different when I alter some behaviors to be more generic.
But this was not my point, get same situation but OXC is pure and independent GPL program not connected to original game.
You profit from selling data not exes.
What is LOR? Linux.Org.Ru?Were you "anonimous" (note the "i", not "y")? Did you register in 1999 or get the account later? (People are making bets...) Were you "logicoop1"? (If yes, punched tape was invented in 1725, 2 centuries before Zuse.)
Dude, you are insane in the best way possible.Probably more true than you think. As far as I know, he's been working on this project since mid-2000s to test his unorthodox ideas about programming and language design. He's kinda Terrence Andrew Davis of game design, but atheist and self-taught.
Were you "anonimous" (note the "i", not "y")? Did you register in 1999 or get the account later? (People are making bets...) Were you "logicoop1"? (If yes, punched tape was invented in 1725, 2 centuries before Zuse.)That is untrue.
Probably more true than you think. As far as I know, he's been working on this project since mid-2000s to test his unorthodox ideas about programming and language design. He's kinda Terrence Andrew Davis of game design, but atheist and self-taught.
What about a gradient-descent model combined with a small amount of umbrella sampling? If the map has a large elevation feature like a mountain, have a weighted decision to source water there. Otherwise, build a very rough estimate of which edge of the map and where on that edge is the most elevated, then use a coarsely-sampled version of your map to determine where the flow goes, allowing for some "erosion" to occur so it doesn't just get stuck at a local minimum. Maybe let it run this a small number of times and pick an averaged or most likely route for the water from that.That is what I already do for world map. In a non-toy 3d apps it is also used for erosion (they pick random points and then descend from them, subtracting from heightmap), but it takes a few seconds even on modern GPUs. But in my case, I build from the data passed from world map. I.e. if player explores a site with a river at corner, there should be a river there. If it is near ocean, there should be an ocean. I also pass world map seed to the local site generator. Otherwise players will complain that they entered camping site exploration on the edge of forest, but there is no forest to be seen, so world map serves no purpose.
Dude, you are insane in the best way possible.
If only you considered dice rolls... ;)
Background Story 1:If you go with 2 or something similar, I vote for an optional evil campaign. The gaming world is starved for good evil campaigns.
The Great King [KingName] the [First, Second, Third] of [Dynasty Name] has hired you and several other warlords to protect the kingdom from increasing monster attacks and investigate their cause.
Background Story 2:
The ruthless tyrant rules this land, taxing poor people to no end. Can you put an end to his rule? Beware of king's still loyal generals.
Background Story 3:
The king of this land has died, leaving no heirs. Now it is up to local warlords to fight for the throne. You're one of these warlords.
I'm reminded of Zone of the Enders: Fist of Mars actually. A little-known GBA tactical RPG (no grinding, similar to most Fire Emblems) that was an interquel to the fast-paced mecha fighting ZoE 1 and 2.Looks cool. Thanks for hinting at. Also, GBA had actual XCOM-like game from Gollop, called Rebelstar. It was heavily stripped down to make accessible for younger audience and play nicely with GBA hardware, but still has destructible terrain.
If you go with 2 or something similar, I vote for an optional evil campaign. The gaming world is starved for good evil campaigns.I decided to mix it all. The king has died and there is now a succession war, between different sides, with an impostor capturing the throne and taxing population. That scenario allows for the most freedom and any number of sides. I've also abandoned the idea of linking player character to be a wizard, so now player can promote any unit into a leader and have any number of leaders.
Looks neat. Anyways I have a question, will it be something like mount and blade where you travel the world map or will the geoscape be totally removed?There is a random world map generator. But no globe - just a 2d maps with several islands, which player can visit using ship. The world map movement is also turn-based, compared to XCOM. As usual, player explores world map, completes quests, which are randomly generated, as well as quest sites. There are also several cities, including port cities, where player can rent a ship.
The dungeons are built of "blocks", with any dungeon having about 3, with as much as 5 or 6 and as little as just 1. The blocks are HUGE, though, so if you enter a block you have done a lot before, then you have a pretty big area that will feel familiar. That said, the blocks are big, twisted, and crazy, so just because you've been to that block before doesn't mean you're going to know the route by heart. It takes quite a while before the same block gets old--besides, the monsters and loot always change. Learning a block only makes it easier to navigate, which can be a good thing.https://en.uesp.net/wiki/Daggerfall:Dungeons
Some blocks are very recognizable; for instance, the whole of Privateer's Hold shows up sometimes, Others, such as those with very large central chambers are easier to learn. But there are quite a few blocks that consist of nothing but maze, and I'm convinced you can't learn those. Ever.
a dungeon consists of up to 32 blocks, each of which may be connected to any (or all) of the four cardinally adjacent blocks since there are two connecting passages in each of the four cardinal directions, and thusly there are eight paths leading out of each block. While most dungeons may appear to be a random conglomerate of different modules, they were hard-coded in the release media and thus are never-changing. These were most likely generated via a pseudo-random program of some type, but Main Quest dungeons are an exception, because these were all hand-crafted.
While Main Quest dungeons may be the biggest dungeons in the game, it has been commented by some that even the least of the random dungeons are logically too large for the majority of quests. It has also been voiced that because the number of blocks in the source material is limited, most dungeons lack diversity/variance and hence all dungeons tend to look like each other.
Dungeons are built from blocks by assembling them together side-by-side on a 2D grid. Of these blocks there are two types of blocks: internal and border.
Internal blocks
These provide the meat of the dungeon where most rooms and corridors are placed. Every internal dungeon block has two door openings in each one of its fours sides, one above the other. Each door opening is used to link to a nearby internal block or to an external block.
Border blocks
These are used when it is necessary to close the side of an internal block. These are primarily composed of a single corridor which reflexively leads back to the same block of their origin. These are most often used to seal a dungeon's peripheral blocks, but could be used to create isolated areas within a dungeon. Border blocks do not contain any quest locations.
It appears Daggerfall dungeons are not completely random, but made out of big pre-generated blocks (i.e. like in XCOM)
http://www.gamesas.com/just-how-random-daggerfall-t27043.htmlhttps://en.uesp.net/wiki/Daggerfall:Dungeons
Cities are generated using exactly the same grid algorithm as XCOM uses.
So Daggerfall's dungeon generator doesn't handle Z dimension at all.
(https://i.imgur.com/KpIQYUu.jpg)
(https://i.imgur.com/UqIbwxE.png)
So you do daggarfall modding eh? Nice! I do Skyrim modding before I started this ufo project. What I did, I add Caravan masters and Merc Captains in Tavern where you can escort Caravan across Skyrim. Also I have 5000+ spawn points with a script that generate random monsters all over the map. So, every trip from one town to another with a Caravan.. is a hellish fun experience..Nope. I'm not a modder guy. Just researching prior art, hoping to get few nifty ideas. But in most cases people use what works for them. I.e. in Daggefall they had level actual human designers, so it was a good idea to create many big human-crafted parts, than creating more sophisticated generator, which is really hard to do and would be much slower than loading parts from disk. But yeah, creating a full featured random generator for Skyrim/Morrowind/Oblivion would be possible, although a bit on the harder side. Then again, people managed to add even multiplayer to these games.
I have done some experimentation of a fantasy/ Historical type sea battle.Wont be really that exciting, because the map is a bit too small. Also, with terraforming spell, ship made out of would could get destroyed. But yeah, one can probably have enchanted ships. For me there would also be problem of implementing retreating, because usual rules of moving away from enemy, possibly sacrificing some units, wont work. But for pirate style campaigns ships battles are indeed a must. And you can make whole XCOM style game around pirates. For a fantasy game one can think of flying ships, flying island, flying castles or say flying turtle, like in Discworld. But flying island map would require bottomless pits below, so units flown away by say tornado or dragon wings would fall down properly. I.e. all these are advanced features requiring a lot of coding and playtesting, turning already large project into a non-ending one.
This is a ship from Nord's Chronicle mod. Unused. I have modify it. Now it is a sea sailing ship. In a fantasy mod or historical mod, imagine having two ship side by side and you fight a deck to deck sea battle using swords and shields.
Wont be really that exciting, because the map is a bit too small. Also, with terraforming spell, ship made out of would could get destroyed. But yeah, one can probably have enchanted ships. For me there would also be problem of implementing retreating, because usual rules of moving away from enemy, possibly sacrificing some units, wont work. But for pirate style campaigns ships battles are indeed a must. And you can make whole XCOM style game around pirates. For a fantasy game one can think of flying ships, flying island, flying castles or say flying turtle, like in Discworld. But flying island map would require bottomless pits below, so units flown away by say tornado or dragon wings would fall down properly. I.e. all these are advanced features requiring a lot of coding and playtesting, turning already large project into a non-ending one.
(https://i.imgur.com/UDwi1Fr.jpg)
Sea battles would have no interception like Aircraft vs ufo, it is straight into battlescape battle.Why not use some interception mechanics? It fits nice with pirate theme. Traditionally pirates damaged sail of the vessel they attacked, and then boarded it. There was special ammunition to destroy sails: https://en.wikipedia.org/wiki/Chain_shot
Finally found some time to design proper distance combat. Before that ranged units had all the same mechanics as melee, which is a bit unrealistic. Ranged units also had fairly low range of only a few cells, like in Starcraft. Guess I'm one of a few persons who really hates Starcraft/Age of Empires ranged units mechanics, which don't really take into account distance, visibility or height, and Starcraft players don't really feel threatened by ranged attackers. I also believe Warcraft/Starcraft is one of the worst RTS games, learning nothing from competitors, like Warhammer, which it originally cloned.I think you should more think about starcraft as chess than simulation of battle field. In Supreme Commander you have weapons that can do exactly as you like, shoot for very long distances (and only if you have LoF, because bullets can hit ground).
In tabletop Warhammer ranged units were able to shot over whole battlefield if not impeded by walls, and same was the case with its computer implementations, like Shadow of the Horned Rats, predating Starcraft, but feeling much more massive, especially with proper 3d engine and huge armies. But Blizzard were a bit conservative and kept cloning to death the same Dune 2 concept.
In Supreme Commander you have weapons that can do exactly as you like, shoot for very long distances (and only if you have LoF, because bullets can hit ground).Unfortunately I've never played Total Annihilation/Supreme Commander, but I heard these are really good RTS games, compared to most of the Dune 2 clones. I was always puzzled why people were so prone to clone Dune 2, when countless original RTS concepts are possible. Just look at numerous Japanese RTS games!
Pathfinding is at its core a problem of minimizing an path integral over 2 or 3d space. Things that define a landscape (elevation map, more likely) - erosion and its cause - water and its effects on rock - are the same thing. And the results of this erosion is what we perceive as a 'natural' landscape.Generally speaking, pathfinding is the main problem of math. Theorem proof can be thought of as of a path in some space towards the statement. So yeah, you can take any math paper, and it will be about pathfinding :D but, yeah, in practice we usually have simple cases of 2d and 3d spaces, while math problems have large number of huge non-unform and uniform spaces. Still would be interesting to create video game world as complex as some math problems. But I guess such game world would be hard to draw on screen and definitely not accessible for casual gamers :D
So it's no coincidence that the solutions to the same problem produce essentially same results.
You might find useful to read some papers on pathfinding from 1998-2005 period. The theory is all there, including minimizing stored information about the environment. Seriously, there are tons of insight there.
Which is sad. He won a Hugo in 1983 for cheesy book covers and while he surely was better than anyone else, book covers, illustrations and everything were and are still crap. Sad, useless crap. You literally can't even wipe your ass with them.Book covers and covers in general sell products. Unless they catch your eye, you won't be reading the book.
Even this is better.
Well, idk. If you for example look at Baen Books covers, they are all utterly atrocious. They require a conscious effort to ignore them lest they spoil the pleasure of reading the text. If that's what they call 'selling', then I'm at a loss for words. Unselling imo.
best one I've seen was черная книга арды 1995 edition, which was very worn and lacked the front cover entirely - only had plain black back one - since it was so widely shared it somehow lost it (and half a dozen pages too). But at least you could see at once that there was demand.
That always happens with promising games :(Probably people define to ambitious scopes and can't deliver it. Maybe better approach is do MVP and then adding on top of this new functionality.
Probably people define to ambitious scopes and can't deliver it. Maybe better approach is do MVP and then adding on top of this new functionality.Small team projects are also very dependent on each member. They wont survive "the bus test". I.e. if bus hits programmer, the project is done, if bus hits artist - same thing. On large AAA projects you have several programmers, so if lead programmer gets ill, others would still be able to carry the project, although with a few more bugs. They also have some art style guidelines and technical specifications. Here is for example art guidelines for Ultima Online: https://gallery.ultimacodex.com/ultima-online-kingdom-reborn-art-guide/
I'm not a big fan of hexes, because you can only move in a straight line in 3 directions, and everything else is a zigzag. But you seem to have pulled it off amazingly. It all looks so great.The problem with continuous world is that when you add obstacles it gets really confusing, where and how player can move. Most pathfinding related function also get out of control. It was playable but I got uneasy feel from it. And I'm the one who develops the game, knowing every little bit of it. Common player will get frustrated to no end with all these guard ranges and continuous related stuff. With cellular world everything comes in naturally and the code also becomes several times smaller, than the code for continuous world.
The general idea was that flat, easily traversable terrain was composed of big tiles, while difficult terrain was more densely packed. Every unit could move for a given number of tiles per turn, therefore open plains allowed fast travel, while mountains or bogs would be slow to traverse.I'm pretty sure that is called quadtrees. It is in fact used for pathfinding in continuous space and for algorithms like ray tracing.
Then I some time ago playing with design of game (similar to Master of Magic), I come to conclusion that both walls and rivers should be placed on edge of hex.It all depends on your game's mechanics. It is still possible to resolve roads/rivers clash several ways. For example, if river always comes out of an odd hex vertex, and roads always out of even vertices, then there wont be any inconsistency.
Only exception would be rivers that are very big but then it will be not "terrain" but "water" tile, and normal units could not enter tile with big river.
While bloom is generally considered annoying effect, in some cases it can improve graphics. Like in lava scenes. But yeah, doing such post processing without 3d acceleration is a bit costly, even if SSE optimized.One question what if you do some "palette" tricks like TFTD did with vapor, instead of calculating each time new color of new pixel you cache most of calculation and use tabled values. This is super cheap for 8bit graphic but for full RGB could be done too, simply you will need do some shortcuts.
(https://i.imgur.com/ysBLyQT.gif)
One question what if you do some "palette" tricks like TFTD did with vapor, instead of calculating each time new color of new pixel you cache most of calculation and use tabled values. This is super cheap for 8bit graphic but for full RGB could be done too, simply you will need do some shortcuts.I doubt palette animations can be used there. All sprites are independent from each other, in true color, and have personal recolor ranges. I.e. there is no global palette. So manipulating pixels is not cheap. Although I do recoloring on blitting, but that still requires using stencil buffer. Same way I'm going to use stencil buffer to mask regions and apply bloom filter to them. The fog of war should too be done with stencil (and it would likely be cheaper than what I use now). Anyway, without the bloom lava doesn't appear to emit any heat, while real life lava radiates light, so things near it should be colored in its color.
One algorithm that could work is take most significant bits from each color combine them into index, using index get new set of RGB values that will be added to current pixel values. We will loose precision but it could result in close to desired effect.
I did say "palette" not palette :> My solution is approximate some index based on RGB values for 24bit pixel. let say 9bit index using most significant bits of each color using bit masks. For each "Index" you could have precalculated values that you can add to pixel values. You can skip all multiplications, dividing and branches and use only bit shifts and adding. Only drawback would be that it need load some values from memory using offsets, but at least will not make lot of cache misses because after couple of first pixels all memory will be hot.Ooops! My bad! I though you suggested recoloring lava shore to match lava highlight and then animate it with color cycling for the heat haze effect.
Something like that:
https://gcc.godbolt.org/z/4gyUYH
Thinking of it, the same happens with natural languages. You can't change English language anymore, it is now set in stone, while long ago it was far more mutable. Although Jews somehow managed to transition whole nation to artificially restored Hebrew language (most Jews spoke Germanic Yiddish language before transition). That gives hope, that more advanced languages, like Ithkuil, can be introduced as well, since English, while very good (compared to competing natural languages), is still not perfect.If I could alter used language I would use Latin :D I'm very fond of this language even if I barely understood it.
https://en.wikipedia.org/wiki/Ithkuil#Possible_advantages
It would be separate challenge to modify the language, while at the same time transitioning the game's code between its greatly incompatible versions. Games code is now several times larger than the language compiler's code, so I will have to create some transitioning toolset.
Could you show some snippets of you code? You could even do some highlight of its capabilities.If I could alter used language I would use Latin :D I'm very fond of this language even if I barely understood it.
For artificial languages, the proof of the pudding is in the eating it. What would happen when you release this language to hole nation?English is somewhat static for the last 100 years, compared to previous stages of its development. But yeah, it got new words, like "meme", which is a shortcut for what previously require larger sentence. With Romance languages it is far more complicated.
I think it could start mutating very fast to meet need. How you could keep unambiguous when people start using mems, irony or subverting meaning of words.
Could you show some snippets of you code? You could even do some highlight of its capabilities.It is a Common Lisp based language, but with modified garbage collection algorithm to guarantee real-time performance for interactive apps like games.
wsite.add_unit UnitType hired/1 leader/0 garrison/0 noItems/0 =
| U = $world.units.alloc
| U.init{UnitType Me}
| less Hired: leave U
| U.hired <= 1
| when Leader:
| U.leader <= 1
| when $type><party: $set_spr{"[UnitType]"}
| less NoItems:
| Type = U.type
| when Type.upto{5}><unit_: Type <= Type.drop{5}
| V = $world.visitors.Type
| when got V: for [_ ItemType Count] V.items^~{[]}:
| U.add_item{ItemType count/Count}
| U
Aside from that. I was still thinking about your idea of global spell cooldown for whole team. It feel to much gamely, some artificial limit to make game work and be balanced. Lot better would be if limits go from game word.Yeah. I thought about a system where casting the same spell over limit would cause aberrations, potentially wasteful and harmful to the caster. But that is a bit hard to implement, without random dice roll.
One way I see this could be fixed is that we have some "elemental mana field" that spreed whole map. And each time you cast spell you drawn power from local area. This mean if you spam spells of one element to much in one place each spell will be lot of weaker than one before. You could counter act it by spending more resources to drawn power from bigger arena but cost would grown exponentially. After couple rounds field will regain its power.The problem with that is that I want it to be per spell base, not per large group of spells. Its purpose is to break the positive feedback loop - i.e. to prevent the player from casting say Armageddon spell several times to kill all enemies in a single turn, or to spam the heal spell with 10 spell casters on a single tank, without risking anything:
This is basic idea and I see it could be even expanded. Spells could could affect this field too (aside form consuming it). Different elements could have iteration between them that encourage spell rotations (image that lighting is transfer of power from electric to earth element, then on place of impact casting earth spells will be more powerful).While the game is indeed inspired by Lords of Magic, There are no usual earth/air/fire/water elements, but instead just chaos, order, life and death magic schools, where chaos includes direct damage spells and spells like flood, life gets blessings and cures, death curses and sacrifice spells, order spells like telekinesis and teleportation. Each school has associated with it spellcaster unit type, and a few jack-of-all-trades spellcasters, that can't cast the most powerful spells (i.e. Ifrit can cast only basic chaos spells). The reason for that is elemental schools typically duplicate each other, having boring copies of the same spell. Now all schools have some damage inducing spells, but for say Order School that wont be some "spirit arrow" spell, duplicating "flame arrow" and "ice shard" from elemental schools, but instead "force push" spell that would be more powerful than flame arrow, but require some way to push target from the cliff or into the water, and also the target to be light enough to be pushed (no way you can push huge stone golem), and it would also make no sense to push flyer from the cliff, since they can fly, but for all other units force push would likely be the fall to death.
Sure, let's find the worst possible implementation and make it a strawman against the feature.Then why people play Starcraft?
I never did and never will play games with no randomness. At least not the kind which emulates some reality. No randomness means no uncertainty, and therefore no life or immersion. Such a game is dead, dead and dead. It has no appeal. I'd rather play tic tac toe, at least it doesn't fail miserably at pretending to portray some sort of setting.
It doesn't matter how good your game is if it's dead.
Because it's a e-sport, I suppose. It's not meant to be immersive, or actually simulate anything.But a lot of randomness arises from player actions. Starcraft's deterministic rules coupled with unpredictable user input are as good as random, but without the nasty parts of the random. Lets not forget, that in reality there is no such thing as "random" - it is just a buzzword for describing complex things, we don't understand. As Einstein said "God doesn't play dice". What appears to be random to us is just some complex high frequency process, which our brain can't handle, so we see white/brown/pink noise.
It's basically chess with fireworks.
As Einstein said "God doesn't play dice". What appears to be random to use is just some complex high frequency process, which our brain can't handle, so we see white/brown/pink noise.
Lets not forget, that in reality there is no such thing as "random" - it is just a buzzword for describing complex things, we don't understand.
which is a completely different kind of activity and has zero relation to real world, which is entirely chaotic.I disagree, if it would be entirely chaotic then you would not be able do do ANY thing, any planing, any strategy, any living. Big class of problems in real life can be solve by skill set similar to one that chess use, why? Because knowing EVERY thing about chess board state is impossible, plan 10 move ahead and you start risking running out of atoms on earth to store all possible states. You need only work on very small subset of possibles and you could miss one critical path.
But all this can be my misinterpretation. I was under the impression that you wanted to make a civilization game, since you keep referring to titles like Master of Magic which are such titles. If your goal instead is to make another chess variant, with closed information and only dependent on thinking X moves ahead, then you should have said so from the very beginning and I wouldn't bother getting excited about it.My design idea is closer to https://en.wikipedia.org/wiki/Dark_chess and https://en.wikipedia.org/wiki/Fischer_random_chess
butI disagree, if it would be entirely chaotic then you would not be able do do ANY thing, any planing, any strategy, any living.
Big class of problems in real life can be solve by skill set similar to one that chess use, why? Because knowing EVERY thing about chess board state is impossible, plan 10 move ahead and you start risking running out of atoms on earth to store all possible states. You need only work on very small subset of possibles and you could miss one critical path.
Good players probably play knowing what they do not know, and place they figures in defense positions from some unexpected threads.
Solarius, hidden information is randomness. If two players play The Prisoner's Dilemma or something like that, optimal play for them is to do something X% of the time and another thing X% of the time. Which may not seem like a big deal but in complex games (Stratego maybe for example, though as a mainstream board game it's not great) it leads to pretty much the same randomness as true randomness. Starcraft therefore has at least a small amount of randomness just due to fog of war.
I mean obviously no one's smart enough to solve Chess so it still has diversity. And even if Soccer/Football and Starcraft/Dota were "solvable", it would depend on a person's capabilities and skills at different aspects of the game, which is pretty realistic.
However, turn-based single-player games are much better off with "true" randomness, if only AI randomness unless they are handcrafted puzzle games, but I think those get boring after a few hours.
Also, physicists tend to take positions that are helpful to them and look pretty harmless, like Schrodinger's Cat being taken as serious evidence that two impossible things are true at the same time rather than simply not being able to know which one is true, but are philosophically very impactful. Though I don't want to dig further on that in this board.
My design idea is closer to https://en.wikipedia.org/wiki/Dark_chess and https://en.wikipedia.org/wiki/Fischer_random_chess
I.e. there are random starting conditions (i.e. map is randomly generated), in addition to fog of war, acting like your typical pseudo-random number generator. AI is allowed to throw a dice in its decision processes. Then there are spells like "mist", which obscure vision. But the idea is that player can choice a strategy to reduce randomness. For example, player can build more scout units.
Fair, and I certainly won't criticize you for that. Just saying it's disappointing for me personally, because I don't care about this kind of games, and I thought your project was something different. But that's entirely on me.Yeah. I've decided to take "no explicit PRNG" rule as a challenge, similar to "silence vow" monks take. Then again, there are many explicit PRNG strategy games, while almost no true deterministic ones (beside Chess and Go), and I'm trying to distance my game from the mainstream a bit, so I'm looking for obscure features and try to insert them into the game. Like I've adapted numerous ideas from the Lords of Magic.
The less randomness and the more deterministic a game is, the more it resembles a puzzle instead of a strategy/tactics game.Not exactly. There are puzzle games with random factor, like Tetris and Match 3. Randomness is orthogonal to the genre.
Why stop halfway? Make it a floating city, suspended above the clouds! :)Well that would require implementing special flying support blocks, so the whole construction wont collapse. A can of worms will get opened, requiring implementing all relevant subsystems and answering game design questions. For example, can these levitating blocks be destroyed? Do they need some energy source? What would it require to damage them? Should destroying them be an important gameplay element, so random maps have to be generated taking their tactical significance into account? I.e. collapsing a flying ship with opponent's creatures or landing it on top of opponent's creatures?
The Nox have floating cities. Invisible floating cities. Actually more than invisible, phase shifted maybe. I don't know, it never is explained. The Nox appear to be a primitive pre-agricultural society living on a pristine world. Actually they are advanced far beyond humans and their technology if one can call it that appears to be magic. It doesn't have to have a complicated physics system to describe how it works. It can just be. A bit of mystery is a good thing.Is it related to the classic Westwood's RPG? I don't remember it having flying cities. It was mostly indoors dungeon crawler. With a bit of interactive environment, compared to Diablo 2. IIRC player was able to move and stack boxes to form stairs. Nox was also a proto MOBA game, before DoTA was invented.
Recently the original Tomb Rider engine got reverse-engineered and apparently it worked similarly to maincraft - i.e. with blocks primitives, but supported sloped surfaces. Although devs do use AStar for some reason, despite the game relaying on portals:But this map look more as grid based than voxel based as minecraft, look closely at places where floor have different height, each box are unalignment if you consider height, something that is impossible in minecraft.
But this map look more as grid based than voxel based as minecraft, look closely at places where floor have different height, each box are unalignment if you consider height, something that is impossible in minecraft.Yeah. Original Tomb Raiders were grid based, and the characters movement are also grid based. So Tomb Raider and XCOM have a lot in common.
(https://i.imgur.com/Z5QBTue.png)That's a lot of boots
(https://i.imgur.com/af8IRwV.png)One thing I don't like: the sprites for the ground make it harder to know what is in front/back.
That's a lot of bootsThat is a movement map. Boot icon means that the picked unit will be moving on land. There is also a wing icon, which hints the unit will be moving by air. When unit has to swap places with another unit, there is a swap icon. When unit has to jump down taking fall damage, there is a fall icon. Etc...
One thing I don't like: the sprites for the ground make it harder to know what is in front/back.These are old screenshots.
Have you cloned yourself, Nikita? 8)I've changed the name to Nash Gold, since the name "Nikita" created preconceptions and a lot of confusion, like some folks addressing me in Russian, or considering me a girl (Nikita is a female name in the West, because of Elton John song and the Besson movie). And "Nash" is also simpler 1-sillable word. Yet I had the old login info saved by browser, so by accident logged under the old name. Is it possible to lock the old account "Nikita_Sadkov" since it is obsolete?
Additional question: should armor reduce damage or just difficulty to hit?
Generally, many games treat armor as primarily reducing damage. Better armor usually doesn't make opponents miss more but instead lessens the effects of the blows received.That doesn't always make sense. Say two knights wear plate mails and armed with short swords. Now one knight hits his opponent with a slash. A slash will get deflected by plates or by shield, and wont do much damage (beside maybe forced the opponent to backstep), unless he hits with the handle and to the head, resulting in some concussion damage. Now if that knight manages to get the sword between the armor plates, that will do the damage, and could be fatal. Same with a warhammer - it will do concussion damage, disregarding the armor.
I guess it depends on how complex a combat system you wish to make. I was assuming hits that did 0 damage were still considered hits instead of misses. OpenXcom seems to have a good combat system but perhaps there are some things you would like to do differently. Maybe a hard hitting blow should always do some damage even against strong armor. Or maybe a percentage of the damage blocked by armor gets converted to stun. Maybe weapons should be a combination of damage types. For example a grenade would do both blast damage and the shrapnel would do piercing damage. Or a rifle bullet would be 80% pierce and 20% concussive while an arrow would be 50% pierce and 50% cutting. This system could handle sandbags that can stop bullets but allow arrows to penetrate them and grenades that demolish them. IIRC, the bullet arrow sandbag thing has to do with arrows having more momentum even though bullets have more kinetic energy.
If you don't want to use an engine, SDL2 for c++, don't know about c#. If you are fine with using an engine, Unity for c# and unreal for c++
If you don't want to use an engine, SDL2 for c++, don't know about c#. If you are fine with using an engine, Unity for c# and unreal for c++
If you don't want to use an engine, there is a high chance you won't achieve anything beside wasting time, and maybe learning a few basic OpenGL things. So I suggest you to use Unity, not Unreal or Cryengine, but Unity since it targets small teams and even single devs. With Unity you just import your assets and write gameplay code, instead of wasting man-years on all unimportant stuff. Moreover, OpenGL is slowly being pushed out by Vulkan, which is even harder to use, especially for newbies, and designed to be a part of an engine, maintained by a team professional graphics programmers.I wanted to do something in the same graphical view as original XCom (a fixed POV with different layers causing the impression of depth), does Unity works well with 2d games?
I personally use SDL2, but that is because the game is 2d and I'm developing my programming language Symta first of all, and as of now it has barebone floating point support (i.e. no unboxed floats). Yet I still plan to integrate with Unity in the future, when the language becomes stable enough. Since I still use a few 3d effects, but software triangle rendering a bit slow, even on modern hardware.
TLDR: go with Unity.
I imagine an isometric view is pretty complicated graphics-wise and unity might not be the best for it. But google unity isometric tutorials and see what you get.Actually, Unity has this thing called hardware Z-buffer and each sprite texel will get a camera Z, which would solve your z-sorting problem without much effort (your will still need to set up a proper orthographic projection).
But on r/roguelikedev there's a strong consensus that you don't need complex graphical engines, depending on what your plans are. Very simple input and output things like bearlibterminal are consistent and powerful (for ASCII games, not isometric). Most of the more complicated stuff needs to be implemented/tweaked yourself anyways.
Just don't try to make something as complex to design as XCOM.
Actually, Unity has this thing called hardware Z-buffer and each sprite texel will get a camera Z, which would solve your z-sorting problem without much effort (your will still need to set up a proper orthographic projection).
I don't use Z-buffer, but instead actually sort sprites by a specially crafted Z, and then apply seveal tricks, so larger sprites, like dragon, wont have wings clipping through the ceiling, and multicell sprites, like say a dinning table, would be correctly drawn before the items stand on top of them.
Similar method (but only with neighborhood sorting) was apparently used in Ultima 8, while Magic & Mayhem had some tricky hacks. As a rule of thumb, when isometric game has more than 1 z-layer, expect a lot of ugly hacks, unless you use actual 3d hardware.
So, to Tl;Dr; it: make a 3D game, with only one view point and a layering component, that it will work out better?Yes.
Or store accurate depths of each pixel in graphic and final surface. With this draw order will not matter but each pixel daw will take more time.That is called Z-buffer. A thing 3d hardware implements very efficiently.
At some point I will try implementing something like that.
That is called Z-buffer. A thing 3d hardware implements very efficiently.This is correct, if done poorly then big objects will be problem, but if we use tiles then on load we can check if any pixel do not "escape" 3d box where it should be.
But in case of tile-based isometric game with oversized sprites, you want to be very careful with Z-Buffer, so objects wont clip through walls. I.e. you want to render your giant units with Z-test turned off, just like you render HUD in FPS games to avoid it clashing with objects on screen. Then there are also transparent surfaces, which still require tricky sorting. Unless you do physically based rendering, where actual light rays travel the scene.
Although games like Warcraft III turned the clipping bug into a feature, providing buildings with foundation, that can be unearthed on uneven terrain.
Yes.
Consider the following ship sprite (taken from my game). In a proper z-buffered 3d engine importing the ship into the game is as simple as breaking it into elements, assign them proper Zs and just passing to the engine. But in the original XCOM or in say Magic & Mayhem, you will have to break this ship into cubes or similar boxes (together with complex geometry objects, like the rope ladders and the masts with sails). Obviously will still have to devise some way to hide occluding items, even with the true 3d objects. So most 3d strategy games (i.e. Starcraft 2) and RPGs are actually 2d, having just a single layer, to avoid the confusion. XCOM/Dwarf Fortress like games open a pandora box of problems.
(https://i.imgur.com/yoJWain.png)
Time to learn Blender then...Yeah. Blender or other 3d package can help. You can model even 2d scenes in it, and then export them as a set of objects for your ingame use. But I wont recommend Blender to newbies. It has a rather clunky, cryptic and generally unfriendly UI, mostly relaying on obscure hotkeys. No way you can learn it quickly and make something in a few days. 3ds Max is lot easier if you have access to it. But a room-mate artist where I live uses Cinema 4d, but I heard it is geared more towards TV and Movies, while 3ds Max and Maya were initially developed for gamedev people.
That depends on whether you want to get into a complex vehicle system, where different subsystems (sails, rudder etc.) have some impact on the whole unit's performance, which is obvious if they get damaged. I think it would be very fun, but I'm not sure if it fits your general vision and plans.
And of course, a hole in the hull would fill the ship with water until it sinks. :) Countered by the crew using buckets and long-term by repairs.
Let me just say that I 100% love the manually switchable Z layers. They are both functional and aesthetically pleasing. Terrain features getting transparent look meh and are not very comfortable to understand where things are, especially in a terrain heavy game like X-Com.Well, in my case, there are like 64 layers (XCOM has just 4, and 9 in Apocalypse), and typical human unit is 2 layers tall. It would be incredible confusing to expose the layer system. Already in Dwarf Fortress layers are a nightmare, and I'm surprised authors decided to keep them for the commercial version.
Well, in my case, there are like 64 layers (XCOM has just 4, and 9 in Apocalypse), and typical human unit is 2 layers tall. It would be incredible confusing to expose the layer system.
Already in Dwarf Fortress layers are a nightmare, and I'm surprised authors decided to keep them for the commercial version.
So I've put a lot of effort to solve the problem with a large set of hacks. I don't make sprites transparent, I just cut their upper half, since transparency wont solve it.
Let me just say that I 100% love the manually switchable Z layers. They are both functional and aesthetically pleasing. Terrain features getting transparent look meh and are not very comfortable to understand where things are, especially in a terrain heavy game like X-Com.
Well, in my case, there are like 64 layers (XCOM has just 4, and 9 in Apocalypse), and typical human unit is 2 layers tall. It would be incredible confusing to expose the layer system.
Isometric with rotating camera is perfect and what every high-budget game in the genre uses.One can implement rotation even in a 2d isometric engine. IIRC Stronghold had it. You just need a rotated version of each sprite, and there will be additional 3 views, each different by 90 degrees. These would solve most of "that unit got behind that hill" problems, but wont help with a unit inside the forest. I haven't implemented the general rotation as of now (since many objects, like the ship above, don't have all angles present), but there is a site part rotation, for premade parts, during site generation. Original XCOMs had no rotation for the same reason - some parts are missing. But I really dislike the collection of stumps forests.
You just need a rotated version of each sprite, and there will be additional 3 views, each different by 90 degrees.
At first glance this is disadvantage, because you need do 4 times more work than normally, but there is trick, each tile can have its own rotation, this mean if you see 4 same item each can facing different direction, this mean every version can be used even if player do not rotate map, even once.
Still puzzles me why only hexagons and squares produce perfect tesselations of a 2d plane, but as they say one person's square is another person's hexagon: https://en.wikipedia.org/wiki/Wigner%E2%80%93Seitz_cell
Not really 4-times, you can mirror isometric sprites, and many sprites already have 180-rotated versions, while say trees can be reused for all directions, since they are nearly round. But rotating some locations (like that ship in TFTD) would indeed require supplying additional tiles.Code: [Select]You just need a rotated version of each sprite, and there will be additional 3 views, each different by 90 degrees.
At first glance this is disadvantage, because you need do 4 times more work than normally, but there is trick, each tile can have its own rotation, this mean if you see 4 same item each can facing different direction, this mean every version can be used even if player do not rotate map, even once.
Equilateral triangles work if you allow for half of them to be rotated 180 degrees. I'm not familiar with any computer game that uses them, but there are some board games that use them IIRC. They end up being similar to the hexagons since a hexagon can be made with 6 equilateral trianglesThat wont be uniform and will create a lot of problems processing such structure. Even hexes are much trickier than squares.
The problem with rotation is that you need to have 4 walls, not just 2 like X-Com does...Yeah. In case of OXC you will have to swap walls between the map cells. That is tricky, but possible.
Compared to XCOM, battles are expected to be completed faster, and there is no save in the battle. The only opportunity to save would be on the world map. But I will try to prevent save scumming. Still I guess people could save-scum anyway, running in the emulator. But at least I could use the PRNG to prevent reloading to achieve different result. I.e. all sites are pre-determined on the world generation, so there will be no way to reload the game until it spawns the type of monsters which can be easily defeated by the player's current army. Same with AI, which uses pre-seeded RNG, so reloading wont affect AI's behavior. IIRC, Heroes of Might & Magic IV determined when player reloaded the game to save scum some chests with random content and locked-up the PRGN, although that could have been a glitch. But I believe the error was determining the chest content on the pickup stages, instead of at its generation time.But you in reality replace one save-scum with another. Now player can scout in ineffective way losing most of int units, checking what he can grain, then he reload and only do things in effective way, skipping all fights that do not give any benefits.
But you in reality replace one save-scum with another. Now player can scout in ineffective way losing most of int units, checking what he can grain, then he reload and only do things in effective way, skipping all fights that do not give any benefits.
Another problem is "groundhog-day" where you can predict events in future.
I think maybe better system would be hybrid one, you precalculate 20 rolls ahead, and you store them in save. This mean couple of roll after reload will give same results but after som time you will have diffident outcomes.
Of corse this system could explored too, you can still reroll chest but it would need reload and doing lot of actions to exhaust all random buffer and try again.
Since saving/loading obviously has in-game economic value, it would make sense to require player spending some resources to save the progress. Similarly to how Tomb Raider games used save crystals. In a fantasy strategy game setting, saving the game can be represented as a visit to Oracle, who takes money to predict future. Now usual supply/demand rules apply to the save-game economy. And suddenly you have save-system which work even in multiplayer games. In fact, both sides can agree on saving the game at some point and pay agreed price for that. Then any of the participating players could invoke the save. Obviously that would need to be somehow integrated with the diplomacy system.
Same way I plan to implement battlescape saves as a time travel spell, which would work even in multiplayer.
Currently I'm still struggling with getting the time system itself correctly. Original XCOM had only geoscape time, while battlescape was almost disconnected from the geoscape time-wise, with the only exception being night/day battles. And night missions were a special kind of nightmare, since aliens all had night vision. Now I want to connect the battlescape time with geoscape. Each Action Point squad spends on the world map this day will be subtracted from the time available on the battlescape, if squad enters the site exploration stage today. If the battlescape time runs out, then visitor will be forced to retreat unconditionally, losing any units surrounded by the enemy. Obviously battlescape time amount should be generous enough. Say 100 or 200 turns per day, but still encourage having some reserve time. Now time travel spell will not only help with the exploration, but will also unwind the time. The only catch is that the unit performing the time travel should survive.I don't think, result of this 3 body problem mean that you can't know what future is exactly because you need know current state better than physic laws allow.
The remaining questions is about making it possible to travel into the future from the past. That is always harder, since future is less known than the past. Or is it? Guess physicists will correct me that future is more stable and predictable than the past ( https://www.sciencealert.com/three-black-holes-orbiting-each-other-can-t-always-go-backwards-in-time ), since the future is still there, while the past has already dissipated, leaving a few fossils at best ( https://www.space.com/tunguska-meteor-impact-explained.html ).
If save is not free thing, then my exploit will not work, but how you will handle "load"? We have save 10 turns before, one wining player do not want to go back but losing player do not want.Given that backstory for save/load is the Oracle's prophecy, no transfer of resources backwards in time will be possible.
If we go time travel spell way then could we lose resources in past too? Some thing like that:
You start with X+Y of some resource you need.
To save game you spend X, You left with Y.
Couple of turns pass. You grain Z resources.
You load game spending Y+Z
Save is modified and remove Y from your resources. Continue game.
Couple of turns pass. You grain Z resources.
You can't load game because you have only Z.
Maybe I do not say this clearly, you do not transfer any resources, you "spend" your old resources when you go back in time, each time you return you have less of them.You mean that instead of immediately spending say a tomb raider like save crystal immediately, the save crystal gets locked, and spent on load, but player could instead unlock it and set a new check point, so save crystals would serve more like checkpointed lives in arcade games? What would happen if player exists the game? The locked crystal will be turned into actual save game?
You mean that instead of immediately spending say a tomb raider like save crystal immediately, the save crystal gets locked, and spent on load, but player could instead unlock it and set a new check point, so save crystals would serve more like checkpointed lives in arcade games? What would happen if player exists the game? The locked crystal will be turned into actual save game?I do not think that additional crystals should be locked in any way, you can use them for any other use, but when you reload you do not have them any more.
I do not think that additional crystals should be locked in any way, you can use them for any other use, but when you reload you do not have them any more.That can be useful in multiplayer, but you will still have unlimited number of saves, and it will be just the usual save scumming.
You seem to have some skills that they might be interested in. All things considered I doubt it matters much whether one is a traitor or not, but it matters a great deal if those around him believe he is a traitor. Countries will take in even hated enemies if they have a use for them. Just look at the former Nazi German V-2 rocket program people. Both the Soviet Union and the United States grabbed as many of these people as they could to work on their ballistic missile and space rocketry programs. Those former Germans had a big hand in putting the first satellites and people in space and even on the moon.
Back in Russia I wanted to get a degree in biology, but got expelled from the evening school after complaining that all walls there have posters with Putin, his ruling party propaganda, and that they don't teach anything beside history. The school had like 3 hours of history for 1 hour of STEM. That left me no other option but to go into conflict. That would be like America having the currently ruling president portrait in each classroom for 20 years in a row! As well as various agitation material. The government funded evening school also had a mandatory Russian Orthodox Church education, where clerics from the local temple lectured people about the government being the extension of God's will. Disregarding the kids belonging to different denominations or being non-religious.First complaining about Putin posters is bit pointless, even if they agree with you this would not change fact that Putin is President-For-Life.
Russian history education is not something you have to research and interpret for yourself. No. To pass the exams you must rote memorize the "facts" they tell you. If you question these facts, you will get in trouble. I.e. teacher states "WW2 started because of X", but you say "no, WW2 started because of Y." Now in response you will likely hear something like "leave the classroom now." Obviously Russian history tries to downplay the USSR role helping Hitler to raise into power and starting the war. And if you refuse to play their game, then you're a troublemaker.
Then I got fired from the job after refusing to write C++ code comments and documentation in the Russian language. I haven't seen any reason to use Russian, since all programmers know English anyway, and it would even be convenient for the company to avoid locking itself into hiring only the speakers of some single language. But the company was a Russian military contractor and they had to follow the government rules, including the conformance to the government standards, which stated even the source code comments language. While I feel that the single world's language must be the English language. But such stance obviously gets one into trouble with the local authorities. Especially since Russian elites believes that English language, as the international language, is harmful to the Russian culture, the nation and their personal security.
First complaining about Putin posters is bit pointless, even if they agree with you this would not change fact that Putin is President-For-Life.There were not many other jobs in the city of Serpukhov, which traditionally produced equipment for the Soviet submarines. And the company I worked for has spun-off from the Ratep military factory. In fact all jobs in Russia are either in the military or in the gas/oil sector. I've also worked at the mass spam company, but since IT got weaponized, their services were used not for ads, but for the blatant propaganda spam.
Second going openly against "history propaganda officer" is again pointless, what you or other grain form this? If you want fight they propaganda then expect they will fight against you too. If you do not like results you should not do it or not do it openly and if you did that 40 years ago you would be already in gulag.
Beside what nation do not teach "facts" about is history? Even west can criminalize some historical opinions if they fall too far from main one.
And btw I think USSR is responsible for WW2 (without they "help" Poland would fight far longer that it did).
Third refusing to use Russian in comments is stupid, I understand other Poles that refuse to use Russian or German during Partitions of Poland, but this?
Someone take your books and force you to learn new language? If you are fine to work for military contractor then you should be fine to write comments in Russian. Simply if you work for someone you should follow they demands, if you do not think your employer is moral you should not work for him at all.
That's quite a hardcore yes, but why are you telling us this? It won't help you much if you're in such trouble.Just explaining why the project will likely never gets released.
I hope your game goes well, it shows promise.
There were not many other jobs in the city of Serpukhov, which traditionally produced equipment for the Soviet submarines. And the company I worked for has spun-off from the Ratep military factory. In fact all jobs in Russia are either in the military or in the gas/oil sector. I've also worked at the mass spam company, but since IT got weaponized, their services were used not for ads, but for the blatant propaganda spam.
Had I not bribed some officials to escape, I would have already got 10 or more years in jail or a nuthouse (they believe it is insanity when a citizen of Russia refuses to speak Russian out of the spite). There are several crime cases against me in Russia, which issued international arrest warrant on my head. That is how I got into Ukraine, and one of the reasons I've changed my name to distance myself from other Russians. Obviously Russians find it insulting, when somebody refuses to carry a Russian name.
WW2 started when USSR began the military buildup proceeding on their plan to conquer Europe. Additionally helping the destruction of Weimar Germany. I.e. long before the actual war. And WW2 is just a follow up to the WW1, which too began not without a Russian help. Without WW1 there would have never been Hitler, who was literally created by that war, or the USSR, too the product of WW1. So everything can be tracked back to the Tsar Nicholas, or more precisely to the slavish population of Russian serfs (крепостные крестьяне), who failed to get their freedom and were used as a cannon fodder in a nonsensical war used to entertain the elites playing "The Great Game", as they called it.
My Russian compatriots love blaming others, but they get angry when somebody points at them. It is easy to accuse say Stalin of building the Gulag system and executing millions, but we have to admit it was not Stalin who wrote all these millions of false reports (bribes and reports, usually anonymous, were used to get rid off people standing in the way), and it was not Stalin who did actual executions and guarded the concentration camps. It were the common people, these same serfs, who under the Tsar Nicholas did the WW1. In fact, Russians gained freedom of movement only in 1974. Before that they were attached to the kolhkhoz and factory as a property, and were completely okay with it. Compare to African-Americans, who did multiple revolts against the slavery and mistreatment.
So yeah. I don't want to be a part of Russia and I don't want to speak Russian. They can jail me. They can kill me. But I will still refuse to accept their BS. I refuse to live in the parody of a society they build.
But you agree to work for them but still refuse to follow their standards. I do not understand this part. Writing code for them is couple of magnitude more important than language of comments. I would understand opposite, write comments but refuse to work with them.I had to work somewhere. And the language is actually very important in maintaining social coherence, and crystallize the nation. Without the language and the culture built on top of it, the Russian nation will melt down and evaporate like ice under the summer sun. In fact I think language is the most important factor holding the Russian nation together. It is hard for people to grasp the importance of their language, since it is always there, taken for granted. Language is not like these Gulag guards, yet it serves the same purpose - keeping Russians locked in. If we consider the theory of our Universe's structure being self-similar, then the language+culture pair would be very similar to the force of gravity. It is decentralized, having no distinct center, beside the center of mass, and yet it self-organizes the agents affected by it. And in fact the language and the culture are the functions of gravity (they are obviously shaped by the spatial locality).
I understand hating current government or previous one, but hating every thing? You probably hate it more than I even I could find more reason to do it.Government is just the function of its citizens and their culture (if we apply the above gravity metaphor). I don't hate the Russian government. I don't really have any hate anymore. Hating Russia is like hating the gravity force expressed by some space body - an exercise in futility. Without that cultural cementing force it would have been very easy to overthrow the Moscow government. To start a revolution in Russia one needs just one thing: cut off the gas and oil from Moscow. To do that you need just a few thousand troops. Then suddenly all the profits will remain in the regions, and Moscow will have no money to support any army. And in fact no way to keep people enslaved (riot police usually comes from distant regions, since people wont be beating their relatives into submission). But no, Russians will cope with everything, being dirt poor in the richest country on Earth. And if you start talking with Russians about revolution, they will only report you to security agencies. That is like a law of physics.
And if you really want insult Russia you should become Polish citizen as this is only country that really occupy Moscow (if you include Napoleon then Poles did it two times as they where with him too).I will likely try getting into Britain or Ireland. Since I speak English and England has many opportunities in the IT sector. I doubt Poland needs any programmers. Then again, I'm completely ignorant about the economy of Poland. But I know for sure the last thing Poland and Poles want is the Russian gas pipeline being blown up by revolutionaries. Ukraine wants it even less, since the major part of the Ukrainian budget income comes from the gas transfer revenue. From the economical standpoint, Ukraine is the integral part of modern Russia (culturally it is too a Russian satellite). Yet it wants to maintain the relative independence to get that revenue. If Russians annex Ukraine, all the EU money will go to Moscow. TLDR: if I manage get a refugee status in Poland, and then write on the Internet something like "Freedom for Siberia! Now is the time to take down that motherf&&king pipe", there is a high chance Poland will extradite me to Russia the next day.
I had to work somewhere. And the language is actually very important in maintaining social coherence, (...)
So if one wants to destroy Russia or to get out of its control, that individual will have to speak a different language. And fortunately Russia is not (yet) a blackhole, so it is possible.
Government is just the function of its citizens and their culture (if we apply the above gravity metaphor). I don't hate the Russian government. I don't really have any hate anymore. Hating Russia is like hating the gravity force expressed by some space body - an exercise in futility. Without that cultural cementing force it would have been very easy to overthrow the Moscow government. To start a revolution in Russia one needs just one thing: cut off the gas and oil from Moscow. To do that you need just a few thousand troops. Then suddenly all the profits will remain in the regions, and Moscow will have no money to support any army. And in fact no way to keep people enslaved (riot police usually comes from distant regions, since people wont be beating their relatives into submission). But no, Russians will cope with everything, being dirt poor in the richest country on Earth. And if you start talking with Russians about revolution, they will only report you to security agencies. That is like a law of physics.
I will likely try getting into Britain or Ireland. Since I speak English and England has many opportunities in the IT sector. I doubt Poland needs any programmers. Then again, I'm completely ignorant about the economy of Poland. But I know for sure the last thing Poland and Poles want is the Russian gas pipeline being blown up by revolutionaries. Ukraine wants it even less, since the major part of the Ukrainian budget income comes from the gas transfer revenue. From the economical standpoint, Ukraine is the integral part of modern Russia (culturally it is too a Russian satellite). Yet it wants to maintain the relative independence to get that revenue. If Russians annex Ukraine, all the EU money will go to Moscow. TLDR: if I manage get a refugee status in Poland, and then write on the Internet something like "Freedom for Siberia! Now is the time to take down that motherf&&king pipe", there is a high chance Poland will extradite me to Russia the next day.Why any county would allow continuation of your crusade against Russia? And even if it will be moral? How many would die in this next revolution? Revolution have bad habit of eating its own children.
Government is more a feedback loop, I saw enough examples as bad government can corrode whole society and opposite can happen too. Look on current USA, this can go in any way, one person making one correct decision could define next 100 years of it. No society is unified, all have some subgroups, and depending on circumstances everything could go upside down.But government still needs a strong and integrated nation to regenerate itself reliably over time. Russia had several revolutions, but each time it moved to the same core, surviving both the complete change of its elites in 1917 and the total economic collapse of the USSR. No matter the Tsar or Stalin, Russia will remain Russia. Just like if you turn the planet Earth into dust, that dust will accrete back to create the planet (although likely very damaged), unless it gets velocities larger enough to escape the synergistic gravitation of all other dust particles. On the contrary, Roman Empire got disintegrated, and its language went extinct. So government is more of the function of what there is under it.
Tiles were complex data structures. Each one also had a reference to line of sight definition – this was a simple 4x4x4 grid – a sort 3d texture – where each cell was either solid or empty. There were a relatively small number of these solid line of sight definitions, but enough to approximate the 3D shape of any shape of tile created. This meant that the world was effectively broken into a 3d voxel grid where weapon fire could be accurately ray-traced. It was a ball ache to set up initially, as every tile had to have a line of sight definition assigned, but really made life easy later on as collision in game then became automatically generated from the map editor.
It was a genius approach, especially in the years before decent 3d raytracing – and one of the key identifying features of an xcom game. Players always loved being able to snipe enemy forces from right across the map through a couple of windows or blown open walls. It’s also a technique which I think useful to reinvent for use in conjunction with true 3D worlds and can think of lots of good mechanics you could use them for.
What exactly data structure you use for this voxels? It is a colossal vector? or something else?
typedef struct {
uint32_t w; // width
uint32_t h; // height
uint32_t d; // depth
uint32_t wh; // width*height
uint32_t flags; //flags describing the vfx
uint32_t data[]; //w*h*d voxels
} vfx_t;
As of now it justGetting faster will be hard but not impossible, in C++20 they add some interesting tools that could allow speed increase:Code: [Select]typedef struct {
uint32_t w; // width
uint32_t h; // height
uint32_t d; // depth
uint32_t wh; // width*height
uint32_t flags; //flags describing the vfx
uint32_t data[]; //w*h*d voxels
} vfx_t;
Obviously `data` are not even sub-divided into smaller cubes, so each new Y or Z triggers a page fault.
for (int n = 0; n < X; ++n)
{
_mm_prefetch(pos(n + 2));
process(pos(n));
}
Getting faster will be hard but not impossibleGetting faster will involved creating proper optimization structure and transitioning it to GPU. But then it will stop being a toy prototype app and will require any effort to modify.
Blade Runner didn't actually use voxels, they used a rather unique technique that they called "slice animations".
The 3D models were sliced from bottom to top into a couple of hundred slices (depending on desired quality) by intersecting the model with a horizontal plane and storing the resulting polygons.
The engine can only rotate the models around the vertical axis.
In back of my head I was thinking about adding octatrees or similar structure to speed up OXCE trajectory calculations. What exactly performance you get in your editor? How many pixels you can render before you see slowdowns?I got orders of magnitude increase from the brute force grid tracing with 0.5 step. Yet it applies only to larger models (128x128x128, etc), since octree by itself incurs housekeeping. Operations like boolean ones also get speedup, but again for large scale models. Booleans obviously include explosion radius and other selection stuff. I doubt simpler game engine like XCOM will win anything. I suggest you not bothering with it, unless you want to practice your octrees skills or developing the next AAA XCOM, where bullets fly through the truly continuous space and everything must be just perfect, but AAA games likely already have octrees as part of collision system in the physics engine. Voxels are nice when you have say a wall with weak parts, which will get destroyed by bullets or small explosions, or say when you want to model actual vital organs in aliens, like that huge alien having two hearts and two brains, each of which must be hit to kill it.
For voxel engines there is already one that was close to use in AAA title (EverQuest Next):I.e. it was not actual voxel engine, but the usual polygon engine with some internal "voxel" heightmap. Voxel engine actually raytraces voxels, without polygons ever popping in in the pipeline. Although you can probably combine voxels with polygon graphics using zbuffer, but it will break all transparency. And voxels major use are the effects involving transparency, like volumetric fog. Therefore it makes sense to go all voxels. One can ray march the mesh out of voxels to use for the same volumetric fog, but it wont be the same: uniform density and color everywhere wont allow for very exciting effects.
http://procworld.blogspot.com/
One difference is that it feed polygons to U4 or Unity for display.
I.e. it was not actual voxel engine, but the usual polygon engine with some internal "voxel" heightmap. Voxel engine actually raytraces voxels, without polygons ever popping in in the pipeline. Although you can probably combine voxels with polygon graphics using zbuffer, but it will break all transparency. And voxels major use are the effects involving transparency, like volumetric fog. Therefore it makes sense to go all voxels. One can ray march the mesh out of voxels to use for the same volumetric fog, but it wont be the same: uniform density and color everywhere wont allow for very exciting effects.He create full voxel terrain but without any voxel renderer. I think we can separate them, because he show on many videos that he can alter terrain on run time.
Is OpenVDB merely a generalized octree or N-tree?
No! While OpenVDB can conceptually be configured as a (height-balanced) octree, it is much more than an octree or N-tree. Whereas octrees and N-trees have fixed branching factors of respectively two and N in each coordinate direction, OpenVDB’s branching factors typically vary between tree levels and are only limited to be powers of two. To understand why and also learn about other unique features of OpenVDB, refer to the paper in ACM Transactions on Graphics.
Is OpenVDB an adaptive grid?
Let’s first stress that the term "adaptive grid" is somewhat ambiguous. Some use it to mean a grid that can store data sampled at adaptive voxel sizes typically derived from a so-called "refinement oracle", whereas others mean multiple grids with different fixed voxel sizes all sampling the same data. An example of the former is an octree and of the latter is a mipmap. Since OpenVDB stores both data values and child nodes at each level of the tree, it is adaptive only in the first sense, not the second. The level of adaptivity or refinement between the tree levels is defined by the branching factors of the nodes, which are fixed at compile time.
OpenVDB stores voxel data in a tree with a fixed maximum height (chosen at compile time), with a root node that has a dynamic branching factor, with internal nodes that have fixed branching factors, and with leaf nodes of fixed dimensions. Values can be stored in nodes at all levels of the tree. Values stored in leaf nodes correspond to individual voxels; all other values correspond to "tiles" (see below).
The world map is basically a 2D array of pointers (1024x1024), which point to lists of surface voxels on each column. This column is a list of colors and is compressed using an RLE-style algorithm. I wrote my own memory management system to handle fast allocation/deallocation of 1048576 blocks of memory.
And my code is horribly inefficient, despite being rewritten into C and optimized with octrees.
C? Did you drop C++ or from beginning it was written in it? If you did it, I would suggest keep C++ compiler because it had more restriction that allow 1% speed increase in same code base:From the beginning it was written in my own language - Symta, which is inspired by Common Lisp, but without GC. I use Symta for everything, beside resource intensive parts, which I rewrite into C. I have strong aversion towards C++, due to multiple reasons.
https://www.youtube.com/watch?v=Nand3PEV1p4
Doom written in C converted to C++ give you small speedup, bit ironic compare to what usually people say ablaut C/C++ differences.
Of corse if you try use naive OO you will loose speed, but great thing in C++ is that you do not have to.
1. For low level language C++ hides too much stuff, and for a high level language it is too clunky and segfaulty, while templates produce real mess, and other devs on a team will always harass you if you use a macro instead of a template, because Bjarne said something somewhere about macros being the tool of the devil. I.e. C++ is more of a strict religious cult, one has to better stay away from.You are not representing Bjarne stance correctly, macros had couple big flaws that make hard to work with them, like
FOO(a + b) <===> 5 * a + b
BAR(++i) <===> foo(++i, ++i)
std::max(i, j) <===> std:: (i < j ? j : i)
This is why Bjarne SUGGEST to do not use them, in most cases templates are superior replacement for macors, but in cases where you effective generate code they should be still used, I did exactly this in OXCE, I made big meta-template library but at some point I was forced to use lot of macros for class generation.2. C++ indulges what Joel Spolsky called "architecture astronautics", akin to building a grocery store at Alpha Centauri, so clients will fly a rocket there to buy an apple. I.e. C++ offers a lot of tools that impede and complicate thinking. That is job security for sure, but not when you're working on a personal project, which you want to just get finished in as quickly as possible, so you can use it to say create art for you game.You can impede and complicate thinking in any language you want, if it have enough tools this is doable, and C++ is not exception.
3. Finally, C++ has no proper ABI, it is a thing in itself. Major C's fault is unrestricted pointers which can reference the same memory, so compiler can't make any assumptions. But that is actually a boon, since you can always explicitly restrict pointers, when you're sure about it. It is funny since I learned C++ before C, but then gradually downshifted to the plain C.This is true, you can't easy link with C++ code but you already have escape hatch in `extern "C"` that create plain C functions that can link.
Another thing is you use correct tools then make opposite, see `std::unique_ptr` and `std::shared_ptr`.Using shared_ptr is called "reference counting garbage collection," which is a very inefficient way to manage memory. Now when user clicks quit on a typical C++ app (or the next level begins loading in your game), it freezes for a few seconds, because the code goes into destructors, freeing millions of these pointers, instead of just returning to OS. Even worse, it hides all that underneath. I.e. it is the tool which will lead you astray, while in C you just malloc all the memory required for your program at the startup, then partition it trying to avoid fragmentation, instead of doing millions of malloc calls for each tiny object. That would also allow you to easily dump the data structure onto disk, to either load it in future or debug the problems with it. Not something you can do with classes, having rt-info and links to the methods table.
Using shared_ptr is called "reference counting garbage collection," which is a very inefficient way to manage memory. Now when user clicks quit on a typical C++ app (or the next level begins loading in your game), it freezes for a few seconds, because the code goes into destructors, freeing millions of these pointers, instead of just returning to OS. Even worse, it hides all that underneath. I.e. it is the tool which will lead you astray, while in C you just malloc all the memory required for your program at the startup, then partition it trying to avoid fragmentation, instead of doing millions of malloc calls for each tiny object.This is comparing apples to oranges, if you can replace hundreds of mallocs by one then you should do same in C++, both smart poiners are needed when you have:
That would also allow you to easily dump the data structure onto disk, to either load it in future or debug the problems with it. Not something you can do with classes, having rt-info and links to the methods table.If class is POD you can do it too, and if you can put it in array then is not likely you will need any rt-info.
But I wont be arguing further of that. It is a matter of taste what use for the high level language. But I personally use C only for the most performance critical parts, while C++ is used when people write the whole project in it.And I could not agree more with this, high performance code look similar in C and C++, to have 100% you need drop lot of abstraction to make it work.
This is comparing apples to oranges, if you can replace hundreds of mallocs by one then you should do same in C++, both smart poiners are needed when you have:That is why you don't use C for larger projects, only for building blocks. C was an okay language to build Unix, when it was broken into many small commands. It is still an okay language when you break your app into modules with well defined APIs, debugged separately, so bugs (especially memory bugs) don't become global. Yet memory bugs, use-after-free, use-before-init, and especially the unbound array indices, are the most persistent bugs, which are absent in higher level languages - you just cant corrupt the memory there, resulting in further data corruption in unrelated places, expressing itself in strange ways (the so called heisenbugs).
A) shared ownership where and undetermined lifetime, pure hell in C
B) unique ownership and undetermined lifetime, easy to make wrong if you forget one `free` in C
The biggest coding challenge in the project was writing the 3D Boolean algorithm. This is one of the most complex tasks in 3D work and the Atari’s floating-point routines really weren't up to the task. It took weeks of work to get the Boolean code stable enough to work in most cases, and I swore I’d never write another 3D Boolean algorithm!
Also, Ukraine has X-COM internet provider.
Good to see you again.In a year or so they either approve the residency permit or decline the application, and tell to leave the country. Unfortunately during this time you can't work even online and outside of Netherlands (i.e. having clients in America or Russia). At least that is what the immigration people told me. Some refugees here do work unofficially (i.e. ladies work as babysitters), but if they get caught at this, they will get into troubles. NL is not Ukraine, where they don't care what you're doing, but a Germanic country, so here is Ordung.
btw "Refugees here are forbidden to work", how its this work in long term?
Good luck to you and your girlfriend!Thanks!
The covid does not scare, I do not know your age, but it does not only affect old people, I directly know two sportsmen of less than 50 years of age who have been hospitalized with oxygen, helmet and pronated twice a day for two or three weeks and now with a long rehabilitation time aheadYeah. She is less than 30, but it hits young people pretty hard too. In addition she was greatly exhausted by her supermarket job: in Russia and Ukraine they don't have any worker rights or unions (USSR destroted everything), so employers compete at scamming and forcing people to overwork, sometimes doing night shifts, since supermarkets work 24/7. Guess I should add mandatory holidays for the squaddies into the game.
There is https://www.xcom-shop.ru/ (https://www.xcom-shop.ru/) and has been since 1994. A coincidence? I do not think so.Definitely not a coincidence, given how popular the game was in Russia.
Hey, we have them in Poland too...At least they use a different X, and K instead of C.
https://www.x-kom.pl/
sym_t *pg_declof2(cnode_t *n) {
if (!n) return 0;
if (n->id == N_BLOCK) { //for GCC block expressions
return 0;
} else if (n->id == (IDENTIFIER|N_TERM)) {
sym_t *s = lookup(n->text);
if (s) {
return s;
} else {
return 0;
}
} else if (n->id == N_EXPR) {
return 0;
} else if (n->id == N_BEXPR) {
for (; n && n->id==N_BEXPR ; n = n->tail) {
sym_t *decl = pg_declof2(n->head);
if (decl) return decl;
}
if (n) {
return pg_declof2(n);
}
return 0;
} else if (n->id == N_DECL) {
return 0;
} else if (n->id == N_UNARY) {
char c = n->head->text[0];
if (c == '*') pg_declof_ptr_lv--;
else if (c == '&') pg_declof_ptr_lv++;
return pg_declof2(n->tail);
} else if (n->id == N_INDEX) {
pg_declof_ptr_lv--;
return pg_declof2(n->head);
} else if (n->id & N_TERM) {
return 0;
} else if (n->id == N_SIZEOF) {
return lookup("_cext__int");
} else if (n->id == N_CAST) {
cnode_t *type = n->head->tail;
cnode_t *decl = n->head->head;
yyltype_t loc;
memset(&loc, 0, sizeof(loc));
cnode_t *ident = cnode(IDENTIFIER|N_TERM, 0, 0, &loc);
ident->text = strdup("_cext__tmp");
cnode_t *d = cnode(N_DECLARATOR ,ident, decl->tail, &loc);
return push_decl(type, d);
} else if (n->id == N_LIT) {
if (n->head->id == (I_CONSTANT|N_TERM)) {
return lookup("_cext__int");
} else if (n->head->id == (F_CONSTANT|N_TERM)) {
if (n->head->text[strlen(n->head->text)-1] == 'f') {
return lookup("_cext__float");
} else {
return lookup("_cext__double");
}
} else if (n->head->id == (STRING_LITERAL|N_TERM)) {
return lookup("_cext__char_ptr");
} else if (n->head->id == N_SIZEOF) {
return lookup("_cext__int");
}
return 0;
} else if (n->id == N_DOT || n->id == N_ARROW) {
sym_t *s = 0;
int sptr = pg_declof_ptr_lv;
pg_declof_ptr_lv = 0;
sym_t *l = pg_declof2(n->head);
int expr_plv = pg_declof_ptr_lv;
pg_declof_ptr_lv = sptr;
if (!l) goto dot_end;
char *name = n->tail->text;
char *tname = pg_typename(l->type);
if (!tname) goto dot_end;
char *mname;
int plv = ptr_level(l->decl) + expr_plv;
if ((n->id == N_DOT && plv != 1) || (n->id == N_ARROW && plv == 1)) {
mname = sjoin3(tname, "_mf_", name); //field accessor
s = lookup(mname);
free(mname);
goto dot_end;
}
mname = sjoin3(tname, "_m_", name);
s = lookup(mname);
free(mname);
dot_end:
return s;
} else if (n->id == N_CALL) {
if (n->head->id != N_DOT) return pg_declof2(n->head);
n = n->head;
sym_t *l = pg_declof2(n->head);
if (!l) return 0;
pg_declof_ptr_lv += ptr_level(l->decl);
char *name = n->tail->text;
char *tname = pg_typename(l->type);
if (!tname) return 0;
char *mname;
sym_t *s;
mname = sjoin3(tname, "_m_", name);
s = lookup(mname);
free(mname);
if (s) return s;
return 0;
}
return 0;
}
TLDR: my biggest mistake was picking squares over hexes. I would recommended hexagonal lattice even for real-time strategies. Unfortunately Blizzard doesn't feel enough competition to fix their competitive games and make the next Stracraft into a perfect game.(https://i.imgur.com/Czy4mR9.jpg)
Hey!
That's a pretty impressive game project! I really like the Amiga/Atari aesthetics, and the flooding is impressive!
I am working on another pretty different XCOM inspired fantasy game, and I decided to go with hexes for the same reasons you recommended them, more or less.
What triggered me the most with squares was that formations don't work if both sides are not facing each other from the main directions, which should happen a lot in a game with large maps and fog of war (because you cannot have proper Zones of controls with squares).
However, it has been a huge pain to make walls and buildings, so I am still really torn about the issue. It really makes the wall tiles hard to read in term of blocking movement and LoS.(https://i.imgur.com/VVwIQhW.png)The NW->SE walls don't follow the hexagonal lines which causes all sort of issues.
I should have gone with natural caves instead of constructed walls.
So I am not sure you really were wrong about picking squares.
New C macroprocessor improvements over the original C preprocessor.
- Succinct declarations: instead of `#define PI 3.14`, we now have `#PI 3.14`
`#if #SYMBOL` instead of `#ifdef SYMBOL`
#once, instead of `#pragma once`
- Calculate arbitrary functions!
#fac(n,x) #if n>0 fac(#[n-1],#[x*n]) #else x #endif
fac(10,1) //factorial of 10
- Ability to redefine punctuation, like `+` and `-`, and to do it only in the
specific context of another macro.
- Nested macros with different scopes, just like normal C variables.
#x 123
x //expands into 123
#{
#x 456 //shadow the x defined above
#<x=#[x+1]> //increment x by 1
x //expands into 457
} //interior x gets out of scope
x //expands int 123
- No need to escape newlines with `\`:
#foo {
printf("hello");
printf("world");
}
- Much easier to use variadic args. For example:
#last([xs],x) x
picks the last element of the arglist.
- Macros can be defined anywhere, not just at the start of line.
For example:
#x 123
#y #z{456} x z
y
will expand into `123 456`
- Macros can be expanded inside of strings.
- Macros arguments can be inserted into strings:
#foo( x, y ) "#x+123+#y"
- Allows calling an external program with arguments. For example:
#+ -
#(echo "a+b")
will expand into `a-b`: first external `echo` command is called with "a+b"
Then then its stdout is being macroexpanded.
- Special builtin command #(say ...) printing to stdout. Useful for debugging.
- Nested / * * / comments.
- When a function-like macro invokation has no () arglist,
NCM takes as the arguments everything up to the newline or the //-comment
That would allow user the create elegant looking DSLs.
Or use NCM to preprocess assembly files:
#myopcode(a,b) {...}
xor ax, ax
myopcode bx, ax
- Available as a single header library and can be used to preprocess
other languages, like GLSL.
- Escapable comas in arg list.
- A way to change `#` to another character, if you use the macroprocessor to
preprocess a language where `#` is used for, say, comments.
- Auto adding extension ".h" to files without one.
- And much more!
Thanks! I did play all the AoW (except 3) a lot actually. I am sorry about your refugee camp issues. It is a real disgrace that we in the West created so many, then handled the problem in such an inhuman way. I hope your situation will get sorted soon enough. In which country are you now? The Netherlands?Astonishingly good looking project! As for implementing the hex tiling, check Age of Wonders games. Especially the first AoW, which had walls for castles and dungeons.
I myself currently got dragged away with all the refugee life issues and the camp management now threatening me for filming a fight (they believe that all happening in the camp must stay in the camp). Although I have finished my own C-like language (called NewC), featuring an extended macro processor, which fixes all the issues impeding me from using the old CPP. Had to do that, since I really dislike C++, but still for the voxel editor I need custom types, like vec3 and bounded checked arrays with O(1) push. I can't do the voxel editor in Symta, since performance is really so critical. The NewC is not so much a compiler, than a very tricky rewriter (I'm not that crazy to implement my own optimizing compiler), replacing `vector.x` with `vec3_get_x(vector)` and `auto` with proper types. Obviously it is totally incompatible with C++, doing the right thing in the wrong way, breaking every single C++ textbook good practice, and encouraging the use of macroprocessor instead of templates. In fact, that is one of the reasons I had to re-implement the macroprocessor, because the C's one, while turing complete, is just too clunky to use for anything beyond basic `#define PI`
Anyway, I have rewrote the core voxel format several times, implemented the OBJ importer/exporter, developed a few voxel editing techniques, and got some insight into deforming the voxel models without SDF. Which I could use maybe for Spell of Mastery 2, since it really requires GPU.
TLDR: parsing C using C is much easier than writing a voxel editor, which is much easier than implementing a video game. Like an order of magnitude easier.
(https://i.imgur.com/CPdI7El.png)
Thanks! I did play all the AoW (except 3) a lot actually. I am sorry about your refugee camp issues. It is a real disgrace that we in the West created so many, then handled the problem in such an inhuman way. I hope your situation will get sorted soon enough. In which country are you now? The Netherlands?Yeah. I'm in NL for now. I believe Age of Wonders developers are Dutch, and Dijkstra too! :D
Regarding selling your code, you can just call it an engine, and you should be able to do so, but with everyone using Gamemaker, Unity or Unreal Engine, it is harde to compete (the one I use, Moai, got completely destroyed by the competition of Unity, because it lacked tutorials, documentation, and things like the asset store, which come with a large user base).Well I doubt you can use C/C++ with Unity (it is C# only) and a macroprocessor is not really a video game engine, but a general text processing utility (like a regex library), which you can use for all sorts of things.
#count 0 //a variable like macro
#next() {#<count> #<count=#[count+1]>} // define a function like macro
next() //expands into 0
next() //expands into 1
That can also be used to implement gensyms in C/C++ void foo(int x, int y, int z) {...}
#foo(x,y=123,z=abc) foo(x,y,z)
now foo macro will supply the default values for y and z,foo(456,z=789)
too supply argument only for zWell I doubt you can use C/C++ with Unity (it is C# only) and a macroprocessor is not really a video game engine, but a general text processing utility (like a regex library), which you can use for all sorts of things.MS created C++/CX or C++/WinRT that allow to interact with C# types (exactly with CLI). In theory this could work for Unity too.
Then plain C/C++ doesn't support optional and keywords arguments, yet one can still have them using macros:In recent C++20 standers you could write something like this:
foo({.x = 5, .y = 6});
MS created C++/CX or C++/WinRT that allow to interact with C# types (exactly with CLI). In theory this could work for Unity too.
At leasy you run pure C# code that simply call C++ dll using p/invoke.
In recent C++20 standers you could write something like this:Code: [Select]foo({.x = 5, .y = 6});
parse_if Sym =
OCol Sym.src.1
if is_next `:`:
T expect `:` Sym
X parse_offside 0 0 Sym.value Sym.src.0 OCol
ret :: Sym X.0
Cnd Then No
Head parse_xs 1
if is_next `then`:
Cnd = Head
T expect `then` Sym
Then = parse_offside 0 0 T.value T.src.0 OCol
else
if Head.end or not Head.0^token_is(`:`) then
parser_error "missing `:` for" Sym
Cnd = Head.1
case Cnd [H [K [@L] [@R]]]: when K^token_is(`or`) or K^token_is(`and`):
Cnd =: K [H @L] R //huge kludge
Then = Head.2
Else:
if is_next `elif`:
T expect `elif` Sym
GInput =: T.retok(`else`) T.retok(`if`) @GInput
if is_next `else`:
T expect `else` Sym
Else = parse_offside 0 0 T.value T.src.0 OCol
:Sym Cnd Then Else
Shadows are really buggy, since on Windows I compile with GCC and it doesn't have the proper SSE code for alpha blending.
What version of GCC you used? I couple of times play with SSE and windows version support it.Some old version, I have stashed on the virtual machine image.Code: [Select]Shadows are really buggy, since on Windows I compile with GCC and it doesn't have the proper SSE code for alpha blending.
What version of GCC you used? I couple of times play with SSE and windows version support it.
One solution used by OXC and OXCE is https://mxe.cc/
#include <emmintrin.h>
#include <smmintrin.h>
#include <xmmintrin.h>
#include <immintrin.h>
aware
xy -4 -2 xyr 4 -2 point
xy 0 -10 xyr -2 -10 atk1
xy 8 4 xyr -8 -4 atk2
xy 8 4 xyr -8 -4 atk3
But I think the right thing would have been calculating these in the world space, not the screen space, so this xyr duplicate wont be required for the 180 degree version of the anim.More math/physics-inclined people know that "randomness" is basically an abstraction, and immediately see that by discarding it one basically plays God (who doesn't play dice, as Einstein noted). In physics randomness arise when we don't fully understand the system and can only comprehend about it using statistics. That doesn't mean the system is random. That means we are ignorant.Except when we have wave function collapse that effect is random, and there no way to have "hidden variables". Classic physic is indeed predictable but this is only abstraction over random system :>
Except when we have wave function collapse that effect is random, and there no way to have "hidden variables". Classic physic is indeed predictable but this is only abstraction over random system :>
No, your measurement do not have any technical limitations, physic limits what we can measure, we have Uncertainty principle, Bell's theorem, and example of Double-slit experiment where measure change effect of experiment. And whole "no hidden variables" means exactly that there is no "full state" that we do not see, and only thing is wave function and its collapse that is govern by density of probability.
As I understand it is random only for the observer, because the observers' measurement abilities are limited. And since observers can't observe the full state, they can't predict the next state.
No, your measurement do not have any technical limitations, physic limits what we can measure, we have Uncertainty principle, Bell's theorem, and example of Double-slit experiment where measure change effect of experiment. And whole "no hidden variables" means exactly that there is no "full state" that we do not see, and only thing is wave function and its collapse that is govern by density of probability.The point is that it is just theory, which is based of the local observation. There are no hidden variables, because we never seen them. Like the movie in the theater we never visited, because the boat went to another place today. If one day aliens abduct you and you find yourself on a flying saucer, thousand light years from Earth, you wont have a slightest idea where you are and what is going on on Earth, especially if the saucer has no window (i.e. no proof that the sun is still shining). Basically you are as good as in a different universe. So distance coupled with the light speed limit creates a separate universe. Recently they launched a new telescope and it changed the existing theory, which had holes in it, because the observation became less local. But still there is an optical limit to what we can theoretically see from here. Blackholes too have structure unknown to us, and could as well have their own plank distance, which could end up varying over the space, instead of being constant. But well, they are "black" to us, because we can't observe them directly. Same with the Schrodinger's Cat. We are not yet sure even about our own Sun's structure, because the processes happening inside of it are rather complex. IIRC, there was a paper proving they are turing complete. In other words, there is a life possible inside of the star itself. TLDR: it makes sense to remain open minded, without making any hard predictions and unchangeable plans, so there will be no disappointment when the predictions fail, because we were ignorant about something.
How this even related to for example Double-slit experiment (especially when single photon interfere with itself)?The problem is that you checking the electron state affects it.
Every thing is local and can be closed in finite box and separated from rest of universe, and you still have random quantum effects. Or simply checking position of one electron, if you check it repeatably it will always give SAME answer, but if you one time check its speed then next check for position will be have random result, but second check for its position after it will return same value as previous check.