SDK COC :Questions,help and tips !

unknwn
Scavenger
Posts: 5
Joined: 27 Sep 2016, 18:53

Re: SDK COC :Questions,help and tips !

Postby unknwn » 26 Oct 2016, 14:02

I tried create one simulation squad but did not work out. Can you make one simle example for me, please? Let's say I create smart_terrain named rod_sim_1, I write in custom data

Code: Select all

 [smart_terrain]
cfg = scripts\zz_rodnik\smart\rod_sim_1.ltx
, create near him graph_point with location 1 = rod_sim_1. Next I create one animpoint, one path with 2 points, named this as rod_sim_1_sleep_1. I also create guard walkpath with name rod_sim_1_guard_1_walk and look path with name rod_sim_1_guard_1_look. What should I do next? What should be written in rod_sim_1.ltx file?

User avatar
Alundaio
S.T.A.L.K.E.R.
Posts: 1368
Joined: 26 May 2012, 22:26

Re: SDK COC :Questions,help and tips !

Postby Alundaio » 27 Oct 2016, 02:23

If the path names are correct then you don't need anything unless you want the smart terrain to act also as a respawner. Then you just add respawn params like other smart ltxes. Don't forget to add rod_sim_1 to simulation_object_props.ltx. If you want loner faction to target smart then here is example:

Code: Select all

[rod_sim_1]:default_base
sim_avail = true
stalker = 1


Or you can add other factions.


inherit from default_base if you only want stalkers to target the smart. Inherit from default_territory if you want mutants and stalkers to be able to target the smart or default_lair if you want only mutants to target the smart.
"I have a dream that one day this community will rise up and live out the true meaning of its creed: "We hold these truths to be self-evident; that all mods are created equal."

unknwn
Scavenger
Posts: 5
Joined: 27 Sep 2016, 18:53

Re: SDK COC :Questions,help and tips !

Postby unknwn » 27 Oct 2016, 21:25

Finally. It's works! Thank you, Alundaio.

One more question. How to create map for PDA? I can't find any lesson.

User avatar
Alundaio
S.T.A.L.K.E.R.
Posts: 1368
Joined: 26 May 2012, 22:26

Re: SDK COC :Questions,help and tips !

Postby Alundaio » 28 Oct 2016, 14:23

bound_rect values in gamedata\levels\map\level.ltx & global_rect values in gamedata\configs\game_maps_single.ltx.
It define position for ui_global_map and each map textures in the pda.

To make map screenshots I think you press F11 while in demo_record mode. I can't remember if you have to hold ctrl or shift to make high quality screenshots.
"I have a dream that one day this community will rise up and live out the true meaning of its creed: "We hold these truths to be self-evident; that all mods are created equal."

User avatar
olivius74
Loner
Posts: 469
Joined: 12 Apr 2014, 17:09

Re: SDK COC :Questions,help and tips !

Postby olivius74 » 03 Nov 2016, 13:59

New tutorial and pluggins necessaries to convert actor model.
Many thanks to Russian modders Romman and Ed_Rez :

Plug-ins from Charsi for MilkShape (MS3D), with automatic conversion models:

http://www.amk-team.ru/forum/user/16052-charsi/

https://yadi.sk/d/q04vZyXIgRA9U

http://stalkerin.gameru.net/wiki/index. ... 0%BD%D0%BE

User avatar
olivius74
Loner
Posts: 469
Joined: 12 Apr 2014, 17:09

Re: SDK COC :Questions,help and tips !

Postby olivius74 » 21 Nov 2016, 13:23

Hello Dear Friends

A little new question ,please :now I can see all the animations for an actor in SDK Actor Editor but
do you know if is it possible to view several animations in succession to make a small video?
Currently I see animations one by one, but is it possible to chain several ? Perhaps as a macro ...
How use Clip Maker?

I do not know if you can understand what I mean, this is not easy in other language!

Borovos,have you still a link to your video that you had done few years on the use of the SDK?

Best Regard

Swartz
Adventurer
Posts: 200
Joined: 27 May 2012, 08:37

Re: SDK COC :Questions,help and tips !

Postby Swartz » 16 Jan 2017, 11:52

