How camera works in 2d platformer in level transitions

I want to know how Camera works in game of Celeste. enter image description here

Currently what I have is, camera follows the player using interpolation:

cameraPosition = cameraPosition + (playerPosition - cameraPosition) * 0.1; 

and I clamp the camera position to the edge of the world size:

cameraPosition = mu.clamp(cameraPosition - [160, 90], 0, worldSize); 

I subtract [160, 90] to center the camera.

This works OK. But is that all there is to it.

Specifically, how does the camera work between room transitions.

I might drop room transitions, and just do a black screen transition between levels, but I’ve heard there is camera triggers that offset the camera relative to player position, and what other tricks are used?

Are the 3.5e Dragonlance books third party or official works?

When 3rd edition rolled around, Wizards of the Coast handed the maintenance of the Dragonlance setting to Sovereign Press, the printing company owned by Dragonlance co-founder Margaret Weis. They released several Dragonlance books all the way until the end of their licence, not too long before 4th Edition came rolling around.

But I’m curious if this means that those Dragonlance books are canon. I rarely see them being referenced by guides and people talking about character builds in general, and even then in only a select few cases. which lead me to suspect that the books are not “official” works like the regular, the Forgotten Realms and the Eberron books are.

Is this true? Are they third party works because they’re printed by Sovereign Press rather than Wizards of the Coast? Or are they still official because Sovereign Press was licensed to print them, and they are an established setting and bear the WotC seal of approval?

OpenVPN works on Ubuntu but not Android – Name Resolution [migrated]

Server1 – Primary DNS/Plesk
Server2 – Secondary DNS
Server3 – OpenVPN

On by local computer running Ubuntu 20.04 I can successfully connect to the OpenVPN server and browse any website. My public IP Address shows as the SERVER3 IP Address.

On my Android, I can successfully connect to the OpenVPN server but I can only browse websites hosted on Server1. All other websites get the DNS_PROBE_FINISHED_BAD_CONFIG error message. In the OpenVPN app it shows a successful connection and the correct IP Addresses.

I am using the exact same configuration file for both devices. Note, different certificates are used for the connection.

Looking at the syslog on Server1, I see:

client @0x7f79480ea2b0 ANDROID-PUBLIC-IP-ADDRESS#50743 ( query (cache) '' denied 

I don’t get these errors when browsing on the Ubuntu box.

My ovpn file:

dev tun proto tcp remote SERVER3 IP 443 resolv-retry infinite nobind user nobody group nogroup persist-key persist-tun remote-cert-tls server cipher AES-256-GCM auth SHA256 verb 3 key-direction 1 <certificates are here> 

My OpenVPN Config file:

management 5555 dev tun ca ca.crt cert server.crt key server.key  # This file should be kept secret dh none server ifconfig-pool-persist /var/log/openvpn/ipp.txt push "dhcp-option DNS SERVER1 IP" push "dhcp-option DNS SERVER2 IP" keepalive 10 120 tls-crypt ta.key cipher AES-256-GCM auth SHA256 user nobody group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log log         /var/log/openvpn/openvpn.log log-append  /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 0 

Can minor illusion or prestidigitation create a spyglasss that works?

Can I create a lens that will function as a magnifying glass or spyglass with Minor Illusion Using the illusion as a focus to warp or bend light as a lens might.

Alternatively, can Prestidigitation Create a spyglass or magnifying glass?

You create a nonmagical trinket or an illusory image that can fit in your hand and that lasts until the end of your next turn.

Is there an actual web browser “in the works”? [closed]

There are no web browsers left (for Windows/non-Macs). Chrome and Firefox are both pure spyware to the point where they are utterly unusable. 100% of all other browsers except for Safari (Mac-only) are "skins" on top of those same compromised softwares.

I’ve looked long and hard but there just seems to be no browser left. It feels absurd to type that, but it’s the truth. I’m typing this from Pale Moon, which is a Firefox fork, and other than Tor browser (also a Firefox fork and only usable for .onions), I simply cannot find any browser to install on my system.

There just is no usable browser left.

Pale Moon is a nightmare to use for YouTube, Twitch or shopping food. I have to wait for many seconds for each page to sluggishly load, and every click and scroll takes an eternity. There’s constant issues with videos and streams breaking in various ways, start repeating, or just generally load at turtle speed, unrelated to connection issues. (And this is a monster PC, so it’s definitely not related to local performance.)

