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

Messages - bx83

#461
Well 17,000 *AU* - Australian dollars. They're about 1/2-2/3 American. It does have infinite retakes, and the guy is unprofessional (he says he doesn't want to take it too seriously, and just goes to endless comic cons as a guest and is 'internet famous' via youtube), but he sure knows how to charge. Don't know if I'm being taken for a ride, this is the first time I've done this, but the fniished product should be good. Askin my musician/engineer to normalise/level the sounds (he does it bit-by-bit in the soundfile, as opposed to one denoising filter), I'll play some for you then.

For example; Matt Berry (boss from The IT Crowd), who has a very deep and unique voice charges 500 pounds (BSF, basic studio fee for 1 hour recording), and *20,000 pounds* (~26,300 US) on top for a *single read* of a script about 40 lines long. If I need a retake, it's his BSF again, times the hours it takes him. So in order for him to do one character in the game, it would cost me about AU$60,000 or GBP 30,000, about 3 times the value of the game for *all* characters. Now *that's* expensive.

I'll be getting a cheaper lead for my next one I'll tell you that - people at that website I linked (that are actually talented), charge about AU$5,000 for 2000 lines and retakes.
#462
What surface would I use on a GUI,a button? Or just the GUI background image?
GUI's also don't seem to preserve alpha channel/transparancy :/
#463
My code works, but perhaps not in all situations.
All good, I'm happy with it so far, take your time :)
#464
Why is it not part of the manual 'functions and properties' wiki page?
Character functions and properties

Anyway, yes it was an editor bug where it didn't come up autolmatically :P All works.
#465
ps I must agree with Crimson Wizard - you have to sell your game as if it's a thing of value. In order to do this, you need to have everything *absolutely perfect* for the playthrough - I have a list of todo's and fixes as long as my arm for 1 cluster of rooms.
If you have high standards, and the ability to adapt when the engine is a bit primitive to do this or that - and you can't be bothered learning Unity from it's crappy forums :P - value is the way to go.
But anyway I sound like an executive 'synergizing' :P
#466
Quote
When I saw that Dave Gilbert mentioned a base fee of about $15,000 for an average length voicing at his studio I thought it was expensive but, after going through the process, even in just a QA Consultant kinda role, I can see why it would cost a lot of money to get the level of quality that WadgetEye achieves.

It's really hard!

I can 100% confirm this expensive, shameful situation. One added fun part to game design is if you're doing the *entire* thing online - testers, coders, voice artists, musician etc. - and you're VA's are all using different studios of varying quality. Most of editing is organising voice clips, processing them (Audition->Remove Sound), saving as multiple formats (everything I have is 16bit 44.1k WAVs, but the game uses OGG's), running Rhubarb over the sound file (this is the utility which generates the lipsync data - and Snarky's custom-made TotalLipSync which runs it) using a .bat file, sending off the sound files to an engineer to get further processing and levelling/normalisation, recording every line in a spreadsheet, describing in detail what you'd like a re-take to sound like and peppering the script with [sad] [happy] [a stage direction] etc, occasionally needing to ask the VA to re-record the *entire script* because it was set to the wrong gain level or whatever, etc.etc.etc.etc.etc. and then you're done.

It's a budget job, and requires you to have experience in many areas (Photoshop, audio engineering etc.), but it's tremendously rewarding. I'd say I've produced music and VO quality on parr with eg. Kathy Rain (WadgitEye), but at a 100th the price. No hiss, no sharp edges, great acting and voices.
...and for only AU$24k! :p

My main character cost about AU$17k, which is for about 2,000 lines, retakes, lines not used, etc.
Most of the others are quite cheap, 100-1000 AUD, but it takes a huge amount of work to find talented VA's - they either 'have it' or don't. Some are actors; aaaaand then some are semi-professional narrators who can do voices. My secret is to pay a little bit extra. Check out: http://voiceacting.boards.net/, it's one of the best place I've found 'hungry', amateur VA's; 'naturalistic' actors (as George Lucas put it) like Mark Hamill. You find the next big thing before it's even a thing :P

Another good way is to put your game on Kickstarter - that's how I met both my musician and female lead VA, as they advertised to prospective employers.

Anyway, where was I?
PM me if you'd like further advice or news on what involved in the steepest learning curve i've ever been up :)
#467
Is there a way to have a global Object? I need to create the oCandlelight object for every room otherwise :/
#468
As usual, a tiny point which baffles me.