Hi,
I've decided to recompile all the COC levels in the SDK after noticing on some levels there are some light/shadow errors. Not a big deal, just the light quality settings were lower than what GSC used.
So anyway I'm recompiling at high settings, but encountered two problems:
1) I tried recompiling the lighting for Zaton by modifying the level name pointer in xrLC2010_single.bat to zaton, but then it says the level isn't found. I'm going to assume the same might happen with jupiter and pripyat too.
2) When trying to change quality settings like pixel density in the level editor, the sdk has a stack overflow and crashes. Is this just because I'm on windows 10 instead of XP? I enabled compatibility mode but it didn't seem to help.

Kimikim
Scavenger
Posts: 13
Joined: 21 Jul 2016, 16:00

Re: SDK COC :Questions,help and tips !

Postby Kimikim » 23 Feb 2017, 16:49

Making my own implementation of offline alife combat, and I have a few questions...
  • If I want to define my own map spots (configs/ui/map_spots.xml), do I have to edit map_spots.xml or can I somehow make an XML that will be picked up automatically, without editing existing files?
  • What is the proper way to freeze a squad? Looking at sim_squad_scripted.script, it seems to be by assigning the squad's own ID to 'self.scripted_target'.
  • Is it possible to make a squad chase another squad? Similarly to the previous question, there seems to be methods in place that imply a squad to be targeted by another squad, but from what I can tell in the target finding methods, a squad's target is considered invalid if it is not a SMART or itself.
  • Should I pause processing for daytime-only mutants during nighttime? It seems that daytime-only mutants are blocked from going online while it's night, but not removed. I didn't look deeply into it yet.
  • What is the proper way to measure in-game time at sub-second levels? Is it demanding of PC resources? Is there an accurate alternative which is lighter on the system?
  • Is it sufficient to identify squads containing story NPCs by checking if a squad has a story ID? My script currently uses that method but seems to be picking up story NPCs (I think, they have ranks going as low as 20-60) mixed in with non-story ones in the same squad.
  • After what callback is it safe to assume that squads have been populated? And assigned SMARTs and gulag jobs?
  • Similarly, at what callback is it safe to assume the player has started controlling the actor?
For the last two, I guess I could make functions bound to update-callbacks and do consecutive checks there, but there are better options, right?

User avatar
Alundaio
S.T.A.L.K.E.R.
Posts: 1368
Joined: 26 May 2012, 22:26

Re: SDK COC :Questions,help and tips !

Postby Alundaio » 23 Feb 2017, 18:04

Kimikim wrote:Making my own implementation of offline alife combat, and I have a few questions...
  • If I want to define my own map spots (configs/ui/map_spots.xml), do I have to edit map_spots.xml or can I somehow make an XML that will be picked up automatically, without editing existing files?
  • What is the proper way to freeze a squad? Looking at sim_squad_scripted.script, it seems to be by assigning the squad's own ID to 'self.scripted_target'.
  • Is it possible to make a squad chase another squad? Similarly to the previous question, there seems to be methods in place that imply a squad to be targeted by another squad, but from what I can tell in the target finding methods, a squad's target is considered invalid if it is not a SMART or itself.
  • Should I pause processing for daytime-only mutants during nighttime? It seems that daytime-only mutants are blocked from going online while it's night, but not removed. I didn't look deeply into it yet.
  • What is the proper way to measure in-game time at sub-second levels? Is it demanding of PC resources? Is there an accurate alternative which is lighter on the system?
  • Is it sufficient to identify squads containing story NPCs by checking if a squad has a story ID? My script currently uses that method but seems to be picking up story NPCs (I think, they have ranks going as low as 20-60) mixed in with non-story ones in the same squad.
  • After what callback is it safe to assume that squads have been populated? And assigned SMARTs and gulag jobs?
  • Similarly, at what callback is it safe to assume the player has started controlling the actor?
For the last two, I guess I could make functions bound to update-callbacks and do consecutive checks there, but there are better options, right?


You'll need to edit map_spots.xml

[*]What is the proper way to freeze a squad? Looking at sim_squad_scripted.script, it seems to be by assigning the squad's own ID to 'self.scripted_target'.

For what purpose?

[*]Is it possible to make a squad chase another squad? Similarly to the previous question, there seems to be methods in place that imply a squad to be targeted by another squad, but from what I can tell in the target finding methods, a squad's target is considered invalid if it is not a SMART or itself.
It was a feature of CoP for squads to target other squads. gulag system was largely rewritten and excludes it because it's not a good idea. For CoP, yes maybe, but in CoC it caused large 'cluster-fucks' of enemies spawning on top of eachother. But all you need to do is set squad as assigned target id and change simulation_objects.script to not return 0 for priority if target is squad.

