Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Dualnames

#1
Advanced Technical Forum / Windows 11
Wed 30/08/2023 11:30:17
So, I've upgrade all AGS games of Wadjet Eye Games to 3.6

We were contacted by a person having an issue.

"Whenever I open them the screen has green stripes all over it. It's nearly impossible to see anything else.  Microsoft Windows Version 22H2 (Microsoft Windows 11 Home)"



Any thoughts?
#2
AGS AWARDS CEREMONY CLIENT 2022


There are versions for Mac and Linux, but they are wildly untested. But should work!

#3
So, I'm trying Strangeland with 3.6, everything seems to work fine and perfectly, except on Linux and MacOS, it crashes whenever this function runs:

Code: AGS
bigSave=DynamicSprite.CreateFromFile(String.Format("$SAVEGAMEDIR$/saveHD%d.bmp",getSlot));

Well, it doesn't crash there per se, it crashes after it, if you try to access bigSave or whichever dynamic sprite you assigned with CreateFromFile. So to summarize, only on LINUX AND ON MACOS, if you do "CreateFromFile" with a Dynamic Sprite and then try to access it, it goes kablooie.

(And yes the file in question exists. It returns a null pointer. I'm wondering if this an omission on my end and the pathing needs to be written differently depending on OS?)
#4
So, a user has bought The Excavation of Hob's Barrow (The game is compiled with 3.5.0.26) and their mouse is not initialized, any thoughts on why? Any thoughts on how to fix that?

https://steamcommunity.com/app/1182310/discussions/0/3367027831290388972/?tscn=1664630707
#5
Hello, everyone! THE TIME IS UPON US! :shocked:

On April 9th 20:00 BST the actual ceremony is happening.

As per usual, there is an AGS client to connect to the virtual ceremony.



- AGS Awards Ceremony Client: v7.0.3

- Downloads:
Windows (.zip) â€" 454 MB
Linux (.zip) â€" 472 MB
MacOS (.zip) â€" 457 MB

If you want to try it out in advance, you are welcome to join prior to the ceremony. If you have a previous version of the client, you'll be unable to join in, please download this one.




Windows: Run the AGS Awards 2021.exe
Linux: I believe either running ags64/ags32 or startgame will start the client.
MAC: The app is codesigned, I believe either running AGSAwards.app/Contents/MacOS/AGS or simply running the app, will start the client.




If you are planning on streaming, make sure you go to settings and select streamer mode.

#6

Wormwood Studios & Wadjet Eye Games
proudly present:
STRANGELAND





Welcome to Strangeland:

You awake in a nightmarish carnival and watch a golden-haired woman hurl herself down a bottomless well for your sake. You seek clues and help from jeering ravens, an eyeless scribe, a living furnace, a mismade mermaid, and many more who dwell within the park. All the while, a shadow shrieks from atop a towering roller-coaster, and you know that until you destroy this Dark Thing, the woman will keep jumping, falling, and dying, over and over again...

Strangeland is a classic point-and-click adventure that integrates a compelling narrative with engaging puzzles. For almost a decade, we've been working on a worthy successor to the fan-acclaimed Primordia, and we are proud, at long last, to share our second game.

Strangeland is a place like no other. Even in the real world, carnivals occupy a twilight territory between the fantastic and the mundane, the alien and the familiar. In their funhouse mirrors, their freaks, and their frauds, we see hideous and haunting reflections of ourselves, and we witness the wonder and horror of humanity in just a few frayed tents, peeling circus wagons, dingy booths, and run-down rides. Strangeland, of course, is most definitely not the real world. Indeed, figuring out where—and who—you are is one of the game's many mysteries.

As you explore Strangeland, you will need to gather otherworldly tools and win strange allies to overcome a daunting array of obstacles. Forge a blade from iron stolen from the jaws of a ravenous hound and hone it with wrath and grief; charm the eye out of a ten-legged teratoma; and ride a giant cicada to the edge of oblivion.... Amidst such madness, death itself has no grip on you, and you will wield that slippery immortality to gain an edge over your foes.

Navigating this domain of monsters and metaphors will require understanding its denizens and its enigmas. Unlike many adventure games that offer a linear experience and single-solution puzzles, Strangeland lets you pick your own way, your own approach, and your own meaning—one player might win a carnival game with sharpshooting, another by electrical engineering; one player might unravel a strange prophet's wordplay while another gathers visual clues scattered throughout the environment. Ultimately, Strangeland's story will be your story. You are not the audience; you are the player.

This has been a tremendous journey for me, personally, both in terms of growth but also mentally, I cannot explain how proud I am for this game, at least not with my own words. Everyone that has worked for Strangeland has given it their all, can only hope the result justifies our efforts!








Features:
  • A brand new adventure from the makers of Primordia!
  • Approximately five hours of gameplay, replayable thanks to different choices, different puzzle solutions, and different endings
  • Dozens of rooms to explore, with variant versions as the carnival grows ever more twisted
  • An eccentric cast, including a sideshow freak, a telepathic starfish, an animatronic fortune-teller, and a trio of masqueraders
  • Full, professional voice over and hours of original music
  • A rich, thematic story about identity, loss, self-doubt, and redemption
  • Integrated, in-character hint system (optional, of course)
  • Hours of developer commentary and an "annotation mode" (providing on-screen explanations for the references woven throughout the game)




Written by: Mark Yohalem
Artwork & Music by: Victor Pflug
Voicework by: Dave Gilbert
VA: Abe Goldfarb, Steven Kelly, Miranda Gauvin, Mike Ciporkin, Mike Pollock, Elsie Lovelock, Lucas Schuneman, Tom Schalk, Patrick Langer, Maya Murphy, Abby Wahl, Brittany Lauda, Dara Seitzman, Ivy Dupler, Alice Yohalem, Dave Gilbert
Extra Stranger Animations by: Daniel Miller
Coding & Visual Effects & Additional Music by: James Spanos




BUY:




Various Links:





Screenshots:


#7


This is the MAC version of Primordia currently on GOG, I'm wondering, do the numbers refer to a specific point, aka can we by these numbers understand why/where it crashes?
#8
Hello, everyone, I hope you're all having a good day!!

If you're on Windows and own a controller (preferably an XBOX360 kind of controller), we've been working on a control scheme for our upcoming game, Strangeland.
I have set up helpful overlays for it, but try out your buttons see what they do, tell me how intuitive it is.

Be aware that Strangeland is a two button point and click adventure game (Left mouse button Interacts, Right mouse button Examines).
The password for the rar archive is: slscontroller
and the file can be downloaded here: Download

For those not interested in looking things themselves:

  • A is interact/use item
  • B is examine/deselect item
  • Y is open inventory
  • A/B skips text
  • LB AND RB cycle through inventory items
  • X closes inventory and dialog too( dialog can be closed with B as well and inventory can be closed with BACK and Y as alternatives.)
  • Left Analog Stick either moves the character or through choices on a dialog or inventory
  • Right Analog Stick shows all the hotspots, and the cursor will snap to the closest hotspot if it's not over anything. It can also be used to cycle through choices.
  • Dpad works like Left Analog Stick
  • X on an EXIT hotspot will.

Will gladly accept any sort of feedback!
#9
So, I'm using camera movement based on the character's position, to maintain the smoothness of the camera, if the MovementLinkedToAnimation is set to true, then for my walking speed which is 2 for both axis, the animation speed of the player character has to be 0. I'm wondering, how should the player character be animated for 0 delay between frames aka each frame lasts 1 loop to ensure non-gliding or not garbage animation?

I hope I'm making sense.
#10
1. Prologue:

So, what this module basically does is it perfectly replicates your screen MINUS the UIS and the mouse and other overlays. This can be used essentially for capturing screenshots. And essentially for BOX BLUR.
And it's faster and better than the module that already exists. I can do a boxblur of 3 iterations with zero framedrop. Most of the code is based on Steve's wonderful idea almost a decade ago with the FakeScreen, so this is essentially an up from that. The code is open sourced, for those that want to improve it and such.



2. Instructions/Going through the functions

1. Import the module in your project (AGS Fake Screen.scm)
2. Import and enable the plugin (AGSFakeScreen.dll)

AGS Fake Screen Functions


  • int FakeScreenUpdate();

    This returns a graphic sprite number where everything is drawn to as a replica of the screen.

Code: AGS


function TakeScreenShot()
{  
  int getGraphic=FakeScreenUpdate(); 
  DynamicSprite*screenshot=DynamicSprite.CreateFromExistingSprite(getGraphic,false);
  int setSlot=5;
  screenshot.SaveToFile(String.Format("$SAVEGAMEDIR$/%d.bmp",setSlot));
}
//this will draw a replica of the screen and save it 



DrawBoxBlur(int sprite, int radius)

This takes a sprite as a parameter, in this example case it will take the sprite that we'll be using to BoxBlur our entire screen, but it can blur any sprite. Radius defines how many times BoxBlur will be applied. Ranges from 1-however many u like/your pc can support

Code: AGS

Overlay*screenlay;

function repeatedly_execute_always()
{  
  int getgraph = FakeScreenUpdate();
  DrawBoxBlur(getgraph, 3);  
  screenlay=Overlay.CreateGraphical(0, 0, getgraph, true);
}
//this will box blur with 3 iterations your entire screen every frame.





3. Download links

AGSFAKESCREEN.dll
AGSFakeScreen.scm

*ZIP file containing both*

4. Source

The source files can be found on GITHUB



Box Blur 3 iterations
#11
Advanced Technical Forum / SKEW Code (Solved)
Fri 07/06/2019 03:38:39
https://www.google.com/url?q=https://stackoverflow.com/questions/50149907/imagemagick-skew-image-with-4-x-y-coordinates&sa=D&source=hangouts&ust=1559960173965000&usg=AFQjCNG9LfZr89A8zYRZwyZRw3YNPByfPw


I'm trying to do a simple skew, where u take an image adjust its 4 points and the image gets skewed accordingly. Unfortunately, I've been unable to get an algorithm i can work with, anybody have any ideas?
#12
1. Prologue:

I know that Wyz is an incredibly busy man, and has barely managed to maintain the source of the AGS Joystick Plugin, given that, and given that I'm also implementing a version of it with SDL, it seems fitting to disengage the two things between them. A majority of the code has been written/based off code by eri0o and Wyz, so kudos go to them! The inclusion of the SDL library allows for two important things:
1) XInput recognition
2) Cross-platform