When I use the mouse, the cursor changes it's icon (eg. notalk to talk, no interact to interact etc) if it's above something with an InteractionMode of eTalk, eInteract etc. - eg:

Code: ags

...
    else if (mouse.Mode==eModeInteract) {		//INTERACTION
	newGraphic = 2;  //interact off
        Hotspot *hs = Hotspot.GetAtScreenXY(mouse.x, mouse.y);
	if (hs != hotspot[0]) {
	    if (hs.IsInteractionAvailable(eModeInteract)) {
		newGraphic=286;    //interact on
	    }
	}
...


But for characters, there's no cCharacter.IsInteractionAvailable function.
Could you give me an alternative? Is there one?

There *is* a cCharacter.RunInteraction(eModeWhatever), but this just... runs a charater mode :/  --It doesn't return true/false if there *is* a character mode.
#469
Too late, I wrote some shitty poorly tested code! :P

This is the same code as SayBubble, but with one parameter change (from true to false) on line 10:
Code: ags

void ThinkBubble(this Character*, String message, GUI* bubbleGui)
{
  if(message == null) return;
  if(!game.bgspeech_stay_on_display)
    _stopAllBackgroundBubbles();
  if((Speech.VoiceMode == eSpeechVoiceOnly && hasVoiceClip(message)) || message == "...")
    this.SB_sayImpl(message);
  else
  {
    DynamicSprite* bubbleSprite = this.renderBubble32(message, false);  //<--- SETTING THIS TO FALSE WAS ALL I HAD TO DO
    // Position bubble over character head
    int x = this.x - GetViewportX() - bubbleSprite.Width/2;
    x = _clampInt(x, 0, System.ViewportWidth - bubbleSprite.Width);
    int y = this.y - GetViewportY() - bubbleSprite.Height - this.GetHeight() - (_heightOverHead - _talkTailHeight + 1);
    y = _clampInt(y, 0, System.ViewportHeight - bubbleSprite.Height);

    this.realSayAtBubble(x, y, message, bubbleGui, bubbleSprite);
  }	
}
#470
Snarky, can you give us an ETA on 'ThinkBubble' function?
I would guess you just run speechbubble, but with 1 parameter change: to display the 3 bubbles going to the rounded corner box, instead of the angled-line going from the round corner box.
#471
Thankyou Snarky, solved in one line :D
#472
Okay I now have the following code:

in globalscript:
Code: ags

function Candlelight_on (Object *Obj, InventoryItem *Inv)
{
  int width = Game.SpriteWidth[Obj.Graphic];
  int height = Game.SpriteHeight[Obj.Graphic];
	
  Obj.Visible = !player.HasInventory(Inv);
  
  if(Obj.Visible)
  {
    float dx = IntToFloat(abs(mouse.x - (Obj.X + (width/2))));
    float dy = IntToFloat(abs(mouse.y - (Obj.Y - (height/2))));
		
    int d = FloatToInt(Maths.Sqrt((dx * dx) + (dy * dy)));
    if (d < 100)
        Obj.Transparency = d;
    else
        Obj.Transparency = 100;
  }
}


in room code:
Code: ags

function room_RepExec()
{

	oCandelight.X=mouse.x+OFFSET_X;
	oCandelight.Y=mouse.y+OFFSET_Y;

	oCandelight.Visible=CandleLit;

	oCandelight.Clickable=CandleLit;
	oCoin1.Clickable=CandleLit;
	oGoldIngot.Clickable=CandleLit;
	oGoldPen.Clickable=CandleLit;
	oDevilsHead.Clickable=CandleLit;
	oStar.Clickable=CandleLit;

	if (CandleLit) {
            Candlelight_on(oCoin1, iCoin1W);
            Candlelight_on(oGoldIngot, iGoldIngot);
            Candlelight_on(oGoldPen, iGoldPen);
            Candlelight_on(oDevilsHead, iMcguffin);
            Candlelight_on(oStar, iMcguffin);
	} else {
	    oCoin1.Visible=CandleLit;
            oGoldIngot.Visible=CandleLit;
	    oGoldPen.Visible=CandleLit;
	    oDevilsHead.Visible=CandleLit;
	    oStar.Visible=CandleLit;
	}
}


'oCandlelight' is the translucent yellow object to display the candlelight. (in previous posts it was red, now it's yellow, whatever).

oCandlelight:
It's 120x120
It's baseline is overidden to 1; this way, it's always behind objects it highlights. Turning off BaselineOverridden, or setting Baseline to 0, has the effect of making it sometimes on top of objects, sometimes below, depending on position.
It's Visibility, Locked and Clickable are set to False. (initially, in the editor)
UseRoomAreaLighting and UseRoomAreaScaling are False.
It has no Description, and it's not Solid.

If I set oCandlelight.Baseline to 1000 (screen is 1024x768), it's always on top of objects; *but I can't click through it*. It's like the whole screen is under a sheet of glass, no clicks anywhere do anything.
If I set oCandlelight.Baseline to 1, it's always underneath; however this means setting all WalkBehind baselines to 0 (or they show up); and all objects - which have a background on them that's the same as the room background - as square's.

Basically:
I need to to be *above* all objects (or anything) all the time,
But
Allow clicks to pass-through.

(Also, making it's non-Clickable doesn't even work as pass-through for clicks, despite this being in the editor description for Clickable???)

I think the solution has something to do with GUI's... but it's taken me a day of experimentation to write this post, it'll take another 400 days to write the solution; or you guys may know it in 5 minutes :)
#473
I might go for the Finally solution :P

One question which I can't find answered; is there a way to find an object's height/width without manually setting them as Properties?
#474
But all I wanted was a yellow *tinted* circle; not anything involving 2 backgrounds, one of which is already a tinted image :/

In other words:

in globalscript:
Code: ags

function Candlelight_on (Object *Obj, InventoryItem *Inv)
{

	if (!cJulius.HasInventory(Inv)) {
		Obj.Visible=true;
		
		float dx = IntToFloat(mouse.x - Obj.X), dy = IntToFloat(mouse.y - Obj.Y);
		int dist = FloatToInt(Maths.Sqrt(dx * dx + dy * dy), eRoundNearest);
		trans = (dist <= 100) * dist + (dist > 100) * 100; // the multiplication casts the bools to 1 or 0

		Obj.Transparency=trans;
	}
}


in room script:
Code: ags

if (CandleLit) {
    Candlelight_on(oObject, iInv);
}else{
    oObject.visible=false;
}


For other background features would become unclickable objects rather than a whole background with a) different features and b) *tinted another colour*