[*]What is the proper way to measure in-game time at sub-second levels? Is it demanding of PC resources? Is there an accurate alternative which is lighter on the system?
time_global() returns time in milliseconds since the device started.
CTime is the actual in-game date, which is returned by game.get_game_time(). To compare two dates, and retrieve how many seconds passed since the previous date, you use game.get_game_time():diffSec(previous_time)

[*]Is it sufficient to identify squads containing story NPCs by checking if a squad has a story ID?

Yes, unless mistakenly a squad section wasn't given a story id, but all CoC should. What you describe though, doesn't make sense to me. Very few story squads would have non-story npcs unless it's like the merc bunker guard squad or the 10-member Csky base squad.
[*]Similarly, at what callback is it safe to assume the player has started controlling the actor?

on_game_load, which is actor net spawn.

[*]After what callback is it safe to assume that squads have been populated? And assigned SMARTs and gulag jobs?

A squad should be populated with members the moment it is created. I will be adding the callbacks you requested in the other thread about when squad is assigned smart or leaving smart.
"I have a dream that one day this community will rise up and live out the true meaning of its creed: "We hold these truths to be self-evident; that all mods are created equal."

Kimikim
Scavenger
Posts: 13
Joined: 21 Jul 2016, 16:00

Re: SDK COC :Questions,help and tips !

Postby Kimikim » 23 Feb 2017, 19:14

Thank you very much, you're really helpful. It's so rare to see someone so actively modding/developing a project (and I've never seen any single person make such an impression on a modding community as you have, even though I'm not really part of the STALKER community and I understand others make large parts of CoC and OpenXray) who still takes/has the time to consider suggestions or even answer questions.

Alundaio wrote:
Kimikim wrote:[*]What is the proper way to freeze a squad? Looking at sim_squad_scripted.script, it seems to be by assigning the squad's own ID to 'self.scripted_target'.

For what purpose?
I want two squads that have engaged each other in combat to stop moving until the battle is over. I might implement retreating later, but that should be more or less as simple as setting a new SMART target. But getting them to stop moving in the middle of trying to reach a target? I'm not sure what the proper way to do that is. Looking at the ".__lock"-variable you mentioned in the other thread, setting it to true should help at least in the case of simply freezing them, but I'm not sure in what manner the engine moves offline alife around so I'd like confirmation.

Alundaio wrote:
Kimikim wrote:[*]Is it possible to make a squad chase another squad? [...].
It was a feature of CoP for squads to target other squads. [...]. But all you need to do is set squad as assigned target id and change simulation_objects.script to not return 0 for priority if target is squad.
I suppose this is an answer to the above question, though I was hoping to do it without modding existing files. It'll probably be useful being able to make squads move directly towards other squads though so I'll probably do it anyway. Also, looking through 'simulation_objects.script' there seems to be "native", but disabled, functionality for squads to automatically/randomly choose to target other squads, when looking for a new target? Am I wrong?

[*]Is it sufficient to identify squads containing story NPCs by checking if a squad has a story ID?

Yes, unless mistakenly a squad section wasn't given a story id, but all CoC should. What you describe though, doesn't make sense to me. Very few story squads would have non-story npcs unless it's like the merc bunker guard squad or the 10-member Csky base squad.
The NPCs I saw were just a couple of bandits and loners with names that stood out and rank-values that didn't make sense to me. For debugging I mark squads on the map with information about the squads in the map-spot hints, and the squads in questions were nearby/inside large bandit- and loner-bases at new game starts, though they shouldn't have shown up at all due to my script excluding squads with story IDs. I don't have a lot of time to spend on this so I didn't check closely if they were consistent between new games; probably I shouldn't have brought it up, sorry.
[*]Similarly, at what callback is it safe to assume the player has started controlling the actor?

on_game_load, which is actor net spawn.
[*]After what callback is it safe to assume that squads have been populated? And assigned SMARTs and gulag jobs?