2. Instructions/Going through the functions

The only thing u have to do, is make sure u put SDL2.dll inside ur debug and compiled folders, otherwise you'll get error messages. The dll will be provided below.

int ControllerCount ()

This returns the number of gamecontrollers found, from 0 to N controllers.





Controller Properties & Functions

The plugin uses a custom typedef which is 'Controller'. Controller is self-explanatory, and has a couple of functions and attributes.


  • int ID

    Returns the ID of the controller.

  • int ButtonCount

    Returns the number of buttons on the controller.

  • int AxesCount

    Returns the number of Axis on the controller.

  • Open (int ID);

    Opens specified controller. (0-15)

    A good practice to do is put this on room_load, or game_start
Code: AGS

Controller*gamepad;
function game_start()
{  
  gamepad = Controller.Open(0);
}



  • void Close ();

    Closes the controller, probably not really needed to be honest.

  • bool Plugged ();

    Returns if the controller is currently plugged or not (true / false)

  • String GetName ();

    This returns a string containing the name of the gamecontroller. Will return "" on error.

  • int GetAxis (int axis);

    Returns axis by number -32768 to 32768

Code: AGS

if (gamepad.GetAxis(0) < -200)
{
//LEFT
}
else if (gamepad.GetAxis(0) > 200)
{
//RIGHT
}


  • int GetPOV();

    Returns POV value. (0-8)