Code like the below:
Code: ags

  DynamicSprite* bgSprite = DynamicSprite.CreateFromBackground();
  bgSprite.Tint(r,g,b,s,l); //THIS TINTING OF CIRCLE GRAPHIC
  // Now copy it back to the background
  DrawingSurface* bgSurface = Room.GetDrawingSurfaceForBackground();
  bgSurface.DrawImage(0, 0, bgSprite.Graphic);
  // Clean up
  bgSurface.Release();
  bgSprite.Delete();


...but different because I could never get it to work :P
#475
Hi Snarky,

The speech animation delay seems to be too slow for TotalLipSync - no matter what I set a characters to (1, 5, -25, 30), it doesn't make a difference.
What Speech Animation Delay does TLS use?
ATM I'm using 120fps ('GameSpeed'), so I can use a AnimationDelay=1, and not -7 as it was before (on 40fps). I was told using negatives for AnimationSpeed, WalkSpeed, etc. was bad and 'unknowns'.

Code: ags

cJulius.ChangeView(1);		//julius
cJulius.SpeechView=2;		//julius speech
cJulius.AnimationSpeed=1;	//normal animation speed
cJulius.SetWalkSpeed(7, 6);	//normal walk speed


...though I still use some negatives - for an old man:
Code: ags

cJulius.AnimationSpeed=0;		//old animation speed
cJulius.SetWalkSpeed(1, 1);	//old walk speed