A squad should be populated with members the moment it is created. I will be adding the callbacks you requested in the other thread about when squad is assigned smart or leaving smart.
Then in which cases are "squad_on_npc_creation" and "squad_on_add_npc" called? And in relation to "on_game_load", when is "actor_on_first_update", "actor_on_load", "actor_on_init", "actor_on_reinit" and "se_actor_on_register" called? As for the populating of squads, from what I remember, I once saw a squad spawning function in a script where NPCs were spawned one-by-one in a loop. I thought it was in alun_utils but I can't find it now, and it was probably in MISERY.

Sorry for asking so many questions; I want to do a lot with STALKER but I have very vague understanding of its internal workings. I know about offline/server-side and online objects and such though; I've scripted a lot for Garry'smod (nothing released though, mostly trying to emulate the alife of STALKER actually...), and the Source engine runs in separate server/client instances as well, even in singleplayer. It seems most "good" game engines do, and XRay although built for a somewhat specialized type of game seems really well-designed and versatile. It's a bit exciting seeing what will/has come of an open version of it. Anyway, thanks for any answers and feel free to not answer them all, I'll understand :P

User avatar
Alundaio
S.T.A.L.K.E.R.
Posts: 1368
Joined: 26 May 2012, 22:26

Re: SDK COC :Questions,help and tips !

Postby Alundaio » 23 Feb 2017, 19:47

Yeah the engine will move the squad to target while offline, so you may need to set target to the other squad they are in combat with or themselves.

It might be hard to get away without modding the original scripts for changes like this, but possible.

Yeah, returning 0 for prior will exclude that potential target, either squad, smart or actor, from being selectable.

se_actor_on_register
actor_on_init
actor_on_reinit
actor_on_load
on_game_load
actor_on_first_update

Stalker was made for multiplayer, so think of singleplayer as client and server at the same time. Server Entities exist always, and client objects (aka level objects, game objects, etc.) exist only under certain circumstances and only on the current level. Most objects will only come 'online' when actor within switch distance but some objects like anomaly zones, space restrictors and stalker corpses, are marked always online. And some server entities don't even have level objects, like squads.

Game object save/load data only when they are online, it's lost if they go offline. Server entities always saves their data, but they don't store the same data that game objects do, so somethings are lost. Which is why there is bug in CoC with item usages resetting when you leave the level. It's not fixed because changing the save packet for items would be a huge headache.

Xray gets a lot of shit but it' is a pretty good engine despite it's flaws.
"I have a dream that one day this community will rise up and live out the true meaning of its creed: "We hold these truths to be self-evident; that all mods are created equal."

Kimikim
Scavenger
Posts: 13
Joined: 21 Jul 2016, 16:00

Re: SDK COC :Questions,help and tips !

Postby Kimikim » 24 Feb 2017, 08:09

To set a squad target:

Code: Select all

squad.__lock = true            -- 'squad:generic_update' is skipped; Otherwise it would fetch a new target due to current one being invalid.
squad.scripted_target = target_squad.id   -- 'squad:get_script_target' returns nil because scripted_target is not "actor" nor the name of a SMART.
If 'squad.scripted_target' was non-nil, I can store it (and/or squad.assigned_target_id) until I want the squad to continue on their way. The target squad's ID doesn't need to be in that variable either, as long it has a value that causes get_script_target to return nil.

Then, in the callback "squad_on_update":

Code: Select all

function squad_on_update(squad)
   squad:specific_update(squad.scripted_target)   -- Because 'squad:get_script_target' returns nil, 'squad:specific_update' is also skipped. Calling it manually solves that. 'squad.assigned_target_id' is also set to the argument given to 'squad:specific_update' inside the same method.
end
... as well as exclusion of non-valid squads, the simulation of combat and killing of squad members etc.

sim_squad_scripted:am_i_reached(squad) seems to return true when the targeted squad ("self" inside the method) has been defeated, and sim_squad_scripted:specific_update seems to do little of effect until that happens. What happens afterwards might need adjusting though, which can be added to the callback after calling specific_update.

Does that sound OK? Assuming I don't want squads to target squads on their own initiative.

EDIT: To clarify, I'm not clear on what exactly causes the motion of a squad. Is it squad.assigned_target_id? Is it the object that the ":am_i_reached"-method is called on with the squad approaching it as argument?

User avatar
Alundaio
S.T.A.L.K.E.R.
Posts: 1368
Joined: 26 May 2012, 22:26

Re: SDK COC :Questions,help and tips !

Postby Alundaio » 24 Feb 2017, 16:02