Code: AGS

if (gamepad.GetPOV() == ePOVUp)
{
    cEgo.y--;
}


  • bool IsButtonDown (int button);

    Returns true when the specified button is currently down. (0-31)

Code: AGS

int i=0;
String app="";
while (i < gamepad.ButtonCount+2)
{
  app = app.Append(String.Format("button %d is %d[",i, gamepad.IsButtonDown(i)));
  i++;
}
cEgo.SayBackground(app);
//this will parse all the buttons' states and print them on the screen.


  • bool IsButtonDownOnce(int button);

    Returns true when the specified button is currently down (single press). (0-31)

Code: AGS

if (gamepad.IsButtonDownOnce(11))
    {
       //click on UI
    }


  • void Rumble(int left,int right,int duration);

    Rumbles the Controller for Duration (in loops). Left and right are motors. Values go from 0 to 65535

Code: AGS

if (gamepad.IsButtonDownOnce(11))
    {
      gamepad.Rumble(65535, 65535, 40);     
    }


v1.1

-Added two new functions

  • void BatteryStatus();

    Returns the status of the controller battery. (-1 - 5) UNKNOWN = -1, LESS THAN 5% = 0, LESS THAN 20% = 1, LESS THAN 70% = 2, 100% = 3, WIRED = 4, MAX = 5