No negatives have caused problems, but still.
I have 30frames walking for all characters.

So aaaaaanyway, how does TLS do it's timing?
How does Rhubarb do it's timing,
considering it's file is in tenths of a second:

Code: ags

0.00	A
0.50	F
0.83	C
0.90	G
0.97	A
1.05	B
1.53	A
1.61	C
1.80	B
1.87	X
2.38	X
#476
Fantastic, you have no idea what this means - thankyou :)
#477
Hi, sorry to bring this up again, but I never was totally happy with it.
Naturally, I'm 90% the way there, but just can't finish this last part.

I have 2x background images - one tinted red (with a few scaray satanic details), the other just the normal background image. Both are identical except for the tinting of one.

I then have a small graphic, 240x240 (the background is 1024x768), which is a black circle with a white border. This acts as the 'spotlight' between the backgrounds - or, the 'candle light'. I have a candle which, when lit, see's through the background to another 'dimension', with objects in it, not normally accessable.

I also need transparency (of 90) on the tinted background to view this red tint. With transparency set to 0, I can't see the background (or hence, it's tint).
But with transparency set to 90 (as in normal), the spotlight leaves a trail in it's wake, on black backgrounded things. In other words, the transparency trail shows up obviously the darker the background.

I already have a function (called Candlelight_on) which shows images translucency depending on how close they are to the mouse x,y. This is fine - I can just have this.

The process of using backgrounds is too slow. Being repeated 40 times a second (either copy the background and paste it over itself again; or take a different backgruond, and paste itself over again) moves the game walking speed to about 1/2 or 1/4.

In room code:
Code: ags

function room_RepExec()
{

  if (CandleLit) {     //the inventory item 'candle' has been lit

   Candlelight_on(oCoin1, iCoin1W);                //set translucency of objects based on closeness to mouse/candle
   Candlelight_on(oGoldIngot, iGoldBrick);         //set translucency of objects based on closeness to mouse/candle
   Candlelight_on(oGoldPen, iGoldPen);             //set translucency of objects based on closeness to mouse/candle
    
   DynamicSprite *sprite = DynamicSprite.CreateFromExistingSprite(169, true);  //tinted background
   DrawingSurface *surface = Room.GetDrawingSurfaceForBackground();            //standard background
      
   sprite.Crop(mouse.x-65, mouse.y-65, 240, 240);    //crop it

   sprite.CopyTransparencyMask(1957);                                //use the black circle in white background transparency mask - no other colours will work
   surface.DrawImage(mouse.x-65, mouse.y-65, sprite.Graphic, 20);    //copy to background
			
   surface.DrawImage(0, 0, 487, 90);            //tinted image - if I set it to (0,0,487,0), it no longer has a trail -- but also no longer is tinted
      
   surface.Release();
   sprite.Delete();
    
  } else {
    
   DrawingSurface *surface = Room.GetDrawingSurfaceForBackground();        //get standard bg image
   surface.DrawImage(0, 0, 487, 0);                                        //copy it over itself
   surface.Release();
 
   oCoin1.Visible=false;            //set hidden objects to non-visible
   oGoldIngot.Visible=false;        //set hidden objects to non-visible
   oGoldPen.Visible=false;          //set hidden objects to non-visible

  }
}