Pale Moon is also very broken (just like Firefox) in terms of specifying a profile to use when opening a URL from the command line/script, and the same goes for "private browsing mode" which it ignores entirely. It’s basically an unmaintained, rotting mess. It’s so broken that it’s not even meaningful to call it a "browser", frankly.

No, Chromium, Vivaldi, "Brave", "Opera", "Edge" etc. are not browsers. They are skins on the same compromised Chrome spy tech. The only possible way to make a browser is to do what Opera did until 2012: actually make it. Not take an existing piece of code which you have zero control over and slap your logo on it, pretending that it’s a browser. It’s not. It’s a skin on top of Google’s or Mozilla’s junk.

I have zero confidence left in either Google or Mozilla. I will never use anything made by or depending on them.

And please, don’t make any tongue-in-cheek recommendation for Lynx or Links: That page is like a cruel joke.

Frankly, I already know the answer to my own question: "no". There is no browser. All there is is Chrome and Firefox, and both are literally unusable.

I truly cannot understand how there can exist people who claim that Mozilla is somehow "fighting evil" when they are the evil. Maybe they run Linux and their distro has put heavy modifications on their Firefox package; that’s the only explanation I can think of. Try it on Windows, or just "unmodified" from Mozilla, and you will start crying.

And no, Chromium is not "Chrome without the spying".

What I don’t understand is what all these intelligent people could possibly be using. They seem to be all using Chrome, somehow ignoring all the spying. It’s like I’ve ended up in some parallel dimension or something.

Seriously: this is not a "rant". What do you suggest other than "stop using computers entirely", which I’d love to do but isn’t practically possible in my situation?

There is some monster that works like a swarm of bodies?

I want to ask if someboday have design a monster that works like a swarm of bodies. Not undead but simply human, dwarf, etc bodies that are corrupted or something similar. I want that this monster works like a swarm in such a way can move like a flow until push and destroy windows or doors of a house (example).

Something without Intelligence, like an horde that kill everithing. The monster must be easy to hit for player, but after have killed one bodies, another is ready. In my mind this swarm if made of singular bodies with someone that is able to fuse with another to create a terrifing tangle.

Can you suggest a monsetr like this or do you have a character sheet for a monster like this?

JQuery calling a Custom PHP function (Works in Dev but not in WordPress)

My code is working fine on my localhost in my development environment which is outside of the WordPress press environment. I know the PHP function is working. I am able to send test votes to my server from my localhost on my PC.

Problem: I cannot get this to work in WordPress.

My Thoughts I think it’s a path issue, but I’ve tried putting the PHP script in the root and using a full path. I am not getting any errors in the web browser console (f12).

WordPress Version: 5.4.1 I put my custom php code into “/wp-contents/custom-php/votifier.php” My JQuery script is in the header. (yes, I know I should put it in the footer.)

The Button

<div id="voteButton"> <button type="button">Try it</button> </div> 

Localhost Version

<script> $  (document).ready(function(){   $  ("#voteButton").click(function(){     $  .post("votifier/votifier.php",     {       key: $  .trim($  ("#field_yjr62").val()),       ip: $  ('input[name="item_meta[40]"]').val(),       port: $  ('input[name="item_meta[42]"]').val(),       service: "Votifier",       username: $  ('input[name="item_meta[59]"]').val()     },     function(data,status){       alert("Data: " + data + "\nStatus: " + status);     });   }); }); </script>  

WordPress Version

<script> jQuery(document).ready(function( $   ) {   jQuery("#voteButton").click(function(){     $  .post("/home/xxxxxxxxxxxx/public_html/wp-content/custom-php/votifier.php",     {       key: $  .trim($  ("#field_yjr62").val()),       ip: $  ('input[name="item_meta[40]"]').val(),       port: $  ('input[name="item_meta[42]"]').val(),       service: "Votifier",       username: $  ('input[name="item_meta[59]"]').val()     },     function(data,status){       alert("Data: " + data + "\nStatus: " + status);     });   }); }); </script> 

My Custom PHP Script