Code: AGS

lblstatus.Text=String.Format("BATTERY STATUS: %d",gamepad.BatteryStatus());


  • int PressAnyKey();

    Returns the first button the player hits on the controller, otherwise returns -1. (0-31)

Code: AGS

while (gamepad.PressAnyKey()==-1)
    {
      Wait(1);
    }
    player.Say("Button pressed is button %d",gamepad.PressAnyKey());





3. Download links

AGSController.dll
SDL2.dll

*ZIP file containing both*

4. Source

The source files can be found on GITHUB
#13
Beginners' Technical Questions / Custom Event
Tue 02/04/2019 02:56:10
I'm trying to remember how this works, I remember vividly a module that had like 2 extra custom events appended to the on_event function.
Sorry for the creating of many topics lately <3

It's important that I'd have that, cause it would help me avoid 'working around' which means a lot of effort and code.
#14
So I have this code in my plugin:

Code: ags

const char*GameDatavalue[40000];

void SaveVariable(const char*value,int id)
{
	GameDatavalue[id]=value;
}

const char* ReadVariable(int id)
{
	if (GameDatavalue[id]==NULL)
	{
		return engine->CreateScriptString("");
	}
	else 
	{
		return engine->CreateScriptString(GameDatavalue[id]);
	}
}


Unfortunately a lot of the times when I'm calling ReadVariable in a simple way, like tryin to read the value, I get weird returns like symbols @ __ and definitely a wrong string. This time I triple checked, and I'm confident the issue lies on the plugin side of things, pasted above. Any thoughts why it faulters?
#15
Code: ags
File*output = File.Open("$SAVEGAMEDIR$/den.dat",eFileWrite);
  int i=25100;
  while (i < 30000)
  {
    if (ReadVariable(i)==null) output.WriteString("");
    else 
    {
      Display("Writing %s",ReadVariable(i));
      output.WriteString(ReadVariable(i));//WriteRawLine(i);
    }
    i++;
  }
  output.Close();


This seems to write the values properly. My ReadVariable goes to an array that stores the text of dialogs
So, when the writing code executes the values in that display function are proper and perfect.


This is the reading part

Code: ags

File*output = File.Open("$SAVEGAMEDIR$/den.dat",eFileRead);
  
  int i=25100;
  if (output!= null)
  {
    while (i<30000) 
    {
      Display(output.ReadStringBack());
      SaveVariable(output.ReadStringBack(), i);
      i++;
    }
    output.Close();
  }


This should return "Dialog 1 00100" then "Dialog 2 010010"  and so on whereas the 0 and 1 are the state of the options.
What it does is it skips intermissioned Dialogs like instead of going 1,2,3,4,5,6,7,8,9 it goes 1,3,5,7,9, I have no clue as to why.