in Global script code:
Code: ags
function Candlelight_on (Object *Obj, InventoryItem *Inv)
{
  if (!cJulius.HasInventory(Inv)) {

    Obj.Visible=true;

    if ((mouse.x - Obj.X) >= 0) {
      if ((mouse.y - Obj.Y) >=0) {
        trans = (( (mouse.x - Obj.X) + (mouse.y - Obj.Y) ) /2);
      } else
      if ((mouse.y - Obj.Y) <=0){
        trans = (( (mouse.x - Obj.X) - (mouse.y - Obj.Y) ) /2);
      }
    } else
    if ((mouse.x - Obj.X) <= 0){
      if ((mouse.y - Obj.Y) >= 0){
        trans = (( (mouse.x - Obj.X) - (mouse.y - Obj.Y) ) /2);
      } else
      if ((mouse.y - Obj.Y) <= 0){
        trans = (( (mouse.x - Obj.X) + (mouse.y - Obj.Y) ) /2);
      }
    }
  

    if (trans<0) {
      trans=trans*-1;
    }
    if (trans>100) {
      trans=100;
    }
    
    Obj.Transparency=trans;
  }
}




I read this following code, but didn't fully understand:
Quote from: Snarky on Sun 19/03/2017 08:50:57
The easiest is to put a "color filter" layer over the whole screen (like Cassiebsg says): this will tint the background, characters and objects all together. Just create a full-screen (non-clickable) GUI, set its background to the color you want, and set its transparency to the right level.

The other is to copy the background onto a DynamicSprite, tint that, and then draw it back to the background:

Code: ags
  DynamicSprite* bgSprite = DynamicSprite.CreateFromBackground();
  bgSprite.Tint(r,g,b,s,l); // You'll have to supply these values;
  // Now copy it back to the background
  DrawingSurface* bgSurface = Room.GetDrawingSurfaceForBackground();
  bgSurface.DrawImage(0, 0, bgSprite.Graphic);
  // Clean up
  bgSurface.Release();
  bgSprite.Delete();


The first (entire screen, GUI, tinted bg) seem's good, but would it not be as slow (or would it...? either way, I don't know, er, how to do it...)
The second one (tint the background as-you-go, which seems the be the one I want) just displays a transparent, non-tinted circle, on a 100% black background, and then the rest of the image isn't black.

A VIDEO OF THE ABOVE CODE, FOR ELUCIDATION

SO BASICALLY: all I'm looking for is how to draw a tinted circle, not tinted background. With only the circle tinted, all other details/objects can just be that; objects.
#478

Please go to this post:
http://www.adventuregamestudio.co.uk/forums/index.php?topic=56695.msg636598883#msg636598883

Find the updated animation example zip at:
http://redrom.ltd/img/animation_J+DB.zip
#479
Don't worry guys; having been dragged to my whits end, so I just simplified: I made 'Sounds' AudioType 'Ambient' (only get's used in rooms 7,2,3); run the song straight off, so it's persistent; not buggery with PlayFrom, oceanThemePos etc; and have nice long pauses between when the Music starts amd the Ambient fades in (which is now only once when the game starts; elsewhere it's just .Stop'ed or .Play'ed - it's ambient after all, so no-one remebers where it begins and ends).

Got rid of reduce volume when speaking; I'm just playing the sound/music quietly and 'naturally', so the player doesn't consciously notice much about sound, and instead just 'eases into it'. Anyway, the sounds are not too loud.

Both Music and Ambient are set maxchannel 1, crossfade on.
All sound effects are 'Extra' (infinite channels, no crossfade)
'Footprints' sounds are set to a nice low volume, but always audible; and it works with ScaleVolume as well.

Now, not setting the volume manually work's fine - sound is now set to default volume in editor, and holds this throughout (which was the problem I was speaking about before - volume went up and down randomly).

I had too many things on Sound. Or something. I don't know. I'll post code tomorrow when I've tested it and I'm sure (this time - sure!!!) the room(s) works. I'm beginning to understand AudioChannel etc. more fully. I'm sorry for only being capable of half a thought at a time and constant experimentation with ever-changing code.
#480
I have one more question to ask: Did anyone figure out the volume problem (of going crazy unless manually set everytime to something with channel.Volume= ?)
If you feel you've already answered this just say and I'll review.
My most recent working code is up; and the manual setting of volume is the only things that stops it going up and down.
Also I've changed VolumeReductionWhileSpeechIsPlaying in the editor, to 0 for all AudioTypes, and let it do it manually. Same problem.
SMF spam blocked by CleanTalk