ESP8266 range question

So i reflashed the firmware and its the same result. i flashed the firmware from here ESP8266_AT/bin at master · espressif/ESP8266_AT · GitHub

i think i just need a better module or something. not setting the power to high resulted in a weaker connection.

Heres my code for the SoftAP.

//extern "C"{
//  #include "user_interface.h"
//}
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <LiquidCrystal_I2C.h>
IPAddress local_IP(192, 168, 4, 1);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);

IPAddress Client1(192, 168, 4, 100);
LiquidCrystal_I2C lcd(0x27, 20, 4);
WiFiUDP Udp;
unsigned long previousMillis = 0;
unsigned long minmaxwait = 0;
unsigned long minmaxwait2 = 0;
int ledState = LOW;
const long interval = 300;
bool running = false;
bool alarm = false;
const char* ssid = "weatherStation";
const char* password = "a1b2c3d4";
unsigned long now = 0;
unsigned long now2 = 0;
unsigned long now3 = 0;
unsigned long now4 = 0;
unsigned int localUdpPort = 4210;  // local port to listen on
unsigned int clientPort = 4220;
char incomingPacket[800];  // buffer for incoming packets
float maxTemp = -99;
float minTemp = 199;
struct packet {
  int local;
  float temp;
};
packet localData;

void setup() {
  WiFi.setPhyMode(WIFI_PHY_MODE_11B);
  pinMode(12, INPUT_PULLUP);
  digitalWrite(12, HIGH);
  pinMode(14, OUTPUT);
  digitalWrite(14, LOW);
  lcd.init();
  lcd.backlight();
  //WiFi.setOutputPower(20.5); 
  WiFi.persistent(0);
  Serial.begin(115200);
  Serial.println();
  WiFi.mode(WIFI_AP);
  

  while (!WiFi.softAP(ssid, password, 9, false, 15)) {
    delay(500);
    Serial.print(".");
  }
  Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("CONNECTING!!");
  Udp.begin(localUdpPort);
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.softAPIP().toString().c_str(), localUdpPort);
}

void sendCommand(IPAddress to, char* data,  bool requestResponse) {
  char* packetData = data;
  const char delimiter[] = "NODECM";
  const char delimiter2[] = "CMNODE";
  Udp.beginPacket(to, clientPort);
  if (requestResponse) {
    Udp.write((const uint8_t*)delimiter, sizeof(delimiter) - 1);
    Udp.write((const char*)packetData, sizeof(packetData));
    Udp.write((const uint8_t*)delimiter2, sizeof(delimiter2) - 1);
  } else {
    Udp.write((const char*)packetData, sizeof(packetData));
  }
  Udp.endPacket();
}

void loop()
{
  if (running) {
    if (millis() - now4 >= 1000) {
      if (minTemp < 57) {
        alarm = true;
        lcd.setCursor(0, 3);
        lcd.print("TOO COLD!!");
      }
      if (maxTemp > 91) {
        alarm = true;
        lcd.setCursor(0, 3);
        lcd.print("TOO HOT!!");

      }
      now4 = millis();
    }

  }
  if (alarm) {


    unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
      if (ledState == LOW) {
        ledState = HIGH;
      } else {
        ledState = LOW;
      }
      digitalWrite(14, ledState);

    }
  }
  if (digitalRead(12) == LOW) {
    maxTemp = -99;
    minTemp = 199;
    alarm = false;
    lcd.setCursor(0, 3);
    lcd.print("            ");
    digitalWrite(14, LOW);
  }
  int packetSize = Udp.parsePacket();
  if (packetSize)
  {
    // Serial.println("Message");
    int len = Udp.read(incomingPacket, 800);
    char verifyStart[7];
    char verifyEnd[7];
    Serial.println((char*)incomingPacket);
    strncpy (verifyStart, (char*)incomingPacket, 7 );
    strncpy (verifyEnd, (char *)incomingPacket + len - 6 , 7 );
    if (strcmp(verifyStart, "NODE01") == 0) {
      if (strcmp(verifyEnd, "01NODE") == 0) {
        // Serial.println("Node01");
        memcpy(&localData, incomingPacket + 6, sizeof(localData));
        //Serial.print("Tempature is  ");

        if (localData.temp > -32 && localData.temp < 199) {
          if (localData.temp > maxTemp) {
            if (millis() - minmaxwait >= 3000) {
              running = true;
              maxTemp = localData.temp;
              minmaxwait = millis();
            }
          } else {
            minmaxwait = millis();
          }
          if (localData.temp < minTemp) {
            if (millis() - minmaxwait2 >= 3000) {
              running = true;
              minTemp = localData.temp;
              minmaxwait2 = millis();
            }
          } else {
            minmaxwait2 = millis();
          }
        }
        lcd.setCursor(0, 0);
        lcd.print("Temperature:");
        if (localData.temp > -32 && localData.temp < 199) {
          lcd.setCursor(12, 0);
          lcd.print("      ");
          lcd.setCursor(12, 0);
          lcd.print(localData.temp);

        }

        lcd.setCursor(0, 1);
        lcd.print("Max Temp:");
        lcd.setCursor(9, 1);
        lcd.print("      ");
        lcd.setCursor(9, 1);
        lcd.print(maxTemp);
        lcd.setCursor(0, 2);
        lcd.print("Min Temp:");
        lcd.setCursor(9, 2);
        lcd.print("      ");
        lcd.setCursor(9, 2);
        lcd.print(minTemp);

        //   Serial.println(localData.temp);
        now = millis();
      }
    }
    if (strcmp(verifyStart, "RETURN") == 0) {
      now3 = millis();
    }
    Serial.println("hello");
    Serial.println(len);
    Serial.println(verifyStart);
    Serial.println(verifyEnd);
  }
}