what actually causes the motion is sim_squad_scripted:get_current_task(). It is called from engine.

EDIT: The original CoP squad am i reach returned true only when target was dead, so that squads would follow eachother till the end of time or if they were switched online and killed eachother, since offline combat was never implemented.
"I have a dream that one day this community will rise up and live out the true meaning of its creed: "We hold these truths to be self-evident; that all mods are created equal."

Kimikim
Scavenger
Posts: 13
Joined: 21 Jul 2016, 16:00

Re: SDK COC :Questions,help and tips !

Postby Kimikim » 25 Feb 2017, 07:18

Alundaio wrote:what actually causes the motion is sim_squad_scripted:get_current_task(). It is called from engine.

EDIT: The original CoP squad am i reach returned true only when target was dead, so that squads would follow eachother till the end of time or if they were switched online and killed eachother, since offline combat was never implemented.


Interesting. My (untested) method now is:

Code: Select all

local interrupted_target_id, interrupted_scripted_target, interrupted_lock = {}, {}, {}
function freeze_squad(squad)
   local squad_id = squad.id
   interrupted_target_id[squad_id] = squad.assigned_target_id
   interrupted_scripted_target[squad_id] = squad.scripted_target
   interrupted_lock[squad_id] = squad.__lock
   
   squad.assigned_target_id = squad_id                     -- Sets target used by ":get_alife_task"
   squad.scripted_target = squad.scripted_target .. " (offline combat)"   -- Prevents above target to be overridden by scripted target in ":get_script_target", but remains human readable.
   squad.__lock = true                              -- Prevents assigned_target_id to be overridden by default targeting behavior.
end

function chase_squad(squad, target_squad)
   freeze_squad(squad)
   squad.assigned_target_id = target_squad.id
end

function uninterrupt_squad(squad)
   local squad_id = squad.id
   squad.assigned_target_id = interrupted_squad_id[squad_id]
   squad.scripted_target = interrupted_scripted_target[squad_id]
   squad.__lock = interrupted_lock[squad_id]
   
   interrupted_squad_id[squad_id] = nil
   interrupted_scripted_target[squad_id] = nil
   interruted_lock[squad_id] = nil
end


I also noticed just now, regarding the function I mentioned earlier where a squad is spawned: I found it in "sim_board.script", but on closer inspection I had misunderstood the way it worked - A squad is spawned fully populated, and then a loop goes through each member running ":setup_squad_and_group" on them and calling the "squad_on_npc_creation"-callback.

Another question: There is a function called "change_team_squad_group" (it calls ":change_team" on online objects or changes the variables ".team", ".squad" and ".group" of offline ones). Will this ACTUALLY allow me to change the faction of NPCs during runtime?
An old (untested) script I made makes use of the function. A squad belonging to the new faction would be spawned, using a section name which is the new faction's counterpart of the converting squad's section name, the old NPCs would replace those that were spawned in the new squad, re-adjusting relations. They would have to change outfits though which I hadn't implemented at the time, and I didn't look into what changes would need to be made to their logic (I didn't even look into how that works yet).

User avatar
olivius74
Loner
Posts: 469
Joined: 12 Apr 2014, 17:09

Re: SDK COC :Questions,help and tips !

Postby olivius74 » 20 Nov 2017, 11:59

ImageImageImage
Alleluia!!
I can't believe my eyes !
Since all these years,I finally managed to create my First Horrible Level in SDK CoC!

I 'm so happy because it's the first time I can validate all these :twisted: steps :lol:
Validate scene,Build ,Make AI Map,game,details
Compile...
But finally...Test in game!

Now ,I finally know how to proceed all steps Image

I would like to thank you so much Dear Bangalore for all advices you always tell us,since all these years ,start in GsC forum four years ago,on
MP map DUGA...
Thank you so much for your patience,your extraordinary last SDK Builds.
Without that ,I really think I never manage to use correctly all the converters ,files xrAI,xrLC...
Thanks be made to you my Dear Friend

I think also to my great friends Borovos,2C,they do so many fabulous creation!Your video borovos help me a lot.

I am ashamed to put screens about my first try, but I'm so happy to walk on this first map!
https://imgur.com/a/Vf749

So many thing to learn now...
And the first I will search on how can I make a little pond...https://imgur.com/a/Iigyd
I remember a little level with an island...

But now improve that try 2
https://imgur.com/a/xz5tF
https://imgur.com/a/BD4TK

Borovos
Adventurer
Posts: 285
Joined: 06 Jan 2014, 13:36

Re: SDK COC :Questions,help and tips !

Postby Borovos » 23 Nov 2017, 13:41

Toutes mes félicitations l'ami! :D
Quel est ton choix? Quel est ton but? Mettre des droites ou jouer de la flûte?

User avatar
olivius74
Loner
Posts: 469
Joined: 12 Apr 2014, 17:09

Re: SDK COC :Questions,help and tips !

Postby olivius74 » 24 Nov 2017, 10:43

Ah merci beaucoup Cher Borovos!
Je suis tellement content ,depuis si longtemps je voulais arriver à passer toutes ces étapes :D

Ah, thank you very much Dear Borovos!
I'm so happy, for so long I wanted to get through all these stages.
It's good to read again all your advice and those of Bangalore that I finally arrived there.
The way was long, but once done yes, it seems not so terrible.
But the number of tools that one must have and well configured is pretty crazy.

Now, I would just like to spawn on your fantastic Vehicle Graveyard map.
So I open the level,perfect, I see all ,fabulous!
I choose spawn element and I add some ...jokes outfit weapon,vehicle one more :).
Then I Make Game,save the scene, leave the SDK.
I validate the spawn with @start bin\designer\release\xrAI.exe -no_separator_check -s k02_trucks_cemetery -out all
Impeccable!
I get the .spawn file and rename it to all.spawn.
I put it (by renaming the old one) in my CoC game.
But crash :