Even when I replace the readvariables and just write the i counters, it writes 25100,25101,25102 etc till 25109 and read 25100,25102,25104
HELP ME
#16
Alright, so as the typical AGS developer I have started on 'creating' my own save game system (the reasons behind this is the data I'm currently saving is way too big, and due to me precaching views and stuff my savegames are bloated to 120mb each. While that is no issue, the issue lies that I wanna make an autosave system and whenever I save due to the amount of data being saved, on autosave this slows downs the game to a significant degree. I'm of course open to ideas. Anyhow, so this is specific to my project so, yeah.

This is my plan.


-save game.doonceonlys states
-save dialog states
-save inventory items
-save player position x y
-save player room
-save states of rooms
-save local room variables
-save global variables
-save script variables

-Functions
-RainFX
-Visions
-Parallax
-BackgroundSpeech
-IconbarHandle
-UiHandling
-Payphone
-TarrotCards
-DialogArray
-DeadNPC
-Globalscript

-save UIs clickable/visible/position



For now I've gathered in all these scripts all the variables that I need to save (so then it will be loaded).
If this is the variables I want saved:

Code: ags

int store_mx=-1;
int store_my=-1;
bool StarfishAnimation=false;
bool StarfisherPrice=false;
int cPrompt=0;
String PromptOrder;
AudioClip*Hold;
struct Hint
{
  bool Given; 
  int wasgiven;
  bool Active;
};
Hint Hints[39];



What would be an easy way to set up a system to export and import them safely?
#17
So I've been reading about IAGSFontRenderer and it looks wonderful and perfect for what I wanna do.
I know how to get the part of what I wanna do (add an extra outline and a gradient effect) done, but my issue lies that I'm not able to make a plugin to work
Is there some sort of easy example,where I can replace the font renderer for font 1 let's say and use the RenderText() function so that I can 'edit' that bitmap?

I've tried looking at the agspritefont code, but there's parts of it that I'm not sure I get or need. So if anyone knows of a simple script to get me rolling that'd be nice.
Like a script that turns all the instances of a certain font to red, that'd be very useful and I could move on from there.
#18
Is there a way I can rotate a dynamic sprite from it's bottom part around a specific coordinate? Example like a clock.
#19
I want to access this specific code inside a plugin code

Character.GetAtScreenXY(xx, yy)==cEgo

I've looked it up and I'm clueless on how to do that
#20
Code: AGS

void AGS_EngineInitGfx(const char *driverID, void *data)
{
	
}

D3DPRESENT_PARAMETERS dsp;
IDirect3DDevice9*d3ddev9;
IDirect3DSurface9*_surface;

void DirectDraw(int data)
{
	//run a check to disable it from DIRECTDRAW
  //= (IDirect3DDevice9 *)data;

d3ddev9=NULL;
d3ddev9 = (IDirect3DDevice9 *)data;
d3ddev9->GetRenderTarget(0, &_surface);
d3ddev9->BeginScene();


D3DLOCKED_RECT lockedRect;
_surface->LockRect(&lockedRect, 0, 0); // no lock flags specified

int width = 640;
int height = 360;

int totalA;
int totalR;
int totalG;
int totalB;

DWORD* imageData = (DWORD*)lockedRect.pBits;
for(int y = 0; y < height; y++)
{
for(int x = 0; x < width; x++) 
{
// index into texture, note we use the pitch and divide
// by four since the pitch is given in bytes and there
// are 4 bytes per DWORD.


int b=-1;
while (b <2)
{	
	int a=-1;
	while (a < 2)
	{
		int setY=y + b;
		int setX=x + a;

		if (setX <0) setX=0;
		if (setY <0) setY=0;
		if (setX > width) setX=width;
		if (setY > height) setY=height;

		int index = setY * lockedRect.Pitch / 4 + setX;
		

		DWORD dwColor=imageData[index];

		int b = dwColor % 256; dwColor /= 256;
		int g = dwColor % 256; dwColor /= 256;
		int r = dwColor % 256; dwColor /= 256;
		//int alpha = dwColor % 256;


                if (r<0)r=0;
		if (g<0)g=0;
		if (b<0)b=0;
		if (r>255)r=255;
		if (g>255)g=255;
		if (b>255)b=255;



		totalR+=r;
		totalG+=g;
		totalB+=b;

		a++;
	}
	b++;
}

int index = y * lockedRect.Pitch / 4 + x;

totalR=totalR/9;
totalG=totalG/9;
totalB=totalB/9;

if (totalR<0)totalR=0;
if (totalG<0)totalG=0;
if (totalB<0)totalB=0;

if (totalR>255)totalR=255;
if (totalG>255)totalG=255;
if (totalB>255)totalB=255;

  
int value=((256 + totalR) * 256 + totalG) * 256 + totalB;

imageData[index] = value;//(totalA << 24) | (totalR << 16) | (totalG << 8) | totalB;


}
}



_surface->UnlockRect(); 



    d3ddev9->EndScene();
    d3ddev9->Present(NULL, NULL, NULL, NULL);  //Swaps the back and front buffers. Displays all drawing on the screen..
	d3ddev9->Release();
	d3ddev9->Reset(&dsp);

	_surface=NULL;

}

int AGS_EngineOnEvent(int event, int data)
{
  if (event == AGSE_PREGUIDRAW)
  {
	 Update();
	 DirectDraw(data);
}
}



This is a blur effect, which is drawn super slow at 1fps, the surprise surprise part is once i go to this line
"imageData[index] = value;" and set it to like RED or whatever, frames are going back to 40, so I think there's something I'm missing here, but i have no idea what it is.

SMF spam blocked by CleanTalk