Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
How?
It's more of a sandbox game where you can decide what you want to do. To parcipate in war or keep quiet until they come for you, you don't get gold for ever lasting items.
DotA is DotA
WiF is WiF
I would say a lot of other things but Im tired and I think most people will get the point.
If you meant that it could be as popular as DotA then I can admit that there's always chance for big popularity beneath W3noLifers
What do you think about making motorized infantry? i.e. infantry sitting on tanks?
That would require to display the infantry sitting on the tank 1), to make infantry able to fire 2) and be able to load/unload infantry 3).
3) Can use hashtable to store the number of soldiers loaded into each tank
2) Can use dummy units and rotated special effects with "Head" bone. To rotate a special effect you could create it as a dummy unit and lock it's body part to a point with height. The dummy's model could be a flash. Then sitting infantry's guns should be pointed forward.
1) you can use attachment points sprite first, sprite second, sprite third, sprite fourth to attach sitting infantry models to (by giving dummy abilities to units) them (those points are used for fire on buildings, btw).
So what do you think?
EDIT: @Vuormalainen, you do not have to use the real Cargo Hold, Load and Unload abilities, so as not to override the interface. And I think I said in part 3) that you should use a hashtable to store loaded infantry, which would give you an idea that you can fake Cargo Hold with dummy load/unload abilities. In a hashtable you could also maybe store a Unit Group, which contains all units in it that in fact are hidden using Unit - Hide. Anyway, just random thoughts.
I can make an example map to show how this can work whilte retaining the normal interface.
EDIT2: Made the map and attached it, just to show things like these are possible and easy.
What do you think about making motorized infantry? i.e. infantry sitting on tanks?
That would require to display the infantry sitting on the tank 1), to make infantry able to fire 2) and be able to load/unload infantry 3).
3) Can use hashtable to store the number of soldiers loaded into each tank
2) Can use dummy units and rotated special effects with "Head" bone. To rotate a special effect you could create it as a dummy unit and lock it's body part to a point with height. The dummy's model could be a flash. Then sitting infantry's guns should be pointed forward.
1) you can use attachment points sprite first, sprite second, sprite third, sprite fourth to attach sitting infantry models to (by giving dummy abilities to units) them (those points are used for fire on buildings, btw).
So what do you think?
This is not Men of War. That would require a lot work and code that runs pretty often and won't be worth it for the rare times you even would use this feature. Also, as when units are loaded into another, you can't see the transporters stats expect mana and hp as they are hidden by the transport interface. And We already have troop transports (which I've rarely seen anybody use)
And to remind people yet again how BIG WiF is and how many units we usually have on the map.
WiF's map size is 480x480, the biggest possible with JassNewGen. The biggest possible with the normal editor is 256x256.
A image from one of the earlier tests showing 9832 units produced.
What do you think about making motorized infantry? i.e. infantry sitting on tanks?
That would require to display the infantry sitting on the tank 1), to make infantry able to fire 2) and be able to load/unload infantry 3).
3) Can use hashtable to store the number of soldiers loaded into each tank
2) Can use dummy units and rotated special effects with "Head" bone. To rotate a special effect you could create it as a dummy unit and lock it's body part to a point with height. The dummy's model could be a flash. Then sitting infantry's guns should be pointed forward.
1) you can use attachment points sprite first, sprite second, sprite third, sprite fourth to attach sitting infantry models to (by giving dummy abilities to units) them (those points are used for fire on buildings, btw).
So what do you think?
EDIT: @Vuormalainen, you do not have to use the real Cargo Hold, Load and Unload abilities, so as not to override the interface. And I think I said in part 3) that you should use a hashtable to store loaded infantry, which would give you an idea that you can fake Cargo Hold with dummy load/unload abilities. In a hashtable you could also maybe store a Unit Group, which contains all units in it that in fact are hidden using Unit - Hide. Anyway, just random thoughts.
I can make an example map to show how this can work whilte retaining the normal interface.
EDIT2: Made the map and attached it, just to show things like these are possible and easy.
We already have the land transports for this, as i believe vuorma mentioned. Also, it was VERY uncommon to have infantry fighting from atop of tanks, they only did that for transport, occasionally, otherwise they were more likely to huddle up behind the tanks for cover.
I've got 2 suggestions.
1) If you haven't already implemented mass control, what do you think about having a hero unit (a dummy hero for example which can be selected using F1) with abilities like Order all nearby units to move, attack-move, stop, hold position?
Or if it is a dummy hero, then you could select a circle area in which to pick units and then perform a mass order.
2) If you are going to make it so that X units are trained instead of 1, maybe you should order them to attack-move to the structure's rally point. It can be done using Unit group - Last created unit group to refer to units created via Unit - Create X Footmen.
I've got these ideas from The Alternate Future I've just been playing for 1 hour on Battle.net. It didn't have these features, making it hard to control so many units.
Also, what about a unit limit?
Yeah, we hav emass control in the map already which is very appreciated, and we have discussed the idea of making several infantry units train at once, but we sort of came to the conclusion that infantry is good for when you have those last 80 gold that can't be used for anything else, and you can jsut spend them on some soldiers. Having a squad would make it have to cost about as much as a light tank, and then it wouldn't be as appealing for players to purchase them (and it would feel like you afford less of them).
If you are still interrested in our transport system, you can check it out here.
It says that your transport engine takes 750 lines of code.
I've got an idea of how to do it with less lines, but in GUI. Going to edit this post in some short time with trigger.
Origin Ref
Overhead Ref
Foot Left Ref
Foot Right Ref
Hand Left Ref
Hand Right Ref
Chest Ref
Weapon Ref
Head Ref
Sprite First Ref
Sprite Second Ref
Sprite Third Ref
Sprite Fourth Ref
Sprite RallyPoint Ref
BirthLink
Foot Right Rear Ref
Foot Left Rear Ref
Chest Mount Ref
Chest Mount Rear Ref
Chest Mount Right Ref
Chest Mount Left Ref
Chest Ref
Origin Alternate Ref
Overhead Alternate Ref
Foot Left Alternate Ref
Foot Right Alternate Ref
Chest Alternate Ref
Head Alternate Ref
Hand Left Alternate Ref
Hand Right Alternate Ref
Weapon Alternate Ref
Chest Right Ref
Chest Left Ref
(33)
Attachment names seem to consist of the following words: Foot, Hand, Chest, Origin, Overhead, Head, Weapon, Sprite, Mount, Rear, Left, Right, RallyPoint, First, Second, Third, Fourth and they always end with Ref. No other words must be used.
For example "foot mount rear first left right ref" will work, while "customname left" will not.
Also, I've made an example map with that smaller transport thing done.
And triggers.
Init
Events
Map initialization
Conditions
Actions
-------- counter is an Integer initially equal to 0 --------
-------- effect1, effect1f, effect2, effect2f, effect3, effect3f, effect4, effect4f, effect5 are Special Effect Arrays --------
-------- temp_point is a Point --------
-------- unitgroups is a Unit Group Array --------
Unit - Set the custom value of Siege Engine 0000 <gen> to counter
Set counter = (counter + 1)
Special Effect - Create a special effect attached to the foot mount rear alternate of Footman 0007 <gen> using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
Load
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to LOAD
Actions
Unit Group - Add (Target unit of ability being cast) to unitgroups([Custom value of (Casting unit))]
Unit - Hide (Target unit of ability being cast)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in unitgroups[(Custom value of (Casting unit))]) Equal to 1
Then - Actions
Unit - Add UNLOAD to (Casting unit)
Special Effect - Create a special effect attached to the overhead of (Casting unit) using war3mapImported\BarEmpty.mdx
Set effect1[(Custom value of (Casting unit))] = (Last created special effect)
Special Effect - Create a special effect attached to the overhead of (Casting unit) using war3mapImported\Bar1.mdx
Set effect2[(Custom value of (Casting unit))] = (Last created special effect)
Special Effect - Create a special effect attached to the foot left of (Casting unit) using units\human\Footman\Footman.mdx
Set effect1f[(Custom value of (Casting unit))] = (Last created special effect)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in unitgroups[(Custom value of (Casting unit))]) Equal to 2
Then - Actions
Special Effect - Create a special effect attached to the overhead of (Casting unit) using war3mapImported\Bar2.mdx
Set effect3[(Custom value of (Casting unit))] = (Last created special effect)
Special Effect - Create a special effect attached to the foot right of (Casting unit) using units\human\Footman\Footman.mdx
Set effect2f[(Custom value of (Casting unit))] = (Last created special effect)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in unitgroups[(Custom value of (Casting unit))]) Equal to 3
Then - Actions
Special Effect - Create a special effect attached to the overhead of (Casting unit) using war3mapImported\Bar3.mdx
Set effect4[(Custom value of (Casting unit))] = (Last created special effect)
Special Effect - Create a special effect attached to the hand left of (Casting unit) using units\human\Footman\Footman.mdx
Set effect3f[(Custom value of (Casting unit))] = (Last created special effect)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in unitgroups[(Custom value of (Casting unit))]) Equal to 4
Then - Actions
Special Effect - Create a special effect attached to the overhead of (Casting unit) using war3mapImported\Bar4.mdx
Set effect5[(Custom value of (Casting unit))] = (Last created special effect)
Special Effect - Create a special effect attached to the foot right of (Casting unit) using units\human\Footman\Footman.mdx
Set effect4f[(Custom value of (Casting unit))] = (Last created special effect)
Unit - Remove LOAD from (Casting unit)
Else - Actions
Unload
Events
Unit - A unit Finishes casting an ability
Conditions
(Ability being cast) Equal to UNLOAD
Actions
Set temp_point = (Position of (Casting unit))
Unit Group - Pick every unit in unitgroups[(Custom value of (Casting unit))] and do (Actions)
Also you don't need to explain how to code, all you have to tell us is your ideas. I'am just saying this because you're just waisting your own time by doing so.
Actually, I think that your transport system would be equally long in JASS code... And as far as I know, theres no way for GUI to register the events of when players simply right click to load units, or left click to unload them. Also, our system still uses the base of the "normal" transport system with some additions, while yours is a unnecessary reconstruction which as I mentioned can not use the simple right click and left click functions which are necessary for a massively big game as wif.
@Vuormalainen I've made GUI use right click.
Though, I was lazy a bit and decided not to change channel-based Load ability into Sorceress' Slow. So I used a bit of custom script...
Right-Click
Events
Unit - A unit Is issued an order targeting an object
Conditions
(Owner of (Ordered unit)) Equal to (Owner of (Target unit of issued order))
EDIT2: Registering just a left click requires Trackables, as I heard. Those are weird monsters to me and the only thing I know about them is that there're no such things in GUI, so instead of just left clicking you could... use a hotkey to order transport to unload.
kkots: i never said that the transport system took 750 lines of code, i said that the unit indexer does. A unit indexer is a library made for giving each unit on the map an index spanning from 0 to 8191, so that you can use it as an array index to store data. It also features other functions for attaching data to objects.
The transport code itself is only 40 lines of code, and endlessly more eficcient than what you wrote. I see no point in creating a new transport system when there is one integrated with warcraft. What vuorma ment about left clcking to unload units, is that in this integrated system, unit show little icons in the UI to display exactly what kind of untis are being transported. You can click on those to unload the unit, but there is no way to register when a player does that, therefore i had to import a custom event handler that i use to check whenever one of the transported units reenters the map.
If we WOULD make a custom transport system though, we would do it like we do everything else - in jass.
Usinga jass struct would be way more efficient than that simply because:
If you make a group array of maximum ammount of groups, once again that is 8192, and set their deafult value in GUI to be a new group, then the compiler will simply make a loop that initializes each of theese handles with a new group. This means that regardless of how many transports you have, you will always have 8192 groups in memory taking up space!!
In vJass, you can simply create a struct that holds a group variable, and have the group be created when the struct is created (which is when the transport is built), and destroy it when the struct is destroyed (when the transport dies).
Incase you are interrested, here is the transport script:
JASS:
scope TransportUnits initializer OnInit
private function OnLoad takes nothing returns boolean
//german
if GetUnitTypeId(GetTransportUnit()) == 'h01K' then
call SetUnitAbilityLevel(GetTransportUnit(), 'A01R', Transport_CountPassengers(GetTransportUnit())+1)
endif
//soviet
if GetUnitTypeId(GetTransportUnit()) == 'h00I' then
call SetUnitAbilityLevel(GetTransportUnit(), 'A01S', Transport_CountPassengers(GetTransportUnit())+1)
endif
//allied
if GetUnitTypeId(GetTransportUnit()) == 'h00G' then
call SetUnitAbilityLevel(GetTransportUnit(), 'A01T', Transport_CountPassengers(GetTransportUnit())+1)
endif
return false
endfunction
private function OnUnload takes nothing returns boolean
//german
if GetUnitTypeId(GetUnloadingTransport()) == 'h01K' then
call SetUnitAbilityLevel(GetUnloadingTransport(), 'A01R', Transport_CountPassengers(GetUnloadingTransport())+1)
endif
//soviet
if GetUnitTypeId(GetUnloadingTransport()) == 'h00I' then
call SetUnitAbilityLevel(GetUnloadingTransport(), 'A01S', Transport_CountPassengers(GetUnloadingTransport())+1)
endif
//allied
if GetUnitTypeId(GetUnloadingTransport()) == 'h00G' then
call SetUnitAbilityLevel(GetUnloadingTransport(), 'A01T', Transport_CountPassengers(GetUnloadingTransport())+1)
endif
return false
endfunction
private function OnInit takes nothing returns nothing
local trigger t=CreateTrigger()
call Transport_RegisterLoadEvent(t)
call TriggerAddCondition(t,Filter(function OnLoad))
set t=CreateTrigger()
call Transport_RegisterUnloadEvent(t)
call TriggerAddCondition(t,Filter(function OnUnload))
endfunction
endscope
Instead of having different if-statements for how many units the transport contains, i simply use a spellbook that i give to it on spawn, containing 6 different levels - one with a "target" attachment of a soldier sitting in the back, one with two soldiers sitting in the back, one with two in the back and one in the middle, etc. I then simply check when a unit is loaded or unloaded, and then i set the ability level to the ammount of soldiers carried. Voila!
Also, you have to remember, that behind that GUI code of yours, there is a ton of jass code hiding. Just try converting it into custom text and you will see! Conditions in GUI get their very own function, instead of being inlined, which is a very clumsy way of handling it.
Also, remember that everytime you use a "unit group" function, you create a group that will leak unless you destroy it. use this: "set bj_wantDestroyGroup = true" in a custom text field before you use theese functions to make it so that the group will be destroyed when the script is finished with it.
since you are making it in custom script anyways, please do the trouble of removing the "BJ" at the end of the function. "BJ" is simply an indicator that this function is not really a native, it is just a function that has been "dummified" to be forced into GUI and will only lead to another function inside it, doing practically the same thing but faster.
I appreciate that you are trying to help us, but as told before - we know how to code, don't worry.
You should null the t local trigger variable in the end, Fin, it's leaking the handle pointer. Though it doesn't matter that much since it's only executed once ;D
Okay, but I don't really know any JASS (I didn't understand 95% of that JASS code). I never knew function IssueTargetOrderBJ, I got it from a converted trigger and simply modified it.
Fingolfin, I'm not sure you need to import a custom event handler to register when units are unloaded. Take a look:
Events
Time - Every 0.30 seconds of game time
Conditions
Actions
Unit Group - Pick every unit in (Playable map area) matching ((Unit-type of (Matching unit)) Equal to Goblin Zeppelin) and do (Actions)
Loop - Actions
Set temp_unit = (Picked unit)
Unit Group - Pick every unit in loadedunits[(Custom value of temp_unit)] and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Picked unit) is loaded into temp_unit) Equal to False
Then - Actions
Game - Display to (All players) the text: a unit has been unloaded
Unit Group - Remove (Picked unit) from loadedunits[(Custom value of temp_unit)]
Else - Actions
Do nothing
LAST EDIT: Well, looks like I've got to learn JASS. And an enlightenment came to me and said that basically there's a little chance that you might add anything new to your project when it is in its final stage of production. This rule applies to all projects.
Okay, but I don't really know any JASS (I didn't understand 95% of that JASS code). I never knew function IssueTargetOrderBJ, I got it from a converted trigger and simply modified it.
Fingolfin, I'm not sure you need to import a custom event handler to register when units are unloaded. Take a look:
Events
Time - Every 0.30 seconds of game time
Conditions
Actions
Unit Group - Pick every unit in (Playable map area) matching ((Unit-type of (Matching unit)) Equal to Goblin Zeppelin) and do (Actions)
Loop - Actions
Set temp_unit = (Picked unit)
Unit Group - Pick every unit in loadedunits[(Custom value of temp_unit)] and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Picked unit) is loaded into temp_unit) Equal to False
Then - Actions
Game - Display to (All players) the text: a unit has been unloaded
Unit Group - Remove (Picked unit) from loadedunits[(Custom value of temp_unit)]
How about an effect on tanks which affect them when they're moving on a hill.
Like, if an enemy tank shoots your tank "upwards" from the hill below you, there's a higher chance for your engine or tires to be destroyed.
Not to mention that you are now once again leaking a group three times every second.
EDIT: @Miss_Foxy: for units with armor piercing ammo, we have a damage detection system so we should basically be able to add any such effects we want, but.. don't you think it might be a bit confusing for the player? I mean, first of all, if anything, it would be the tank on the hill that would be rewarded, for having the opportune position. The top armor of tanks is very weak too, and there are generally advantages of being above your enemy. But also, i think it might be enough with the effects we have. I believe this would just be a little too much for this kind of game, seeing how the hills look rather small from the players perspective (unless you are firing from the top of the himalayas).
Hmm... But from what I read not long ago, for tank warfare, the one below has an advantage of blowing the engines of the one on top of the hill while the one on top can't get a precise aim of the engine of the one below. Maybe there could be like, a buff for both the one below and above? The one above has some evasion while the one below gets a higher chance of engine destruction
lol, then how would you know what position you want to be in?
You are forgetting that the engine is placed in the rear on tanks, you cannot see the rear of tanks that are on a hill, but when looking from above, you can see the whole enemy tank. Perhaps if the one on hte hill is standing with it's front carelessly hanging out of some ledge it would work that way.
Another thing about hill is that it gives more time for the shell to drop, resulting in longer firing ranges. It is also a moral thing, firing uphill is somewhat demoralizing.
Oh, well... I thought you weren't. I'm not entirely sure, but I remember fingolfin saying something about not including them, and I just wanted to be sure.
So how is it going to work? Like the default warcraft-ish way or something customized?
Like all airplanes, you will most likely build it first and when you have it in your hangar you can use one of the abilities to send it out, from there the airplane will be yours to command, the paratrooper airplane will then have a paradrop ability which you can use at target ground location. Just as strategic bombers should make use of their bombs (I wouldn't get happy if they autobombed anything they saw and returned to the airfield just as quickly)
Unlike other airplanes however, I think that the paratrooper plane shouldnt be reusable, or possibly make it's paradrop cost money to use.
(Yes, if you let any of your airplanes be they will circle around and not stay floating)
I think that the paratroopers are pretty important and will be very fun to use ingame. They open up for soo many strategies and possibilites on the battlefield, or around it However, is your enemy smart, he will probably have though of that, just like everything else you can do in WiF.
And I recall Fingolfin's opinion for not adding them is that it would look ugly paradropping, which I think it will not and would it I say it's still worth it, hell I would even say they are worth it without any special effects at all.
I'am gonna implement my aircraft system very soon and make a preview video of it because I'm sure it will work in a very beautiful and simple manner.
I'm not sure i see enough uses for paratroopers.
Sure, if they'd be able to capture a city so that you can start building from it, but i recall vuorma didn't like that option.
@Miss_Foxy: Omaha beach was not a particularly strategic position, it was the place where most american invaders died, and that is why it is famous. The allied goal was to capture the french north coast in it's entirety.
But yeah, naturally, the tip of france is strategically important, it can be used as a launch site for both V2's and bombers by the germans, and as a foothold for the allies, it provides access to both spain, italy and germany.
I see paratroopers as special units that can be deployed behind enemy fortifications to open a way for a large army. Or perhaps to make a full invasion force on a isolated island (Battle of Crete).
I recall discussions about having to repair a city before being able to use it, for many reasons.
But you could however get an as overwhelming force which you can defend the city with until you get to repair it or just distract your enemy by invading his guardless homeland. But as Hugomath mentioned they can be used for other things as well and I see hundreds of situations I could use them in.
And some wiki read which say pretty much about them: Paratroopers are used for tactical advantage as they can be inserted into the battlefield from the air, thereby allowing them to be positioned in areas not accessible by land. It is one of the three types of "forced entry" strategic techniques for entering a theater of war; the other two are by land and sea. This ability to enter the battle from different locations allows paratroopers to evade fortifications that are in place to prevent attack from a specific direction, and the possible use of paratroopers forces an army to spread their defenses to protect other areas which would normally be safe by virtue of the geography. Another common use for paratroopers is to establish an airhead for landing other units.
Also I think it's a too big part of WW2 to not add, as this is when they first were used and when they were most used as well.
Finally finished the design of the buildings tab and added the three buildable buildings as well made ingame icons for them. Made/updated and uploaded new icons for german engineer, german flamethrower, german soldier, allied soldier, allied engineer, soviet soldier, soviet engineer, as well also put these ingame.
Damn vuorma, that looks incredible! And nice icons for the buildings too!
Anyways, miss_foxy: yes, i can really feel the map coming together now, and i can tell that next saturday we will with 90% likeliness be testing out the airplane system with at elast fighters and dive bombers ready for all teams
I am currently working on the "Ilyushin IL-2 Sturmovik" (the soviet dive bomber), and will continue with the German "Stuka" bomber, then i will start working on the airfield and the american "Essex" class carrier.
Also, i have a question for all of you, how should we solve it with Soviet carriers?
I mean, first of all, the Soviet union barely had any coastal territory except for in the arctic sea, and certainly never built any carriers during WW2, so how should we do?
I could either give them the American essex carrier, but the essex was a very large carrier with high airplane capacity, which does not properly reflect the role that Soviet carriers would have.
Optionally, i could make a model of the "Project 71", a planned Soviet light carrier, which would then have significantly lower aircraft capacity.
Final option is to skip carriers for them altoget6her, and perhaps instead make something else with their planes slightly better to compensate for the lack of manouverability on the seas (or maybe just consider it a penalty for the fast production times of the soviet).
Let me now your opinions.
Awesome, I can almost see it being hosted regularly by my clan's bot already
I'm sure it'll be a revolution to RTS games. Especially to some of those crappy games about warfare... Vomit
Sorry.
Regarding The Question: Hmm... Certain events could be planned out for them, like some of those that wouldn't affect History strongly but will be beneficial to them. Or they could have a better, more strategic territorial coastal landscape to avoided being massed by the sea. Maybe giving their troops the ability to lets say, survive/swim in water for a period of time? I'm not too sure about it since this came so sudden, maybe you might want to enter the Chat so we could discuss it better.
We could and will most likely make a upgrade for it, but not a visual one, just a stat boosting, such as the T34 has becomming a T34-85 if I recal correctly.
And no, the tsar tank was only experimental. Forcing enemies laugh to death is against the laws of war
Soviet Carrier: Just skip it, and for Finland as well. Could almost skip Battleship for them two also.
They both survived WW2 without them, right?
Dunno about Italy, did they ever use carriers(I know they were making some..)?
@Vuormalainen -} ahhh ok , lol plz watch this http://www.youtube.com/watch?v=zzsc48QWD10. i took tsar tank from this game. and t-34 is...is just insane
i understand frigolfin, when he said CoH sucks, a normal sherman or a calliope can destroy a phanter tank, and boucing shells etc, but i love the way the soldirs move, hide, screem when are hiting by a enemie, the worst part of the game is the fail tank balance and low campaing maps count.
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.