FATAL ERROR

[error]Expression : cross_table().header().level_guid() == level_graph().header().guid()
[error]Function : CAI_Space::load
[error]File : D:\prog_repository\sources\trunk\xrGame\ai_space.cpp
[error]Line : 113
[error]Description : cross_table doesn't correspond to the AI-map


stack trace:

Yet,I did not touch the AIMap...??

Is my procedure correct ?Perhaps I forget a step at first ?
Huge level,but I'm sad because I dreamed to spawn with the sdk on your incredible map...Not yet...

I will try the manip on a more little level,

Borovos
Adventurer
Posts: 285
Joined: 06 Jan 2014, 13:36

Re: SDK COC :Questions,help and tips !

Postby Borovos » 24 Nov 2017, 12:45

This is probably related to game_graph.ltx or a incompatibility between the aimap grid and the spawn.

If you want to put it in CoC, you have to compile the all.spawn with all levels in it. Without it, you have to edit few files.
Quel est ton choix? Quel est ton but? Mettre des droites ou jouer de la flûte?

User avatar
olivius74
Loner
Posts: 469
Joined: 12 Apr 2014, 17:09

Re: SDK COC :Questions,help and tips !

Postby olivius74 » 24 Nov 2017, 15:00

Thank a lot !
to put it in CoC, you have to compile the all.spawn with all levels in it

I will try that,as I edit my .bat,I thought I need to write this specific command.

Else,can you tell me wich files I need to edit ,please Dear Borovos ?(When you have time of course)

Good evening,thank a lot your precisions ...As usual :)

User avatar
Bangalore
Explorer
Posts: 640
Joined: 09 Jun 2012, 19:02
Contact:

Re: SDK COC :Questions,help and tips !

Postby Bangalore » 25 Nov 2017, 03:35

olivius74 wrote:FATAL ERROR

[error]Expression : cross_table().header().level_guid() == level_graph().header().guid()
[error]Function : CAI_Space::load
[error]File : D:\prog_repository\sources\trunk\xrGame\ai_space.cpp
[error]Line : 113
[error]Description : cross_table doesn't correspond to the AI-map


stack trace:

Yet,I did not touch the AIMap...??

Is my procedure correct ?Perhaps I forget a step at first ?
Huge level,but I'm sad because I dreamed to spawn with the sdk on your incredible map...Not yet...

I will try the manip on a more little level,


Your game gamedata misses a map's level.ai file. The all.spawn was compiled with different SDK gamedata\map\ level.ai.
"Some sort of pressure must exist; the artist exists because the world is not perfect. Art would be useless if the world were perfect, as man wouldn’t look for harmony but would simply live in it. Art is born out of an ill-designed world."


Return to “General Discussion”

Who is online

Users browsing this forum: No registered users and 1 guest

cron