<?php  const VOTE_FORMAT = "VOTE\n%s\n%s\n%s\n%d\n"; const PUBLIC_KEY_FORMAT = "-----BEGIN PUBLIC KEY-----\n%s\n-----END PUBLIC KEY-----";  $  public_key     = formatPublicKey($  _POST['key']); $  server_ip      = $  _POST["ip"]; $  port           = $  _POST["port"]; $  service_name   = $  _POST["service"]; $  username       = $  _POST["username"];  sendVote($  username, $  public_key, $  server_ip, $  port, $  service_name);  function formatPublicKey($  public_key) {     $  public_key = wordwrap($  public_key, 65, "\n", true);     $  public_key = sprintf(PUBLIC_KEY_FORMAT, $  public_key);     return $  public_key; }  function sendVote($  username, $  public_key, $  server_ip, $  port, $  service_name) {       if (php_sapi_name() !== 'cli') {         //Detect proxy and use correct IP.         $  address = isset($  _SERVER['HTTP_X_FORWARDED_FOR']) ? $  _SERVER['HTTP_X_FORWARDED_FOR'] : $  _SERVER['REMOTE_ADDR'];     } else {         //Script is run via CLI, use server name.         $  address = $  _SERVER['SERVER_NAME'];     }      $  data = sprintf(VOTE_FORMAT, $  service_name, $  username, $  address, time());     openssl_public_encrypt($  data, $  crypted, $  public_key);     $  socket = @fsockopen($  server_ip, $  port);      if ($  socket) {         if (fwrite($  socket, $  crypted)) {             fclose($  socket);             return true;         }     }      return false; } ?> 

add_action works outside condition but not inside it

I am developing a theme framework for my own purposes.

So this time i am facing a problem, that is add_action works out side conditional.

add_action( 'meanz_before_main_wrap', 'meanz_entry_header_structure_open', 5 ); add_action( 'meanz_before_main_wrap', function(){echo "<div class='title_cat'>";}, 6 ); add_action( 'meanz_before_main_wrap', function(){echo meanz_post_cats();}, 7 ); add_action( 'meanz_before_main_wrap', 'meanz_do_title', 25 ); add_action( 'meanz_before_main_wrap', function(){echo "</div>";}, 49 ); add_action( 'meanz_before_main_wrap', 'meanz_do_thumbnail', 50 ); add_action( 'meanz_before_main_wrap', 'meanz_entry_header_structure_close', 100 ); 

Otherwise if is use a conditional like this, it doesn’t work

if(is_single()){ add_action( 'meanz_before_main_wrap', 'meanz_entry_header_structure_open', 5 ); add_action( 'meanz_before_main_wrap', function(){echo "<div class='title_cat'>";}, 6 ); add_action( 'meanz_before_main_wrap', function(){echo meanz_post_cats();}, 7 ); add_action( 'meanz_before_main_wrap', 'meanz_do_title', 25 ); add_action( 'meanz_before_main_wrap', function(){echo "</div>";}, 49 ); add_action( 'meanz_before_main_wrap', 'meanz_do_thumbnail', 50 ); add_action( 'meanz_before_main_wrap', 'meanz_entry_header_structure_close', 100 ); } 

Don’t know why it doesn’t work. Any comments?

Sorry for wrong code. Updated the question.

Which works best to describe character, item or dungeon properties: Affix or Trait?

I am working on an RPG portion of my game called “The Underground King“.

My item generator uses the same properties that also apply to characters, vehicles and racing levels (dungeons for short).

I am torn between using the term “Affix” and the term “Trait” to describe the procedurally generated properties, mainly because English is not my first language, and there may be a clear difference in usage between the two.

Examples of traits: Hearty: For items, it gives 5 more HP, for characters they have 5 more HP, for vehicles they have 5 more durability, for dungeons, enemies have 5 HP each. Indomitable: For items, characters and vehicles, it gives the player the ability to ressurect at 100% hp, once dead. For the dungeon, dead enemies remain invulnerable for a few seconds after being dead.

I am open to either opinions or arguments for any of them. Thanks!

Buffer Overflow Works Locally But Not Remotely

So I made a simple buffer overflow challenge and attempted to host it on a digitalocean droplet. The challenge source is below, and is compiled using gcc welcome.c -fno-stack-protector -no-pie -o welcome.

#include <unistd.h> #include <stdio.h>  int main(void) {     setvbuf(stdout, NULL, _IONBF, 0);     char name[25];     printf("whats your name? ");     gets(name);     printf("welcome to pwn, %s!\n", name);     return 0; }  void flag() {     char flag[50];     FILE* stream = fopen("flag.txt", "r");     fgets(flag, 50, stream);     printf("%s", flag); } 

Locally on the Docker the challenge is running on, I am able to use the exploit seen here. Trying to use it over the netcat connection though, it doesn’t work! All of the files I am using to host the challenge can be found here. Any help or other tips would be appreciated. I have spent a large part of the day confused about this.

Bonus question, why does the binary hang after completion on the remote server until the user hits enter? Maybe my setvbuf is incorrect? If someone could explain this that would be great! I am fairly new to this stuff.